一直有个关于MAIN和WHILE(1)的问题

一对二加王炸 2017-08-29 07:39:59
while(1)里主要是执行程序么,但是一般main()函数已经调用了为什么非要在while(1)里执行呢??
...全文
814 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
一对二加王炸 2017-08-30
  • 打赏
  • 举报
回复
谢了啊 大神师傅 我已经把ADC+DMA调试好了 AD里传入了数值,但是CAN我实在有很多不懂得
tianxj001 2017-08-30
  • 打赏
  • 举报
回复
DEBUG观察中断非常简单,在中断函数加断点,哪怕就一个空操作也成,然后全速执行,如果会在中断的断点处停止,说明该中断有过触发。
tianxj001 2017-08-30
  • 打赏
  • 举报
回复
引用 5 楼 qq_39808019 的回复:
还有这个ADC+DMA的一个程序 求帮我看看到底调试时对没有,看不来这个仿真
仿真真心需要花点力气去学的,否则弄单片机会非常吃力。 CAN程序,感觉光靠仿真,不容易搞清楚,但是,简单的仿真,可以发现CAN有没有进行发送,这个可以在main函数里面,加入短的死循环,然后一步一步去观察发送邮箱是不是可以被填充,然后又是不是有发送中断(邮箱空中断),来观察你的发送过程一个基本动作,但是是不是符合收发方数据要求什么的,最好弄个CAN-USB的东西,淘宝上一大堆,买便宜的就差不多。用来进行收发CAN的调试,50大洋就可以搞定,一包烟的成本,该花还是要花。 下面CAD+DMA,DEBUG就比较简单了,这里ad是全局变量吧,50次累加ADC值,最后平均,你可以打开变量窗口,填上变量名称:ad,然后调整AD输入电压,观察AD变化值,可以非常清楚ADC是否正确动作。怎么开变量观察窗口自己去找资料,网上应该不少,我习惯用IAR,和你的IDE不一样,具体的你的怎么操作不怎么清楚。
一对二加王炸 2017-08-30
  • 打赏
  • 举报
回复

还有这个ADC+DMA的一个程序 求帮我看看到底调试时对没有,看不来这个仿真
一对二加王炸 2017-08-30
  • 打赏
  • 举报
回复

我自己写的这个CAN 能帮我看看调通没有
91program 2017-08-30
  • 打赏
  • 举报
回复
1L & 2L 的回答已经很完整了。 while(1) 或者其它死循环不是必需的,前提是你的程序执行只执行一次。否则,这样的死循环是必不可少的!
大米粥哥哥 2017-08-29
  • 打赏
  • 举报
回复
main是程序的入口 程序开始执行的标志 while(1)是无限循环 你的程序只想执行一次大可不必放到while(1) 但是一般硬件工作都是一直不停的在读取数据 处理数据 输出结果 就是一直在工作 所以写到while(1)里
tianxj001 2017-08-29
  • 打赏
  • 举报
回复
问的好,好多人搞不清楚为什么进main函数,后面总是一定while(1),首先,这里while(1)换成while(nn)是一样的,表达的就是一个死循环,作为main函数,不可能永远无限制朝一个方向执行下去,因为指令空间、地址不可能是无限的,所以我们在主函数里面设计为需要执行的基本动作,然后就是反复执行这个过程,这也是所有计算机系统必须遵守的一个基本准则。 如果你不是使用的while(1),那么主函数也只能是执行一次,然后就死在地址无法继续的地方不会再执行任何动作了。这样的情况我们就叫程序挂起了。

19,503

社区成员

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

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