【发布时间】:2016-09-19 12:33:10
【问题描述】:
我正在为 Cortex-M0 MC 开发和嵌入代码,其中我将变量声明为 volatile char TOS_Mins_Char[3];
在 ISR 期间存储一些值,这些值会定期更改。
我想使用atoi() 函数将这些字符转换为整数,
但是atoi() 的参数类型是指向常量字符串的指针:int atoi(const char *); 这会给我错误,除非我在变量声明中避免使用volatile 关键字。 (在其他标准函数中也面临类似的情况)
- 除了写一个用户定义的 功能?
- 如果我使用
const char TOS_Mins_Char[3];,会不会有问题? - 是否必须使用
volatile关键字,它的用途是什么 与 ARM MC 对比?
【问题讨论】:
-
volatile在您的情况下是强制性的:它告诉编译器不对访问此变量执行任何优化(您需要它,因为您在正常模式和中断模式下访问它)。我认为,最好的方法是将您的 volatile 缓冲区本地复制到标准缓冲区,并使用标准 -
@Garf365:有什么建议可以准确地如何以保存方式执行“复制”?
-
不清楚您是否需要
volatile,仅仅因为您在中断处理程序中使用该变量并不意味着它必须是volatile。请提供带有所有相关信息的minimal reproducible example(它不需要是可运行的,但应该代表该变量的所有用途。您还应该首先了解限定符volatile和const的含义一个变量和一个函数参数声明。您的问题表明缺乏知识 - 没有冒犯。 -
我将字符从一个主数组存储到另一个数组以进行一些数学计算,确切地说,我在从设备获取的时间添加了一个常量偏移量,所以我需要提取代表小时的字符(存储在此变量中),以便将其转换为分钟。分钟被单独提取和转换并添加到此,然后是 5 小时偏移量的常量。 (那里没有更多的卡路里)。