随着HotTasm51之研究和编写的进展,以及嵌入式专家吴旭光教授屈尊地**
HotPower的农会组织,俺久久不能入睡,真可谓“彻夜难眠”~~~
和吴教授的多次探讨,更让俺增强了信心和“胆量”。
首先,我选定了从51开始俺的HotOS系列的“开始旅程”,在DSP的54系列上
俺也进行了85%的研究,但是那时可以C/C++,他们的构架和资源差距很大,
再者,俺心里也选中了AVR,因为小芯片的记得有个汇编级源码的OS.
也想在ARM7的LPC213X/LPC214X上开刀~~~至少俺在其“防御系统”上实现
了突破~~~
在OS的编写上,有些代码是要用汇编才能实现的,这不单单是速度的问题,
实际速度并非重要,而是限于C语言有些对方根本访问不到,也限制了发挥。
一般所有的编译器都可以嵌入汇编代码,但Keil C51还要设置几个地方,虽然
不难,但总觉得别扭~~~
对于机器级来讲,代码和数据是很难区分的:
当机器运行过的地方,肯定是代码(当然也可用于加密校验及防止改写代码)。
否则,代码的可能性少点,应该认为是数据。
所以,由于汇编代码的不同,导致了OS的不同~~~
若是用汇编数组又如何呢???
所以俺在HotTask51上使用了汇编数组并计划将其用COM接口来封装。
再进一步将HotTask51用COM接口封装,那么不就和微软在DLL越发不可收拾时
推出COM接口来进行对DLL的再封装,这样就实现了不需将DLL用C++来编写
即可达到C++之效果~~~
若是COM技术的早几年的推出,我们的PC机里就不会出现居多的DLL文件~~
所以,菜农对COM技术进行了深入研究和在CVI和DSP上进行了实验并成功实现。
那么若能在51上实现又能如何呢???
都是C语言,都有结构及指针,以及位域和联合,所以51也能从COM接口中
完成更强的功能~~~
目前的OS特别是能在MCU上运行的,菜农说心里话都不满意,理由:
1. 满世界的全局变量及宏定义让人“眼晕”~~~简直是A人之举~~~ 无任何封装的概念~~~也难怪那些“OS的先烈们”了~~~
2. 神秘的内核让人“心醉”,华丽的外衣让人更想“裸了才爽”~~~ 51十分紧张的资源使那些“爱美的人们”不得不放下那“皇帝的外衣”
3. 现在是“拇指一代”了,任务的创建和配置,都很晕~~~ 由于编译器软件厂家的OS虽然和环境无缝连接,但天文数字的费用实在 不能接受~~~想学习学习也要背个“D人”之名,难呀~~~ 4. 开源OS之病在于原作者和厂家有很大之不同~~~ 首先是与环境的链接,当然像uCOS-II嵌入在IAR内固然很好,但~~~
再者小容量MCU各在不同的干扰环境下的表现也不同,所以,这些应用
群体的硬件上都有硬件看门狗之类的防护,虽然不盼着狗咬,但没人 敢在设计上将狗遗忘~~~至少俺没这个胆量~~~
所以在开工HotTask51之决定时,狗任务那是排第一的~~~
综合以上所述,故俺要PK~~~至少俺有“唐吉珂德之精神”~~~
在起点上,定调已把俺“雷翻”~~~
首先在Keil C51环境下,实现脚本文件的嵌入,这样可对任务及硬件的配置
实现“傻瓜设置”,即在编译前即搞定之,故最后决定放弃初始化任务中的
动态装载任务,改由对静待装载的确认,为使核占用资源更小,将凡涉及任务
指针、永不改写的参数都移入FLASH中,并像在LPCARM中应用很成功的防御体系
之中的精华---将中断向量表的地址改为中断号管理,这样虽说散转稍慢些,
但它可以捕捉错误,并保证中断、事件及任务程序入口的安全~~~
如何保证呢???这要追述到“中断喂狗”和“主程序喂狗”之争来了~~~
后者即“中断喂狗”的反对者观点大概如下:
“主程序飞但中断还在喂狗!!!”,所以结论是:不能在中断中喂狗。
反方的强烈支持者和俺自称是“狗论的缔造者”的菜农答曰:
正方自己打嘴巴~~~他承认了中断比主循环更安全,程序即使飞了下次还能
进入运行~~~
哈哈~~~因为中断的地址是固定的,不可改写的,是有很规律的地址表格,
即中断向量~~~虽然有2种代表方式,即指针或跳转地址。
所以,中断比主循环更安全~~~即使错几次,他总要回来,这是硬件的中断
机制所造成的~~~
所以菜农要将没一个任务和事件变成“中断机制”,将它们的地址用51的4组
中断向量表来填入,即所有任务函数都用真的中断函数来声明~~~
因为这次是针对52系列,它的中断源不会超过24个,故Keil C51允许使用4组
的情况下,HotTask51用了后16个,其中8个为任务,另8个作为其他中断的后台
处理任务。
故在菜农的心目中,把OS的组级别分成了:
1.中断 在HotTask51中,占用了T2定时器,主要是它能自动装载。特别是它的中断标志
TF2不能像T0/T1一样不能被自动清除,真可谓是天天生了“一副OS的模样”~~
一样这样就可分清是节拍定时中断,还是其他中断及事件和任务软中断。
哈哈~~~老天都在祝俺~~~谁就早知道TF2是OS专门不清零TF2的请举手~~~
2.事件
菜农俺无文化,说不出规范之语,故在HotTask51中是这样定义的:
当硬件中断紧急事务处理结束后,应该立即退出,而且必须在每个节拍之内
处理结束,否则应该进行“中断隐身”:
即上半身为“前台”,用于处理紧急事务,级别为特权级,它的级别有硬件设定。
下本身为“后台”,即做“中断隐身”操作后,级别降为“事件”,它比任何
任务的级别都高,但HotTask51私自规定:“狗”的权利归农会~~~
3.任务
在HotTask51中,任务包含了任务与OS有关和无关的事务~~~
任务由节拍中断触发同步,也可由高级别中断退出或隐身软中断异步进入。
也可由同级任务主动弃权后的软中断再入。
所以,HotTask51将问题简单化并有同一节拍中断的隐身转由节拍“事件”
来处理任务的优先级,节拍的申请及其他中断的“事件”等多复杂操作。
故HotTask51只承认三种形式的请求:中断-->事件-->任务。
而且它们的中断地址都为51的中断地址:N*8+3.
它们可以最多4组(51硬件决定),故管理只需5个位来管理
其中2位作为4组的组号管理,它可以用来做4种区分:
中断,保留中断,事件,任务。
另3位用来做组内具体为哪个中断、保留中断、事件和任务。
故“红色之脑浆”用5位来PK中断向量表中的4(组)*8(个)*16位(地址位长)
最不太“精妙”,也未让人享受到其“防御体系之威力”,但数的概念
总能知道此回合应该判菜农“胜出”~~~
再者,狗任务是所有事件中的最高级别,也就是说它在节拍中断时间片里,
它永远排第一~~~因为它要先“排雷”“安检”及“验票”~~~
HotTask51的核即节拍事件,它采用高速数字处理中的预测处理算法,它能
在任务就绪后立即做出切换操作!!!
所以,HotTask51在设计的理念上还是够新潮的~~~因为它被菜农在理论
上设计为强实时的具有霸权的OS~~~
菜农在吴教授的解释和提醒下,记得见过对强实时的定义,估计无终论。
所以俺想在强实时和零耗时任务切换上都来个“红杏出墙”玩玩~~~
也好早给《keil c51红杏出墙记》找个“好婆家”嫁了算了~~~
不能老让它总是《Keil C51红杏出墙记》节选~~~
但愿这次搞成,俺一定写个搞笑的《Keil C51红杏出墙记》终结篇~~
HotPower农会主席 菜农 HotPower@126.com 2009.2.22 论道于小白菜基地
相关链接:http://www.google.cn/search?q=keil+c51%E7%BA%A2%E6%9D%8F%E5%87%BA%E5%A2%99%E8%AE%B0&hl=zh-cn&gl=cn&sa=X&revid=497503892&rtp=M&cd=2&oi=revisions_inline&ct=broad-revision |