commit | 57e8682f2e6a62443822ebfc34f56c035cf92885 | [log] [tgz] |
---|---|---|
author | Johnathan Van Why <jrvanwhy@google.com> | Tue Oct 01 11:50:36 2019 -0700 |
committer | GitHub <noreply@github.com> | Tue Oct 01 11:50:36 2019 -0700 |
tree | d546baa001862174e92b1c2a20369fffe2704f23 | |
parent | 686a7c6ad5fb4e0d4928db200f43b943571c088d [diff] | |
parent | 6acae069fcf33db62b1be78ab6434b09c37dd03a [diff] |
Merge pull request #88 from alistair23/alistair/riscv32 riscv32: Initial support of RISC-V
Rust userland library for Tock (WIP)
Tested with tock a3b36d5872315ff05ef5ad34ed9453b0789218ce.
This project is nascent and still under heavy development, but first steps:
Ensure you have rustup installed.
Clone the repository.
git clone https://github.com/tock/libtock-rs cd libtock-rs
Install elf2tab
.
cargo install -f elf2tab --version 0.4.0
Add dependencies for cross-compilation.
rustup target add thumbv7em-none-eabi
Use the run_example
script to compile and run the example app you want to use:
./run_example.sh blink
This should work if you are using the nRF52-DK platform. For other platforms, you will end up with a TAB file in target/tab
that you can program onto your Tock board (e.g. with tockloader install target/tab/blink.tab
).
If you have a hail board you can flash your device as follows:
hail
to 1
link-arg=-Tnrf52_layout.ld
in .cargo/config
to link-arg=-Thail_layout.ld
run_example.sh
as above.The easiest way to start using libtock-rs is adding an example to the examples folder. The boiler plate code you would write is
#![no_std] extern crate tock; fn main() { // Your code }
If you want to use heap based allocation you will have to add
#![feature(alloc)] extern crate alloc;
to the preamble.
To run on the code on your board you can use
./run_example.sh <your app>
This script does the following steps for you:
Having an nRF52-DK board at hand, integration tests can be run using ./run_hardware_tests.sh
. The pins P0.03 and P0.04 need to be connected (on a nRF52-DK). The expected output on the UART console will be as follows.
[test-results] heap_test = "Heap works." formatting = works should_be_one = 1 gpio_works = true trait_obj_value_usize = 1 trait_obj_value_string = string callbacks_work = true all_tests_run = true
Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.