原创 Keil C51红杏出墙记之精华-中断隐身

2009-2-9 16:14 3362 5 5 分类: MCU/ 嵌入式
hotpower 发表于 2009-2-9 16:15 侃单片机 ←返回版面 按此察看该网友的资料 按此把文章加入收藏夹 按此编辑本帖

楼主: Keil C51红杏出墙记之精华-中断隐身


“中断隐身”是俺瞎起的名词,它实际就是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.ednchina.com/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=



签名:


●█〓██▄▄▄▄▄▄ ●●●●●●→ ''''╭WWWW╮
▄▅██████▅▄▃▂ 传播非典灌水四方 ( ●_●)
███天█马█行█空████ '''',,,;,;,;'''/▇\''
◥⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲◤ 群魔乱舞见阳光/MMMM\
工程师的收藏夹
200773055547196.gif




菜农的农家博客
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
5
关闭 站长推荐上一条 /3 下一条