DIY-给单片机写个实时操作系统内核!
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DIY:给单片机写个实时操作系统内核!
为了进一步把单片机的潜能发挥到极限,我一直想写个程序把单片机的所有资源都用光,但是如果依照单道程序顺序执行的方式,很难把MCU 的CPU 时间都充分利用,比如使用软件延时函数实际上就是在无谓地消耗着CPU 的
时间什么事情都不做,因为CPU 一直在循环等待着条件结束,这相当于函数
被阻塞了。为了更明显地验证这一点,你可以在WINDOWS 下打开VC6.0
或其他的C 语言编译器,写段代码如下:#include void main(void){while(1) ;}意思是让CPU 不做事情在等待,你猜,这句代码会消耗掉多少CPU 时间?
答案会根据不同机型而不同,如果是单核CPU 的话,这句话会消耗掉CPU 接近100%的时间!如果是双核CPU,则只消耗掉50%左右,因为这段代码只运行在其中一个核,另外一个核还可以做别的事情,截图如下:
然后你可以测试下面这几句代码:
#include
#include
void main(void){while(1)Sleep(100);}这段代码实际上也是什么都不做,它不断地调用Sleep()函数,让它延时100 毫秒再醒来,然后继续睡觉。现在你可以再打开任务管理器看一下CPU 时间用了多少,答案是基本不用CPU 时间!!为什么同样地什么事情都不做,差别咋就这么大呢?这是因为使用了Sleep()这个函数是WINDOWS 操作系统为你提供的,调用Sleep()之后WINDOWS 操作系统自动把你这个程序挂起了(就是暂时扔到一边不管),然
后让CPU 去执行其他程序,等到时间到了,操作系统再把这段程序恢复继续
执行,这样的话CPU 就可以得到充分地利用了,也就是说你可以在一块CPU 里面同时执行多个任务而互不影响!(这里所说的同时并不是同时执行,CPU