https://github.com/ydrmaster/rrtt
rt-thread in rust
https://github.com/ydrmaster/rrtt
Last synced: over 1 year ago
JSON representation
rt-thread in rust
- Host: GitHub
- URL: https://github.com/ydrmaster/rrtt
- Owner: YdrMaster
- Created: 2022-12-22T08:00:11.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2022-12-28T00:05:28.000Z (over 3 years ago)
- Last Synced: 2025-01-21T17:08:32.168Z (over 1 year ago)
- Language: Rust
- Size: 22.5 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# rt-thread in rust
## version 0 (2022-12-22..)
直接翻译 C 版本试试看。
### 2022-12-24
C 里很常见的基于数值的条件编译:
```c
#if RT_THREAD_PRIORITY_MAX <= 32
...
#else
...
#endif
```
在 Rust 里没有对应。
想了一个办法,要求通过环境变量传入这种常量,在 build.rs 里把不同数值范围的环境变量转化为 [`rustc-cfg`](https://doc.rust-lang.org/cargo/reference/build-scripts.html#cargorustc-cfgkeyvalue)。在 build.rs 里这样操作:
```rust
const PRIORITY_MAX: &str = "PRIORITY_MAX";
const PRIORITY_MAX_DEFAULT: usize = 8;
let val = match env::var(PRIORITY_MAX) {
Ok(s) => match s.parse::() {
Ok(val) => val,
Err(_) => panic!("failed to parse env {PRIORITY_MAX}={s:?} for not a number."),
},
Err(env::VarError::NotPresent) => {
println!("cargo:rustc-env={PRIORITY_MAX}={PRIORITY_MAX_DEFAULT}");
PRIORITY_MAX_DEFAULT
}
Err(env::VarError::NotUnicode(_)) => {
panic!("failed to parse env {PRIORITY_MAX} for not unicode.");
}
};
println!("cargo:rerun-if-env-changed={PRIORITY_MAX}");
println!(
"cargo:rustc-cfg={}",
if val > 32 {
"large_priority"
} else {
"small_priority"
}
);
```
然后可以在代码里用 `#[cfg(large_priority)]` 或 `#[cfg(small_priority)]` 应用条件。