-
从这里给出的例子:__IO &静态关键字C?,我正在努力将一些使用微控制器的C文件转换为rust
-
我想知道rust中这个volatile类型的等价
-
我知道rust中的不安全代码:是__IO替代的一个例子吗?
-
我使用的是STM32f4XX型HAL
所有I/O限定符宏都在core_cm4.h中定义(通常通过stm324xx.h间接包含),因此:
#ifdef __cplusplus
#define __I volatile /*!< Defines 'read only' permissions */
#else
#define __I volatile const /*!< Defines 'read only' permissions */
#endif
#define __O volatile /*!< Defines 'write only' permissions */
#define __IO volatile /*!< Defines 'read / write' permissions */
正如你所看到的,它们只是标准C限定符的别名,而不是C关键字本身,甚至不是编译器扩展——它们是CMSIS的一部分。
我不是Rust专家,但在Rust中似乎没有直接的等价,因为您不能简单地限定变量以确保所有访问都是显式的,因此内存映射I/O使用不同的方法。有一个mmio板条箱和read_volatile
/write_volatile
,还有一个Volatile
包装器,所有这些都可能与这个问题有关。