Merge pull request #7 from datdenkikniet/cargo-generate
Remove Cargo generate
This commit is contained in:
@@ -29,4 +29,4 @@ jobs:
|
|||||||
|
|
||||||
- name: Run steps
|
- name: Run steps
|
||||||
run: |
|
run: |
|
||||||
./run-steps.sh
|
./ci.sh
|
||||||
|
|||||||
+4
-5
@@ -1,7 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
# TODO fix `authors` and `name` if you didn't use `cargo-generate`
|
# TODO fix `authors` and `name` if you didn't use `cargo-generate`
|
||||||
authors = ["{{authors}}"]
|
name = "test-app"
|
||||||
name = "{{project-name}}"
|
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
|
||||||
@@ -10,10 +9,10 @@ cortex-m = { version = "0.7", features = ["critical-section-single-core"] }
|
|||||||
defmt = { version = "0.3", features = ["encoding-rzcobs"] }
|
defmt = { version = "0.3", features = ["encoding-rzcobs"] }
|
||||||
defmt-brtt = { version = "0.1", default-features = false, features = ["rtt"] }
|
defmt-brtt = { version = "0.1", default-features = false, features = ["rtt"] }
|
||||||
panic-probe = { version = "0.3", features = ["print-defmt"] }
|
panic-probe = { version = "0.3", features = ["print-defmt"] }
|
||||||
# TODO select the correct rtic backend
|
# TODO(4) Select the correct rtic backend
|
||||||
rtic = { version = "2.0.0-alpha.1", features = [ "$RTIC_BACKEND" ] }
|
rtic = { version = "2.0.0-alpha.1", features = [ "$RTIC_BACKEND" ] }
|
||||||
# TODO enter your HAL here
|
# TODO(5) Add hal as dependency
|
||||||
# some-hal = "1.2.3"
|
some-hal = "1.2.3"
|
||||||
# TODO add a monotonic if you use scheduling
|
# TODO add a monotonic if you use scheduling
|
||||||
# rtic-monotonics = { version = "1.0.0-alpha.2", features = [ "cortex-m-systick" ]}
|
# rtic-monotonics = { version = "1.0.0-alpha.2", features = [ "cortex-m-systick" ]}
|
||||||
|
|
||||||
|
|||||||
@@ -25,28 +25,15 @@ $ # make sure to install v0.2.0 or later
|
|||||||
$ cargo install probe-run
|
$ cargo install probe-run
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 3. [`cargo-generate`]:
|
|
||||||
|
|
||||||
``` console
|
|
||||||
$ cargo install cargo-generate
|
|
||||||
```
|
|
||||||
|
|
||||||
[`cargo-generate`]: https://crates.io/crates/cargo-generate
|
|
||||||
|
|
||||||
> *Note:* You can also just clone this repository instead of using `cargo-generate`, but this involves additional manual adjustments.
|
|
||||||
|
|
||||||
## Setup
|
## Setup
|
||||||
|
|
||||||
#### 1. Initialize the project template
|
#### 1. Clone the project template
|
||||||
|
|
||||||
``` console
|
``` console
|
||||||
$ cargo generate \
|
$ git clone https://github.com/rtic-rs/app-template test-app
|
||||||
--git https://github.com/rtic-rs/app-template \
|
|
||||||
--branch main \
|
|
||||||
--name my-app
|
|
||||||
```
|
```
|
||||||
|
|
||||||
If you look into your new `my-app` folder, you'll find that there are a few `TODO`s in the files marking the properties you need to set.
|
If you look into your new `test-app` folder, you'll find that there are a few `TODO`s in the files marking the properties you need to set. The todo's are formatted as `TODO(n)`, where `n` is the number of the step in which the TODO is explained.
|
||||||
|
|
||||||
Let's walk through them together now.
|
Let's walk through them together now.
|
||||||
|
|
||||||
@@ -91,8 +78,8 @@ In `Cargo.toml`, activate the correct `rtic` backend for your target by replacin
|
|||||||
|
|
||||||
```diff
|
```diff
|
||||||
# Cargo.toml
|
# Cargo.toml
|
||||||
-rtic = { version = "2.0.0-alhpa.1", features = [ "$RTIC_BACKEND" ] }
|
-rtic = { version = "2.0.0-alpha.1", features = [ "$RTIC_BACKEND" ] }
|
||||||
+rtic = { version = "2.0.0-alhpa.1", features = [ "thumbv7-backend" ] }
|
+rtic = { version = "2.0.0-alpha.1", features = [ "thumbv7-backend" ] }
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 5. Add a HAL as a dependency
|
#### 5. Add a HAL as a dependency
|
||||||
@@ -106,7 +93,7 @@ For the nRF52840 you'll want to use the [`nrf52840-hal`].
|
|||||||
```diff
|
```diff
|
||||||
# Cargo.toml
|
# Cargo.toml
|
||||||
[dependencies]
|
[dependencies]
|
||||||
-# some-hal = "1.2.3"
|
-some-hal = "1.2.3"
|
||||||
+nrf52840-hal = "0.16.0"
|
+nrf52840-hal = "0.16.0"
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -119,8 +106,8 @@ You will need to not just specify the `rp-hal` HAL, but a BSP (board support cra
|
|||||||
Now that you have selected a HAL, fix the HAL import in `src/lib.rs`
|
Now that you have selected a HAL, fix the HAL import in `src/lib.rs`
|
||||||
|
|
||||||
``` diff
|
``` diff
|
||||||
// my-app/src/lib.rs
|
# my-app/src/lib.rs
|
||||||
-// use some_hal as _; // memory layout
|
-use some_hal as _; // memory layout
|
||||||
+use nrf52840_hal as _; // memory layout
|
+use nrf52840_hal as _; // memory layout
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -129,9 +116,13 @@ Now that you have selected a HAL, fix the HAL import in `src/lib.rs`
|
|||||||
In `src/bin/minimal.rs`, edit the `rtic::app` macro into a valid form.
|
In `src/bin/minimal.rs`, edit the `rtic::app` macro into a valid form.
|
||||||
|
|
||||||
``` diff
|
``` diff
|
||||||
|
# my-app/src/bin/minimal.rs
|
||||||
\#[rtic::app(
|
\#[rtic::app(
|
||||||
- device = some_hal::pac, // TODO: Replace `some_hal::pac` with the path to the PAC
|
- // TODO: Replace `some_hal::pac` with the path to the PAC
|
||||||
- dispatchers = [FreeInterrupt1, ...] // TODO: Replace the `FreeInterrupt1, ...` with free interrupt vectors if software tasks are used
|
- device = some_hal::pac,
|
||||||
|
- // TODO: Replace the `FreeInterrupt1, ...` with free interrupt vectors if software tasks are used
|
||||||
|
- // You can usually find the names of the interrupt vectors in the some_hal::pac::interrupt enum.
|
||||||
|
- dispatchers = [FreeInterrupt1, ...]
|
||||||
+ device = nrf52840_hal::pac,
|
+ device = nrf52840_hal::pac,
|
||||||
+ dispatchers = [SWI0_EGU0]
|
+ dispatchers = [SWI0_EGU0]
|
||||||
)]
|
)]
|
||||||
@@ -175,62 +166,9 @@ If you're running out of memory (`flip-link` bails with an overflow error), you
|
|||||||
$ DEFMT_BRTT_BUFFER_SIZE=64 cargo rb hello
|
$ DEFMT_BRTT_BUFFER_SIZE=64 cargo rb hello
|
||||||
```
|
```
|
||||||
|
|
||||||
#### (10. Set `rust-analyzer.linkedProjects`)
|
|
||||||
|
|
||||||
If you are using [rust-analyzer] with VS Code for IDE-like features you can add following configuration to your `.vscode/settings.json` to make it work transparently across workspaces. Find the details of this option in the [RA docs].
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"rust-analyzer.linkedProjects": [
|
|
||||||
"Cargo.toml",
|
|
||||||
"firmware/Cargo.toml",
|
|
||||||
]
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
[RA docs]: https://rust-analyzer.github.io/manual.html#configuration
|
[RA docs]: https://rust-analyzer.github.io/manual.html#configuration
|
||||||
[rust-analyzer]: https://rust-analyzer.github.io/
|
[rust-analyzer]: https://rust-analyzer.github.io/
|
||||||
|
|
||||||
## Trying out the git version of defmt
|
|
||||||
|
|
||||||
This template is configured to use the latest crates.io release (the "stable" release) of the `defmt` framework.
|
|
||||||
To use the git version (the "development" version) of `defmt` follow these steps:
|
|
||||||
|
|
||||||
1. Install the *git* version of `probe-run`
|
|
||||||
|
|
||||||
``` console
|
|
||||||
$ cargo install --git https://github.com/knurling-rs/probe-run --branch main
|
|
||||||
```
|
|
||||||
|
|
||||||
2. Check which defmt version `probe-run` supports
|
|
||||||
|
|
||||||
``` console
|
|
||||||
$ probe-run --version
|
|
||||||
0.2.0 (aa585f2 2021-02-22)
|
|
||||||
supported defmt version: 60c6447f8ecbc4ff023378ba6905bcd0de1e679f
|
|
||||||
```
|
|
||||||
|
|
||||||
In the example output, the supported version is `60c6447f8ecbc4ff023378ba6905bcd0de1e679f`
|
|
||||||
|
|
||||||
3. Switch defmt dependencies to git: uncomment the last part of the root `Cargo.toml` and enter the hash reported by `probe-run --version`:
|
|
||||||
|
|
||||||
``` diff
|
|
||||||
-# [patch.crates-io]
|
|
||||||
-# defmt = { git = "https://github.com/knurling-rs/defmt", rev = "use defmt version reported by `probe-run --version`" }
|
|
||||||
-# defmt-rtt = { git = "https://github.com/knurling-rs/defmt", rev = "use defmt version reported by `probe-run --version`" }
|
|
||||||
-# defmt-test = { git = "https://github.com/knurling-rs/defmt", rev = "use defmt version reported by `probe-run --version`" }
|
|
||||||
-# panic-probe = { git = "https://github.com/knurling-rs/defmt", rev = "use defmt version reported by `probe-run --version`" }
|
|
||||||
+[patch.crates-io]
|
|
||||||
+defmt = { git = "https://github.com/knurling-rs/defmt", rev = "60c6447f8ecbc4ff023378ba6905bcd0de1e679f" }
|
|
||||||
+defmt-rtt = { git = "https://github.com/knurling-rs/defmt", rev = "60c6447f8ecbc4ff023378ba6905bcd0de1e679f" }
|
|
||||||
+defmt-test = { git = "https://github.com/knurling-rs/defmt", rev = "60c6447f8ecbc4ff023378ba6905bcd0de1e679f" }
|
|
||||||
+panic-probe = { git = "https://github.com/knurling-rs/defmt", rev = "60c6447f8ecbc4ff023378ba6905bcd0de1e679f" }
|
|
||||||
```
|
|
||||||
|
|
||||||
You are now using the git version of `defmt`!
|
|
||||||
|
|
||||||
**NOTE** there may have been breaking changes between the crates.io version and the git version; you'll need to fix those in the source code.
|
|
||||||
|
|
||||||
## Support
|
## Support
|
||||||
|
|
||||||
`app-template` is part of the [Knurling] project, [Ferrous Systems]' effort at
|
`app-template` is part of the [Knurling] project, [Ferrous Systems]' effort at
|
||||||
|
|||||||
@@ -1,2 +0,0 @@
|
|||||||
[template]
|
|
||||||
ignore = ["README.md", "run-steps.sh"]
|
|
||||||
+20
-9
@@ -1,17 +1,30 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
set -ex
|
set -e
|
||||||
|
|
||||||
project="test-app"
|
project="test-app"
|
||||||
|
|
||||||
|
cleanup() {
|
||||||
|
echo "Cleaning up"
|
||||||
|
mv Cargo.toml.tmp Cargo.toml
|
||||||
|
mv .cargo/config.toml.tmp .cargo/config.toml
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ "$1" = "cleanup" ]; then
|
||||||
|
cleanup
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
echo "Installing necessary tools"
|
echo "Installing necessary tools"
|
||||||
cargo install flip-link cargo-generate sd
|
cargo install flip-link sd
|
||||||
|
|
||||||
echo "Cleaning up old project"
|
echo "Cleaning up old project"
|
||||||
rm -rf "$project"
|
rm -rf "$project"
|
||||||
|
|
||||||
echo "Creating new project"
|
echo "Creating new project"
|
||||||
cargo generate -p . --name "$project"
|
# cargo generate -p . --name "$project"
|
||||||
|
mkdir -p "$project"
|
||||||
|
cp -r Cargo.toml LICENSE-* src/ rust-toolchain.toml .cargo/ "$project"
|
||||||
|
|
||||||
echo "Storing current config so that the child project will compile."
|
echo "Storing current config so that the child project will compile."
|
||||||
mv Cargo.toml Cargo.toml.tmp
|
mv Cargo.toml Cargo.toml.tmp
|
||||||
@@ -22,16 +35,14 @@ cd "$project"
|
|||||||
echo "Performing steps"
|
echo "Performing steps"
|
||||||
|
|
||||||
sd -s -- '--chip $CHIP' '--chip nRF52840_xxAA' .cargo/config.toml
|
sd -s -- '--chip $CHIP' '--chip nRF52840_xxAA' .cargo/config.toml
|
||||||
sd -s '# target = "thumbv7em-none-eabihf" # Cortex-M4F and Cortex-M7F (with FPU)' 'target = "thumbv7em-none-eabihf"' .cargo/config.toml
|
sd -s '# target = "thumbv7em-none-eabihf"' 'target = "thumbv7em-none-eabihf"' .cargo/config.toml
|
||||||
sd -s '$RTIC_BACKEND' 'thumbv7-backend' Cargo.toml
|
sd -s '$RTIC_BACKEND' 'thumbv7-backend' Cargo.toml
|
||||||
sd -s '# some-hal = "1.2.3"' 'nrf52840-hal = "0.16.0"' Cargo.toml
|
sd -s 'some-hal = "1.2.3"' 'nrf52840-hal = "0.16.0"' Cargo.toml
|
||||||
sd -s '// use some_hal as _; // memory layout' 'use nrf52840_hal as _;' src/lib.rs
|
sd -s 'use some_hal as _;' 'use nrf52840_hal as _;' src/lib.rs
|
||||||
sd -s 'some_hal::pac' 'nrf52840_hal::pac' src/bin/minimal.rs
|
sd -s 'some_hal::pac' 'nrf52840_hal::pac' src/bin/minimal.rs
|
||||||
sd -s 'FreeInterrupt1, ...' 'SWI0_EGU0' src/bin/minimal.rs
|
sd -s 'FreeInterrupt1, ...' 'SWI0_EGU0' src/bin/minimal.rs
|
||||||
|
|
||||||
cargo bbr minimal
|
cargo bbr minimal
|
||||||
|
|
||||||
cd ..
|
cd ..
|
||||||
echo "Cleaning up"
|
cleanup
|
||||||
mv Cargo.toml.tmp Cargo.toml
|
|
||||||
mv .cargo/config.toml.tmp .cargo/config.toml
|
|
||||||
+7
-3
@@ -2,11 +2,15 @@
|
|||||||
#![no_std]
|
#![no_std]
|
||||||
#![feature(type_alias_impl_trait)]
|
#![feature(type_alias_impl_trait)]
|
||||||
|
|
||||||
use {{crate_name}} as _; // global logger + panicking-behavior + memory layout
|
use test_app as _; // global logger + panicking-behavior + memory layout
|
||||||
|
|
||||||
|
// TODO(7) Configure the `rtic::app` macro
|
||||||
#[rtic::app(
|
#[rtic::app(
|
||||||
device = some_hal::pac, // TODO: Replace `some_hal::pac` with the path to the PAC
|
// TODO: Replace `some_hal::pac` with the path to the PAC
|
||||||
dispatchers = [FreeInterrupt1, ...] // TODO: Replace the `FreeInterrupt1, ...` with free interrupt vectors if software tasks are used
|
device = some_hal::pac,
|
||||||
|
// TODO: Replace the `FreeInterrupt1, ...` with free interrupt vectors if software tasks are used
|
||||||
|
// You can usually find the names of the interrupt vectors in the some_hal::pac::interrupt enum.
|
||||||
|
dispatchers = [FreeInterrupt1, ...]
|
||||||
)]
|
)]
|
||||||
mod app {
|
mod app {
|
||||||
// Shared resources go here
|
// Shared resources go here
|
||||||
|
|||||||
+3
-2
@@ -4,10 +4,11 @@
|
|||||||
use core::sync::atomic::{AtomicUsize, Ordering};
|
use core::sync::atomic::{AtomicUsize, Ordering};
|
||||||
use defmt_brtt as _; // global logger
|
use defmt_brtt as _; // global logger
|
||||||
|
|
||||||
// TODO adjust HAL import
|
|
||||||
// use some_hal as _; // memory layout
|
|
||||||
use panic_probe as _;
|
use panic_probe as _;
|
||||||
|
|
||||||
|
// TODO(6) Import your HAL
|
||||||
|
use some_hal as _; // memory layout
|
||||||
|
|
||||||
// same panicking *behavior* as `panic-probe` but doesn't print a panic message
|
// same panicking *behavior* as `panic-probe` but doesn't print a panic message
|
||||||
// this prevents the panic message being printed *twice* when `defmt::panic` is invoked
|
// this prevents the panic message being printed *twice* when `defmt::panic` is invoked
|
||||||
#[defmt::panic_handler]
|
#[defmt::panic_handler]
|
||||||
|
|||||||
Reference in New Issue
Block a user