刚接触嵌入式开发,有段代码不懂,怀疑中。。。

WM_USER 2008-06-25 09:13:14
代码大致如下:
int main()
{
... /*此处设置一断点

...
while(1);

return 0;
}

这段代码非常简单,我在main函数第一行设置了个断点,以我们C的知识,
程序会在while(1)处无限循环下去,然而为什么实际运行时,运行过
while(1)语句后,程序会重复地回到断点的地方啊?好象main函数在
不断被调用执行啊?
晕啊!
...全文
235 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
VNZN 2008-06-30
  • 打赏
  • 举报
回复
关狗,或者不确定的话就查看一下复位源
gogofly_lee 2008-06-29
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 yuanrongfa 的回复:]

像 while(1);如果在平时我们接触的windows下使用的普通编程,它就会不停地死循环下去,但是单片机就不会,因为如果你设置了中断,它每执行一个指命都查一下中断标志位是否被置为1,如果是的话,那么就从while(1);是暂停下去,然后去执行中断的语句,这个问题,在我刚开始接触单片机的时候,也是不懂,后来也没有人告诉我是怎…
[/Quote]
中断会去执行相应的中断处理,但是在中断执行完成后会回到刚才被中断的地方继续执行被中断的程序,所以不应该再回到MAIN的第一句去执行呀,同意5楼的观点:在程序运行过程中,系统被不停的复位了, 可能是看门狗,也可能是MAIN函数里有其他BUG导致系统异常,可以仔细查查.
yuanrongfa 2008-06-28
  • 打赏
  • 举报
回复
如果你设定了一个有效的中断环境,其实它每执行一个中断语句都会检查一下中断的溢出位是否溢出。


像 while(1);如果在平时我们接触的windows下使用的普通编程,它就会不停地死循环下去,但是单片机就不会,因为如果你设置了中断,它每执行一个指命都查一下中断标志位是否被置为1,如果是的话,那么就从while(1);是暂停下去,然后去执行中断的语句,这个问题,在我刚开始接触单片机的时候,也是不懂,后来也没有人告诉我是怎么一回事,是自已后来在看书的时候看到的.....
shuiyan 2008-06-27
  • 打赏
  • 举报
回复
ARM?那估计就是我在1楼说的,被看门狗给复位了。先关了内部的看门狗。
jeefjiang1983 2008-06-27
  • 打赏
  • 举报
回复
是等待中断
WM_USER 2008-06-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 shuiyan 的回复:]
ARM?那估计就是我在1楼说的,被看门狗给复位了。先关了内部的看门狗。
[/Quote]

应该不是看门狗,
而是定时器中断。
WM_USER 2008-06-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 takaka 的回复:]
有没有操作系统?
linux下的?
[/Quote]

没有,裸机,
试验板,
通过Multi-ICE和板子通信调试,
AXD跟踪代码时发现这种情况。
takaka 2008-06-27
  • 打赏
  • 举报
回复
有没有操作系统?
linux下的?
godflash 2008-06-26
  • 打赏
  • 举报
回复
应该是个中断例程

等待中断执行.

请看中断服务程序处的代码.
WM_USER 2008-06-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 shuiyan 的回复:]
什么平台?什么环境?什么CPU?
看门狗。
[/Quote]

是ARM,
调试状态下。
shuiyan 2008-06-25
  • 打赏
  • 举报
回复
什么平台?什么环境?什么CPU?
看门狗。

27,375

社区成员

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

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