RT。
比如每ms中断一次,我在main函数中定义一个全局变量SysTickCnt, 在中断中不断对这个值+1,加到1000就清零同时改变一个LED的状态。程序运行正常。
然后在中断外有个函数需要延时0.5S,于是我在函数开头读取SysTickCnt,赋值给局部变量time。在函数末尾while(time == SysTickCnt); 。然后发现程序在这里
陷入死循环,此处读出的SysTickCnt值一直固定不变。我改用指针来操作这个全局变量,仍然一样的结果。
然后我试了试,while(time == SysTickCnt) SysTickCnt = 0; 然后LED不再闪烁,可见对全局变量的写入是成功了的。
最后我的解决办法:
unsigned int TimeCNT __attribute__((at(IRAM))); // 此处IRAM是define的地址
#define SysTickCnt (*((volatile unsigned int*)IRAM))
然后在中断内外都能读取了。
问题虽然解决了,但是百思不得其解,为什么会这样?会不会和进中断后,运行模式改变有关?
PS:今天试了下,用结构体也存在这个问题,在中断内改变结构体内部数据,在中断外无法读取……
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
已经解决的问题还是应该讲出来。
至于挖坟,前面忘了,偶然搜索出来
一周热门 更多>