Skip to content

Commit 02b473e

Browse files
committed
Enhancements based on feedback from @rursprung and @felipebalbi
1 parent 37b4d3e commit 02b473e

File tree

1 file changed

+40
-31
lines changed

1 file changed

+40
-31
lines changed

src/soc-support.md

Lines changed: 40 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ essential resources, tasks, and priorities required to foster a robust Rust
1313
ecosystem around their System-on-Chip (SoC).
1414

1515
**Note:** For assistance with strategy in engaging with the community, we
16-
recommend reaching out to the Embedded Rust Working Group (REWG) leads. They
16+
recommend reaching out to the Rust Embedded Working Group (REWG) leads. They
1717
can provide valuable insights and support to help you navigate the process
1818
effectively.
1919

@@ -43,10 +43,10 @@ resolve issues and improve the quality of the PACs.
4343
### Flash Algorithms
4444

4545
[Flash Algorithms](https://open-cmsis-pack.github.io/Open-CMSIS-Pack-Spec/main/html/flashAlgorithm.html)
46-
are integrated with debugging tools like `probe-rs`. They facilitate and speed
47-
up firmware programming and debugging, streamlining development workflows.
48-
Providing well-supported FlashAlgos will enhance the integration with these
49-
tools and improve the overall developer experience.
46+
are integrated with debugging tools like [probe-rs](https://probe.rs). They
47+
facilitate and speed up firmware programming and debugging, streamlining
48+
development workflows. Providing well-supported FlashAlgos will enhance the
49+
integration with these tools and improve the overall developer experience.
5050

5151
### Vendor Tooling
5252

@@ -72,20 +72,23 @@ at the core of enabling Rust support.
7272

7373
### Generate and Maintain PACs
7474

75-
Multiple tools such as `svd2rust`, `chiptool`, `raltool`, and `svd2pac`
76-
automate the generation of PACs from register description files. Each tool has
77-
its strengths, and selecting the right one depends on the requirements and the
78-
complexity of the hardware.
75+
Multiple tools such as [svd2rust](https://crates.io/crates/svd2rust),
76+
[chiptool](https://github.com/embassy-rs/chiptool),
77+
[raltool](https://github.com/imxrt-rs/imxrt-ral/tree/master/raltool), and
78+
[svd2pac](https://github.com/Infineon/svd2pac) automate the generation of PACs
79+
from register description files. Each tool has its strengths, and selecting the
80+
right one depends on the requirements and the complexity of the hardware.
7981

8082
### Develop and Maintain HAL Crates
8183

82-
Implement `embedded-hal` and `embedded-hal-async` traits in your HAL crates.
83-
Adhering to these traits ensures compatibility across the Embedded Rust
84-
ecosystem, enhancing interoperability. It is an essential goal that HALs use
85-
Rust code rather than wrapping existing C code. An incremental porting
86-
strategy, where Rust is used for all core functionality, but C with Rust
87-
bindings is used for complex drivers, is acceptable, allowing for gradual
88-
adoption and community contributions.
84+
Implement [embedded-hal](https://crates.io/crates/embedded-hal) and
85+
[embedded-hal-async](https://crates.io/crates/embedded-hal-async) traits in
86+
your HAL crates. Adhering to these traits ensures compatibility across the
87+
Embedded Rust ecosystem, enhancing interoperability. It is an essential goal
88+
that HALs use Rust code rather than wrapping existing C code. An incremental
89+
porting strategy, where all core functionality is implemented in Rust, but C
90+
with Rust bindings is used for complex drivers, is acceptable, allowing for
91+
gradual adoption and community contributions.
8992

9093
Start with essential peripherals (clock, timer, GPIO) and expand progressively
9194
(I2C, SPI, UART, etc.) based on community feedback. Release early and often to
@@ -95,11 +98,12 @@ engage the community and gather valuable insights for further development.
9598

9699
- Ensure that crates are compatible with `no_std` environments, which are
97100
common in embedded systems without an operating system. Functionality that
98-
needs `alloc` or `std` can be included when gated with Cargo "features."
99-
- Make your crates available on [crates.io](https://crates.io/) to maximize
101+
needs `alloc` or `std` can be included when gated with Cargo
102+
[features](https://doc.rust-lang.org/cargo/reference/features.html).
103+
- Make your crates available on [crates.io](https://crates.io) to maximize
100104
visibility and ease of use for developers.
101-
- Use semantic versioning to maintain consistency and predictability in your
102-
releases.
105+
- Use [semantic versioning](https://semver.org) to maintain consistency and
106+
predictability in your releases.
103107
- Prefer licenses like Apache 2.0 and MIT for their permissive nature, which
104108
encourages broader adoption and collaboration.
105109

@@ -116,11 +120,14 @@ resolution. Implement transparent processes for:
116120

117121
### Facilitate Debugging and Testing
118122

119-
The use of `probe-rs` is prevalent in the Embedded Rust ecosystem for debugging
120-
and testing. Combined with debug-based facilities like `defmt-rtt`, which
121-
offers logging capabilities for embedded systems, the Embedded Rust ecosystem
122-
has developed numerous tools. `probe-rs` supports a wide range of target
123-
architectures, debug interfaces, and debug probe protocols.
123+
The Embedded Rust ecosystem offers various tools used for debugging
124+
and testing, with [probe-rs](https://probe.rs) being one of the most widely
125+
used. [probe-rs](https://probe.rs) supports a wide range
126+
of target architectures, debug interfaces, and debug probe protocols.
127+
Combined with debug-based facilities like
128+
[defmt-rtt](https://crates.io/crates/defmt-rtt), which provide logging
129+
capabilities for embedded systems, these tools form a robust foundation for
130+
development.
124131

125132
Thorough testing ensures hardware-software reliability, and leveraging these
126133
tools can significantly enhance development workflows.
@@ -138,8 +145,8 @@ practical starting points and learning aids.
138145

139146
BSP crates are relevant when you need to provide board-specific configurations
140147
and initializations. Unlike HALs, which focus on hardware abstraction, BSPs
141-
handle the integration of multiple components for a specific board. Having both
142-
BSP and HAL crates offers a layered approach, making it easier for developers
148+
handle the integration of multiple components for a specific board. Separation
149+
in BSP and HAL crates offers a layered approach, making it easier for developers
143150
to build applications targeting a particular hardware board.
144151

145152
### Project Templates
@@ -155,10 +162,12 @@ Embassy, RTIC, and others.
155162
Offer guides on setting up development environments for Embedded Rust projects
156163
with popular tools such as:
157164

158-
- `rust-analyzer`: for Rust syntax highlighting and error checking.
159-
- `probe-rs`: for flashing and debugging firmware.
160-
- `defmt`: a logging framework optimized for embedded systems.
161-
- `defmt-test`: testing utilities for `defmt`.
165+
- [rust-analyzer](https://rust-analyzer.github.io): for Rust syntax
166+
highlighting and error checking.
167+
- [probe-rs](https://probe.rs): for flashing and debugging firmware.
168+
- [defmt](https://crates.io/crates/defmt): a logging framework optimized for
169+
embedded systems, including a test harness called
170+
[defmt-test](https://crates.io/crates/defmt-test).
162171

163172
Providing setup instructions for these tools will help developers integrate
164173
them into their workflows, enhancing productivity and collaboration.

0 commit comments

Comments
 (0)