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

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



