完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我用的COSMIC,在外部中断中修改全局变量后,发现在主程序中,修改的值又变回来了(比如说我想计数外部中断的次数)。这是怎么回事?而我在定时中断中却可以修改全局变量
|
|
相关推荐
1个回答
|
|
在COSMIC编译器中,如果在外部中断中修改全局变量后,发现在主程序中修改的值又变回来了,这可能是由于以下几个原因导致的:
1. 编译器优化:COSMIC编译器可能会对代码进行优化,导致在外部中断中修改的全局变量在主程序中被覆盖。为了解决这个问题,你可以尝试关闭编译器优化或者使用`volatile`关键字来声明全局变量,以防止编译器对其进行优化。 ```c volatile uint32_t global_variable; ``` 2. 中断优先级:在嵌入式系统中,中断优先级可能会影响到中断服务程序的执行顺序。如果外部中断的优先级较低,那么在主程序中可能会先执行其他中断服务程序,从而导致全局变量的值被覆盖。为了解决这个问题,你可以调整中断优先级,确保外部中断能够正确地修改全局变量。 3. 访问冲突:在多任务环境中,如果多个任务同时访问同一个全局变量,可能会导致访问冲突。为了解决这个问题,你可以尝试使用互斥锁或其他同步机制来确保在修改全局变量时不会出现冲突。 4. 中断服务程序执行时间:如果外部中断服务程序的执行时间过长,可能会导致主程序中的其他任务无法及时执行,从而影响到全局变量的值。为了解决这个问题,你可以尝试优化中断服务程序的执行时间,或者将一些非关键的操作从中断服务程序中移除。 5. 定时中断和外部中断的区别:定时中断通常用于周期性的任务,而外部中断则用于响应外部事件。在某些情况下,定时中断和外部中断的执行方式可能会有所不同,导致在外部中断中修改的全局变量在主程序中被覆盖。为了解决这个问题,你可以尝试在外部中断中使用与定时中断相同的方法来修改全局变量。 总之,要解决这个问题,你需要仔细检查代码,确保全局变量在外部中断中的修改能够正确地反映到主程序中。同时,注意编译器优化、中断优先级、访问冲突等因素,以确保全局变量的正确性和稳定性。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1617 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1543 浏览 1 评论
977 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
683 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1595 浏览 2 评论
1863浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
645浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
516浏览 3评论
532浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
505浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 11:47 , Processed in 0.859792 second(s), Total 80, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号