Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jamesmunns/teensy3-rs-demo
Demo consumer of the teensy-rs library
https://github.com/jamesmunns/teensy3-rs-demo
Last synced: 11 days ago
JSON representation
Demo consumer of the teensy-rs library
- Host: GitHub
- URL: https://github.com/jamesmunns/teensy3-rs-demo
- Owner: jamesmunns
- License: mit
- Created: 2016-09-18T12:28:39.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2017-04-22T23:09:14.000Z (over 7 years ago)
- Last Synced: 2024-10-09T07:10:39.058Z (30 days ago)
- Language: Rust
- Size: 11.7 KB
- Stars: 22
- Watchers: 7
- Forks: 7
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Teensy with Rust
This is an example project that consumes the teensy3-rs crate. It is intended to be forked, or copied into a new project. It provideds the following important components:
* `.cargo/config`: Instructs Cargo how which target to build
* `thumb7em-none-eabi.json`: Target configuration items specific to the build process
* `Cargo.toml`: Specification of profile.(dev|release)
* `mk20dx256.ld`: Linker file specific to the Teensy 3.1/3.2 processors
* `src/main.rs`: A few necessary compiler flags# Examples
## Safe Components
Items used from the `teensy3` crate directly can be used as safe rust code. In this function, notice how there is no `unsafe` marker:
```rust
extern crate teensy3;
use teensy3::serial::Serial;// ...
/// Send a message over the USB Serial port
pub fn hello(ser: &Serial) -> Result<(),()> {
let msg = "Hello Teensy Rusty World!\n\r";
ser.write_bytes(msg.as_bytes())
}
```Items used from the `teensy3::bindings` module are NOT marked as safe (because they are direct C++ code mappings). These require an `unsafe` mark at either the function or block level:
```rust
extern crate teensy3;
use teensy3::bindings;// ...
/// Blink the light twice to know we're alive
pub unsafe fn alive() {
for _ in 0..2 {
bindings::digitalWrite(13, bindings::LOW as u8);
bindings::delay(200);
bindings::digitalWrite(13, bindings::HIGH as u8);
bindings::delay(200);
bindings::digitalWrite(13, bindings::LOW as u8);
bindings::delay(200);
}
}
```# Usage:
* Fork/Clone this repo
* Install xargo
* Install `arm-none-eabi-gcc`, add to $PATH
* Run `make flash`# Dependencies
* A somewhat current Nightly Build of Rust (currently tested on `rustc 1.13.0-nightly (6ffdda1ba 2016-09-14)`)
* [Japaric's Xargo Tool](https://github.com/japaric/xargo) - used to cross compile libcore
* A somewhat current arm-none-eabi-gcc toolchain.
* 4.9.3 seems to work with a slight linker hack
* 6.x.x seems to work without hacks.# License
Rust contributions are licensed under the MIT License.
**Please Note:** ASM, C, C++, and Linker Components of the `teensy3-sys` crate (a dependency of the `teensy3` crate) contain components licensed under the MIT License, PJRC's modified MIT License, and the LGPL v2.1. Please refer to individual components for more details.