这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 调试51单片机程序,花了2天才搞定! 分享一下我的经验~

共2条 1/1 1 跳转至

调试51单片机程序,花了2天才搞定! 分享一下我的经验~

工程师
2019-12-02 14:55:31     打赏

一直以来,对51单片机还是觉得是“小菜一碟”,但最近的一个事情改变了我的认知

下面分享一下我的一些经验:


其实就是偷懒造成的,一个函数在程序初始化时使用,这个时候系统任何中断并没有打开,另外这个函数在定时中断中也有使用,天真的认为不存在同时调用的可能,所以不可能存在再入的问题,就是没理会重复调用的告警信息。函数再入引起,不要忽视警告信息!


后来程序不定时的出现问题,因为开始已经有了不可能同时调用再入这个函数的场合,所以就没有检查这个问题。

实在没有办法,刚才检查MAP信息,TNND才发现,其实不仅仅有再入的问题,这个函数使用的局域变量占用的地址,有一个是和其他函数是重复覆盖使用的,真相大白了,两天时间就是不想写一个reentrant,因为会增加一点点代码。




关键词: 单片机     调试     重入函数     函数再入    

工程师
2019-12-03 00:10:48     打赏
2楼

回楼上的明月风:

哈哈,就是一样的思维才导致查了两天才解决问题。
当中断和主程序共同可以调用一个函数的时候,这个函数不是再入属性,编译器优化这个函数局域变量占用内存的时候,可能和主程序其他函数做覆盖优化,这个时候问题就发生了,哪怕仅仅覆盖一个字节。
当局域变量不是静态分配而是堆栈的话,就没有这个问题发生了。


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]