宇宙飞船出差临走时交给俺一张纸条,叫俺上21IC的单片机公共坛子 去,看看哪位是打着OS的技术旗号,其实是暗地里干着见不得人的IC 代言人的勾当,让俺在此好好地披露一下这些丑恶的嘴脸!
在此自我介绍一下,俺跟飞船是同门师兄,比他大两岁。某一天飞船 跟俺说,俺们得上21IC混出个名堂来,俺喜欢潜水,就起了这个名字 ----潜艇8421。
语归正传,回到扯学习OS的论题中来了,熟悉计算机硬件的人就知道 CPU的是如何动作的,
在此简述一下这些动作术语: 术语-->中断 术语-->中断入口 术语-->中断优先级 术语-->堆栈 术语-->堆栈指针 术语-->现场保护 术语-->现场恢复 术语-->程序计数器 术语-->定时器 //-------------------------- 以上这些都是MCU中的心脏,你只要真正撑握了这些术语在MCU硬件上 是如何进行动作的,就不会再被所谓的OS迷憾了!
请看看最简单的三个任务的OS来的模块实现: ********************************************* 模块1: 定时器中断:{..... } //所谓的任务切换,就是在定时器中断内,实 行被挂起任务的现场保护,与恢复要执行任务的现场。 ----------------------------------------------- 模块2: task_0: // 假设任务0的起始地址: 0x111 while(1) { ..... }
task_1: // 假设任务1的起始地址: 0x222 while(1) { ..... }
task_2: // 假设任务2的起始地址: 0x333 while(1) { ..... }
仅只需要2个模块就能实现多任务。
所谓的OS要做的就是如何把这些任务的地址和用到的寄存器,进行现 场保护与恢复,真正实现时要做的动作就是在计时器中断中(所谓的 时间片),设置堆栈指针找到任务的地址进行压入与弹出操作。 切换任务就是保护好要挂起的已经执行的任务现场,然后再弹出要执 行的任务的地址到‘程序计数器’。这是非常简单的一件事,只要移 动堆栈指针,再利用子程序返回指令‘RET就能实行程序计数器’的 操作。 ********************************************************** 对于前后级的应用,某些MCU中有硬件优先级,这就是最好的任务调 度器,对于某些MCU还有4个独立的工作奇存器组,只需一条指令就能 进行寄存器组切换,进行现场保护与恢复。
只要你有了以上操作硬件的本领,精通汇编与C的混合编程,要自行开 发适合自已的OS,简直就是易如反撑。 //-----------------------------------------------------------
某些场合要应用OS是因为看中基于这些OS上的大量实用应用程序,假 如还没有懂得如何把一个漂亮的触摸屏,MP3,MP4,TCP/IP等做出来 的时候,而偏偏接到要开发这些功能的项目,那么选择嵌入式OS就是 唯一的选择,因为基于这些OS上有大量的开源源码的应用程序,并且 已经移植好,经过多年的验证,已经是非常稳定。只要花很少的时间 就能做好这些项目。
假若选择了嵌入式LINUX,那么你就有了这个机会精通以上的应用代 码。因为有了这些代码,再加上你的聪明与勤奋,最后就能够成为裸 奔高手!
总结一下个人的感受: 学习OS的最终目的就是要为了更好地裸奔!站在巨人的算法肩上花更 少的精力研制出性价比更高的产品! |