今天调试一个程序,环境是IAR8.40.2+STM32+FreeRTOS,出现了一个莫名奇妙的问题:
1.声明了一个结构体,定义了一个结构体数组,8个长度,全局变量;
2.结构体里有个成员uint8_t类型的变量Mode,初始化是8个结构体变量里的Mode都设定为3;
3.数组[1]里的Mode变量会被系统莫名奇妙的修改,清0;其他数组里的Mode变量能保持不变;
4.发现变量被修改发生在调研freertos的延时函数osDelay(1)时发生;
5.找原因,代码没有问题,没有地方修改;怀疑IAR出问题了,重装了软件;C代码优化改为NONE,均不行。
6.最后解决方法是把uint8_t变量,改成uint32_t就可以了,变量能够按代码逻辑运行,不再被自动清0。
说的有点乱,不知说明白了没有,大家遇到过这种情况吗?什么原因呢?
|