“中断隐身”是俺瞎起的名词,它实际就是OS的思想---将中断降级。 这样就可让同级别的中断执行,自身降级后又高于用户级别如主函数内的主循环。
它实际是个特殊的前后台程序,不过和一般裸奔的前后台程序有着本质的不同。
它是每个前台中断程序都自动携带一个后台程序,而非多前台单后台系统。 即它是一个多前台多后台系统。
HotIns内有6个毒性很深的“函数”,有: 1.软复位函数_reset_() 2.软启动函数_start_() 3.中断隐身函数_intjmp_() 4.直接调用函数_lcall_() 5.直接跳转函数_ljmp_() 6.通用直接或间接调用函数_icall_()
说明及用法如下: 1.软复位函数_reset_() 主要起软件复位作用,和C的函数指针为0一样。 它和好处是代码简洁高效并复用,同时也为硬件看门狗的检测提供服务。
2.软启动函数_start_() 主要起软硬件复位后,执行2次RETI开放51特有的“中断优先级隐身门”。 在汇编时常用,但在C函数上很难实现,因为几乎任何的C编译器都不允许 普通函数调用中断函数。
HotIns早已考虑了软件抗干扰的问题,这是几乎99.99%的C人不会考虑的问题。
3.中断隐身函数_intjmp_() 主要起中断级别降低作用,实际在汇编中可以用一句lcall (reti指令的地址) 这样lcall后降级为用户级,故同级中断得以执行而不被锁死 (51只有高低两级,可同级多个中断程序) 本“函数”是HotIns的精华之精华,故HotIns别名为“红杏出墙记”节选。 它也是“红杏系列”的支柱。如HotTask51就是以它为核心实现“裸奔式”的OS.
4.直接调用函数_lcall_() 它可以“胡作非为”地在C函数中直接调用的任何指令地址为“函数入口地址”。 它奠定了HotTask51肯定不同于一般的OS~~~
5.直接跳转函数_ljmp_() 它可以“胡作非为”地在C函数中直接跳转的任何指令地址为“程序散转地址”。
它奠定了HotTask51肯定不同于一般的OS~~~
6.通用直接或间接调用函数_icall_() 它为HotIns的“桥梁函数”,也可为用户“胡作非为”提供方便~~~
转帖需声明菜地http://blog.**/hotpower/,谢谢合作!
菜农HotPower@126.com 2009.2.8 于西安大雁塔菜地
相关链接:http://www.google.cn/search?hl=zh-CN&q=Keil+C51%E7%BA%A2%E6%9D%8F%E5%87%BA%E5%A2%99%E8%AE%B0&btnG=Google+%E6%90%9C%E7%B4%A2&meta=&aq=f&oq= |