summaryrefslogtreecommitdiff
path: root/components/rust/docs/2.applications/README_zh.md
blob: d2f1568fb3547f369a1360d0683fe50039cb2de7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# RT-Thread Rust 示例用户应用程序

这个目录包含了一系列用于演示 RT-Thread 中 Rust 编程功能的示例用户应用程序和组件。这些示例展示了如何在 RT-Thread 实时操作系统中使用 Rust 语言进行系统编程。

## 目录结构

```
example_usrapp/
├── SConscript              # SCons 构建脚本
├── fs/                     # 文件系统操作示例
├── loadlib/                # 动态库加载示例
├── mutex/                  # 互斥锁同步示例
├── param/                  # 参数处理示例
├── queue/                  # 消息队列示例
├── semaphore/              # 信号量同步示例
└── thread/                 # 线程管理示例
```

## 构建和运行

### 前提条件

1. 确保 RT-Thread 配置中启用了 Rust 支持 (`RT_USING_RUST`),并且开启 examples 编译(`RT_USING_RUST_EXAMPLES`)中的应用(`RT_RUST_BUILD_APPLICATIONS`)
2. 安装 Rust 工具链和相关依赖
3. 配置正确的交叉编译环境

### 构建步骤

1. 在 RT-Thread 项目根目录执行:
   ```bash
   scons -j$(nproc)
   ```

2. 构建系统会自动:
   - 检测启用的 RT-Thread 配置
   - 根据配置启用相应的 Rust 特性
   - 编译所有示例应用为静态库
   - 链接到最终的固件镜像

### 运行示例

在 RT-Thread 系统启动后,可以通过命令行运行各个示例:

```bash
# 查看所有可用示例
help

# 运行线程示例
rust_thread_demo

# 运行文件系统示例
rust_file_demo

# 其他示例类似...
```

## 技术特性

### 依赖管理

所有示例应用都依赖以下核心组件:
- `rt-rust`: RT-Thread Rust 绑定库
- `rt-macro`: 主函数宏支持

`fs`示例还依赖日志组件:
- `em_component_log`: 日志组件

### 特性配置

- 支持条件编译特性
- 自动特性检测和启用
- 模块化的功能配置

### 构建系统集成

- 与 SCons 构建系统完全集成
- 支持清理和增量构建
- 自动依赖管理

## 开发指南

### 添加新示例

1. 在 `example_usrapp/` 下创建新目录
2. 添加 `Cargo.toml` 配置文件
3. 在 `src/lib.rs` 中实现示例代码
4. 使用 `#[macro_main_use]` 宏定义入口点

### 示例模板

```rust
#![no_std]

use macro_main::macro_main_use;
use rt_rust::param::Param;
use rt_rust::println;

#[macro_main_use(
    name = "your_demo_name",
    component = "是否为组件示例",
    app = "是否为用户应用示例",
    cmd = true,
    desc = "Your demo description."
)]
fn main(_param: Param) {
    println!("Hello from your demo!");
    // 你的示例代码...
}
```

## 故障排除

### 常见问题

1. **编译失败**: 检查 Rust 工具链是否正确安装
2. **链接错误**: 确认交叉编译目标配置正确
3. **运行时错误**: 检查栈大小和内存配置

### 调试建议

1. 使用 `println!` 进行基本调试输出
2. 启用日志特性获取详细信息
3. 检查 RT-Thread 配置项是否正确启用