Rust与Tock操作系统的关键特性及使用指南
1. Tock驱动的缓冲区使用模式
在Tock系统中,驱动对缓冲区的使用遵循特定模式。以I2C驱动为例,当它接收到请求时,会接管缓冲区。当请求完成后,通过 command_complete 函数返回缓冲区。触摸面板驱动使用返回的数据后,再通过 replace 函数将缓冲区放回原始的 TakeCell 中。所有Tock驱动和内核都依赖这种缓冲区使用模式。
2. 全局变量
Tock不允许使用动态分配的数据,这意味着所有引用(包括驱动)都必须静态分配。这与Rust不鼓励使用可变全局变量的理念有所不同。在Rust中,这些全局变量被称为静态变量,安全的Rust代码只允许使用不可变的静态变量,使用可变静态变量被认为是不安全的。
2.1 可变静态变量的风险
可变静态变量不安全,因为编译器无法保证对它们的访问是线程安全的,也不能保证在任何给定时间只有一个可变引用。
2.2 static_init 宏
为了在Tock中定义和初始化全局变量,Tock提供了一个名为 static_init 的宏。以下是Tock内核定义和初始化的示例:
let board_kernel = static_init!(kernel::Kernel, kernel::Kernel::new(&PROCESSES));
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



