arm处理器裸机开发实战——学习笔记2

本文记录了使用定时器0控制LED闪灯实验中的问题排查过程。通过在线调试及群组交流,解决了中断子程序中标志位未能正确更新的问题,并分享了两种解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

做到中断控制系统这个实验,用定时器0控制led的闪灯,现象是没有闪灯

开始怀疑是没有进中断,从网上找了别的程序对照着修改,把所有模块都去掉,全都写进main文件里,定义flag为全局变量,烧进nand里还是不行,然后把闪灯的程序放到中断子程序里,烧进板子就可以运行了,这说明程序可以正常进中断,但是进去之后没有把标志位flag置位,或者是flag没能传递进主函数里,为了这个问题又想用AXD在线调试,结果设置AXD的时候又出现了不少麻烦

最后经过群里的帮助找到了问题,中断处理函数不能传递变量,果然是flag没有传进主函数里,解决办法有两个,一个是把闪灯程序直接放进中断子程序,另一个办法是把flag设置成volatile int flag,问题的原因是编译器编译代码时为了减少存储器的读写时间,会把flag这个变量优化掉,也就是flag的值在主函数中无法改变,加上volatile后就阻止了编译器对这个变量的优化,flag在中断子程序中取反之后就可以 传递进主函数里了

修改后的定时器0闪灯程序:http://download.youkuaiyun.com/detail/long434811/4971478


补充一下,还可以修改ads设置,让编译器减少对代码的优化


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值