社区
嵌入开发(WinCE)
帖子详情
一直有个关于MAIN和WHILE(1)的问题
一对二加王炸
2017-08-29 07:39:59
while(1)里主要是执行程序么,但是一般main()函数已经调用了为什么非要在while(1)里执行呢??
...全文
814
8
打赏
收藏
一直有个关于MAIN和WHILE(1)的问题
while(1)里主要是执行程序么,但是一般main()函数已经调用了为什么非要在while(1)里执行呢??
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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),那么主函数也只能是执行一次,然后就死在地址无法继续的地方不会再执行任何动作了。这样的情况我们就叫程序挂起了。
Linux0.11内核
main
函数那些事
本课程介绍Linux0.11版本内核如何人工设置第一个任务(task 0)以及任务0从内核态切换到用户态的详细过程。包括全局描述符表中的TSS0描述符和LDT0描述符的创建过程。与引导过程中全局描述符表及局部描述符表的创建过程构成了一个有机的知识块。在任务0从内核态切换到用户态过程中,可以学习到内核态堆栈与用户态堆栈概念相关的源代码。课程还会介绍嵌入式汇编的基本语法,帮助进阶内核代码阅读。课程最后会介绍,任务0 fork()任务1 init进程的过程,以及在进程1中使用fork()创建登录shell及交互shell的过程。
单片机
main
函数最后的
while
(1)
问题
单片机C语言的主程序,通常要用一个
while
(1)语句来让程序进入一个无限循环,目的是为了让程序
一直
保持在我们需要运行的情况下。 在程序末尾加一句“
while
(1);”,显示完全正常。不加程序会不稳定,有时候会在
main
()里面循环,有时候会乱码。 这里的
while
(1)并不是防止程序“跑飞”的,而是防止
main
()返回。 ① 在嵌入式中
main
是不能返回的。不同的C语言实现的单片机初始化代码会有不同的表现,有的是在call _
main
后jmp,而有的是jmp 0,等等这些会导致不可预料的结果。 ②
main
函数中引入
while
(1)循环的意义
main
函数中引入
while
(1)循环的意义
main
函数中的
while
(1)解读
单片机C语言的主程序,通常要用一个
while
(1)语句来让程序进入一个无限循环,目的是为了让程序
一直
保持在我们需要运行的情况下。 虽然这种做法毋庸置疑,在网上还是有不少朋友有疑问,如果程序不加
while
(1)会出现什么情况,对于这种好学精神,还是值得赞扬的,做学问就需要有追根问...
在keil编辑C环境下,通常要在
main
函数结尾加一个
while
(1)
在keil编辑C环境下,通常要在
main
函数结尾加一个
while
(1),结束函数的一次运行,也就是说使程序顺序运行一次。如果不加
while
(1),则会跳到
main
函数循环的运行。其原因为,
main
结束后编译器会例行地增加一个ret,至于ret到什么地方,要看寄存器的数据了,你这么短的程序,一般是ret到一个未用区域,这时候,根据你编程器在未用区填的是00还是ff,对应执行nop或mov r7 , a这种无用的指令,
一直
到64K程序空间执行完,跳回0000,又开始你的
main
之路了。...
嵌入开发(WinCE)
19,503
社区成员
41,568
社区内容
发帖
与我相关
我的任务
嵌入开发(WinCE)
硬件/嵌入开发 嵌入开发(WinCE)
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章