[RISC-V MCU 应用开发] MRS遇到一个莫名奇妙的问题,帮忙看看,困扰一天了

[复制链接]
471|6
手机看帖
扫描二维码
随时随地手机跟帖
gaobq|  楼主 | 2022-5-7 14:26 | 显示全部楼层 |阅读模式
se, AI, MRS, RS, TI
使用CH32V307VC开发板,使用定时器TIM3定时中断,设置一个变量Send_Flag为1,在main循环中,啥都不干,判断Send_Flag是否为1,如果是发送一个字符,并清零。多么简单是吧。问题是,Send_Flag明明等于1,就是不进入if语句执行。第一次运行可以进if语句,后面再运行就进不去了,好奇怪 272006276101806e7d.png 99461627610c54f0f8.png

ADC_DMA_16CH.zip

611.72 KB

使用特权

评论回复

相关帖子

gaobq|  楼主 | 2022-5-7 15:48 | 显示全部楼层
上面的工程是在wch提供的例子上修改的,为避免环境,路径的影响,重新使用MRS生成一个工程,添加TIME模块,但效果依旧如此
469636276242385303.png

CH32V307VCT6_16AD.zip

780.17 KB

使用特权

评论回复
gaobq|  楼主 | 2022-5-7 16:00 | 显示全部楼层
找到解决方法了,添加一条延时语句就正常了,不知道为什么需要延时? 196406276270e92941.png

使用特权

评论回复
qq172179| | 2022-5-9 14:09 | 显示全部楼层
全局变量在中断做标志位时,声明和定义加上volatile,不然某些情况下会被优化成定值

使用特权

评论回复
WCHTech2| | 2022-5-10 10:53 | 显示全部楼层
gaobq 发表于 2022-5-7 16:00
找到解决方法了,添加一条延时语句就正常了,不知道为什么需要延时?

您好,因为定义变量被编译器优化了,建议在定义的变量前面加volatile关键字防止优化或者将编译器优化等级设为0,均可解决问题,如下图
Snipaste_2022-05-10_10-48-53.jpg

使用特权

评论回复
gaobq|  楼主 | 2022-5-10 12:02 | 显示全部楼层
谢谢两位,果然如此,不同的编译器差异很大。

使用特权

评论回复
sadicy| | 2022-5-27 20:34 | 显示全部楼层
真不错~~~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则