51单片机程序执行流程详解
  单片机是没有上操作系统的东西,在keil中编写的代码都是裸机代码,深化编写裸机代码有助于了解硬件的特性。
  若不是硬件特性已定的状况之下的其它流程都是代码作祟。突然想到来探探51单片机的执行流程。这个念头起源于最初见到每个51程序里面的主函数里面最终都挂一个while(1);语句。为何要加一句while死循环让程序停留在main函数中呢。将while(1);语句去掉有什么影响么?
  写一个很简洁的程序试一下。
shell程序的编写流程 
 
  执行以上程序,由P1端口掌握的流水灯闪了一下。程序最终进入while(1);里纠缠去了,这个到好解释。
  现将while(1);语句屏蔽掉。我还以为程序不能被正确执行了呢,由于退出了main主函数,就
像Render需要循环来实现一样(尽管刚刚闪灯的程序不在循环之内,但我还是不由产生了这一错觉)。程序执行的结果是:流水灯不停的闪耀!
  看到这个现象后的猜想及动作^-^:
  (1) 这块板坏了吧!(在带操作系统如linux字符界面下运行一个不带死循环的C语言文件完毕后就会返回到linux shell程序中)。抓紧换个板再测试一下,明显还是一样的结果。
  (2) 单片机中将始终执行main函数中的最终一个(些)语句?(基于带OS平台下运行标准C语言文件的阅历,可从来没有想过是main函数被多次调用或多次进入)
  (3) 单片机内将C语言指令取出来加载到单片机内,单片机内自动生成一个主程序循环执行C语言中main函数的内容?(虽然很荒唐,还是想了)
  (4) 赶快谷歌百度一下单片机的执行流程(虽然在谷歌百度时以“51单片机程序执行流程”搜寻,没有搜到相关内容)。换朴实的搜寻词:“51单片机 main”。然后就消失跟我一样带有疑问的问题:为什么main函数中不加while(1);语句之后程序会反复执行呢?回答的关键词包括“程序跑飞、看门狗、复位”。
  (5) 趁上嵌入式的机会将“51单片机程序执行流程”搬出来并向老师叙述了我所写程序的得到的现象,包括我怎么验证呀等等。
  老师的回答:Keil C51程序自动加载了一个名为”STARTUP.A51”的文件,在这个文件里面进行了一系列的初始化操作后进入用户编写的C语言程序入口main函数中,main函数执行完毕后,STARTUP.A51文件后有一句跳转到程序入口main函数的语句,所以会再次进入C语言主程序main函数中执行相关内容。
  然后我用keil软件模拟了运行一下以上那一段代码:
 
 
  程序开头运行就在程序入口main函数的第一条语句之处,DISAssembly窗口是c语言代码与汇编代码相对应的窗口,前面是地址,后面的是C语言对应的汇编语句。下面的窗口是相应文件的运行代码的位置,由黄箭头指向当前刚要执行的代码。然后点击单步运行工具条,指导跳出main函数为止,程序跳转到STARTUP.A51中的以下代码位置:
 
 
  连续点击单步调试直到进入一个循环中:
 
 

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。