Keil ARM LPC2294 wihle主循环中存在调用函数时(如 DELAY函数),进入中断后(如CAN中断),就运行错误,求助。

yyxuan 2015-07-08 12:20:33
菜鸟求助。
Keil ARM LPC2294 wihle主循环中存在调用函数时(如 DELAY函数),进入几次(如,2次)中断后(如CAN中断),就运行错误,程序直接跑飞,停在Startup.s文件中的PAbt_Addr DCD PAbt_Handler,死循环。
若是将while主循环中的调用函数全部清除,空循环,则程序能够响应中断,且可任意多次响应,程序正常运行。

网络上查看消息说是堆栈问题,目前,Starup.s堆栈空间已经修改到足够大,依然存在此问题,求大侠指点。
...全文
455 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
鸟人123123 2018-05-04
  • 打赏
  • 举报
回复
大佬能给我发一个2294的keil工程吗?小弟感激不尽啊15955658570@163.com
yyxuan 2015-07-20
  • 打赏
  • 举报
回复
问题已解决,中断,运行模式原本是irq模式,运行了一个关断全部中断语句,就变成user模式,去掉该语句就可。谢谢大侠提醒。
worldy 2015-07-08
  • 打赏
  • 举报
回复
lz似乎应该检查中断函数里都干了些什么,是否修改了sp?
yyxuan 2015-07-08
  • 打赏
  • 举报
回复
延时代码如下: void Delay_m(BYTE time) { unsigned short int i,j; for(i = 0; i < time ; i++) //1个for语句,暂用8个机器周期 { for(j = 0; j < 4450 ; j++) ; } } 应该与上述代码无关,放置其他函数,尝试调用,依然存在上述问题。当前怀疑是Startup.s文件采用keil自动生产的设置,可能不满足应用需求。求大侠指点,关于中断应用时,在LPC2000系列ARM里,Startup.s需要如何配置。叩谢
dceacho 2015-07-08
  • 打赏
  • 举报
回复
引用 4 楼 yyxuan 的回复:
追问: 仅用最简单的程序,加上CAN驱动和中断,默认栈空间0x400,按说应该已经够大了。疑惑
盲目加大不是解决办法,要找到是哪里溢出, 中断里面设断点, 把stack窗口打开,每次触发断点就看下stack是不是正常(突然增大很多或者突然变成了一个不合适的数字),然后继续单步挨个找看是执行完哪一步出现,有时堆栈是慢慢溢出的,所以继续的话还能重复观察到 看你说的最有可能就是你的延时那里出问题, 把你延时代码贴出来看看
yyxuan 2015-07-08
  • 打赏
  • 举报
回复
追问: 仅用最简单的程序,加上CAN驱动和中断,默认栈空间0x400,按说应该已经够大了。疑惑
yyxuan 2015-07-08
  • 打赏
  • 举报
回复
如何确认栈定义需要多少空间?
worldy 2015-07-08
  • 打赏
  • 举报
回复
可怜的孩子,忘了回家的路了
worldy 2015-07-08
  • 打赏
  • 举报
回复
不是栈溢出,就是栈指针被修改了

27,374

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧