记得HotPower也要写书来,怎么没了消息?
因为新工作迫使俺一人编完整个交换机的硬件程序
去年调任工作,接手老菜鸟和众多小菜鸟的MCU/DSP/CPLD/PC单板的程序<br /><br />看后眼晕~~~<br /><br />一个团队数年的程序实在不好评价,无奈俺重新编写。<br /><br />再者自留地也很忙,实在不好意思。<br /><br />准备下周静心写作~~~<br /><br />由于精力有限,故找一小菜鸟合作,虽早已写完(主要怕挨骂~~~),但俺不甚满意<br /><br />故重新开始,实在倒塌~~~<br /><br />望大家谅解,菜农在这里陪不是了好饭不怕晚啊
呵呵,hotpower也有看别人代码的无奈啊
我也碰到过这种无奈。<br /> 不愿否定别人的劳动,可别人的代码自己实在看不习惯,想重新写,可领导那边又不理解,以为你是站在别人肩上,应该更快才是。双重压力自己都要顶着,实在憋屈。hotpower前辈不要自责,大家都能理解。
酒还是陈的香。<br /> 我们会一直等下去的。期待...
书名是
《ARM微控制器C/C++程序设计》想先裸奔一下暖身~~~
https://bbs.21ic.com/upfiles/img/20092/20092993629830.gif<br /> 相关链接:<a href='http://blog.**/hotpower/197969/message.aspx#'>http://blog.**/hotpower/197969/message.aspx#</a>穿着内裤也叫裸奔?呵呵
Keil C51红杏出墙记之精华-中断隐身~~~
“中断隐身”是俺瞎起的名词,它实际就是OS的思想---将中断降级。<br />这样就可让同级别的中断执行,自身降级后又高于用户级别如主函数内的主循环。<br /><br />它实际是个特殊的前后台程序,不过和一般裸奔的前后台程序有着本质的不同。<br /><br />它是每个前台中断程序都自动携带一个后台程序,而非多前台单后台系统。<br />即它是一个多前台多后台系统。<br /><br />HotIns内有6个毒性很深的“函数”,有:<br />1.软复位函数_reset_()<br />2.软启动函数_start_()<br />3.中断隐身函数_intjmp_()<br />4.直接调用函数_lcall_()<br />5.直接跳转函数_ljmp_()<br />6.通用直接或间接调用函数_icall_()<br /><br />说明及用法如下:<br />1.软复位函数_reset_()<br />主要起软件复位作用,和C的函数指针为0一样。<br />它和好处是代码简洁高效并复用,同时也为硬件看门狗的检测提供服务。<br /><br />2.软启动函数_start_()<br />主要起软硬件复位后,执行2次RETI开放51特有的“中断优先级隐身门”。<br />在汇编时常用,但在C函数上很难实现,因为几乎任何的C编译器都不允许<br />普通函数调用中断函数。<br /><br />HotIns早已考虑了软件抗干扰的问题,这是几乎99.99%的C人不会考虑的问题。<br /><br />3.中断隐身函数_intjmp_()<br />主要起中断级别降低作用,实际在汇编中可以用一句lcall (reti指令的地址)<br />这样lcall后降级为用户级,故同级中断得以执行而不被锁死<br />(51只有高低两级,可同级多个中断程序)<br />本“函数”是HotIns的精华之精华,故HotIns别名为“红杏出墙记”节选。<br />它也是“红杏系列”的支柱。如HotTask51就是以它为核心实现“裸奔式”的OS.<br /><br />4.直接调用函数_lcall_()<br />它可以“胡作非为”地在C函数中直接调用的任何指令地址为“函数入口地址”。<br />它奠定了HotTask51肯定不同于一般的OS~~~<br /><br />5.直接跳转函数_ljmp_()<br />它可以“胡作非为”地在C函数中直接跳转的任何指令地址为“程序散转地址”。<br /><br />它奠定了HotTask51肯定不同于一般的OS~~~<br /><br />6.通用直接或间接调用函数_icall_()<br />它为HotIns的“桥梁函数”,也可为用户“胡作非为”提供方便~~~<br /><br />转帖需生命菜地http://blog.**/hotpower/,谢谢合作!<br /><br />菜农HotPower@126.com 2009.2.8 于西安大雁塔菜地<br /><br />中断隐身之精华-天然的协作式操作系统
Keil C51红杏出墙记之精华-中断隐身,它用一个“中断隐身门”将<br /><br />正常的中断服务程序分割为两个部分:<br /><br />1.中断级的系统服务程序,如定时器的节拍中断处理程序。<br /><br />2.低于中断级且高于用户级(如主循环)和其他任何中断的隐身程序。<br /><br />当一个中断级的系统服务程序对应自己的多个中断隐身程序时,就可<br /><br />自动构成天然的一主多从的协作式操作系统~~~<br /><br />精华论述:<br /><br />任何操作系统都有中断任务的能力,而任务可是低于当前中断优先级<br /><br />或任何非中断程序。<br /><br />操作系统都是固定间隔引发中断的,即节拍中断。一般在10mS左右。<br /><br />若此节拍中断服务程序内有多个隐身程序时,并为其每个配发一个“隐身门”<br /><br />当每次节拍中断时,打开某个隐身门后即可中断降级后运行某个隐身程序,<br /><br />进入隐身程序时将其关闭!!!<br /><br />每个隐身程序又由节拍程序配发一把“隐身锁”,开锁后隐身程序死循环自己<br /><br />的任务处理程序,隐身程序不交权给节拍程序!!!即不返回。<br /><br />故本次节拍中断出口"蒸发"了!!!<br /><br />哈哈~~~这就是菜农“发明”的名词“中断隐身”一词的由来和出处!!!<br /><br />那么节拍中断服务程序的RETI指令不是没法执行了???<br /><br />不然,因为中断隐身函数_intjmp_()内实际是条lcall (reti)->task<br /><br />哈哈~~~我们只需考虑隐身程序不交权时节拍中断的重入即堆栈平衡问题即可。<br /><br />在Keil C51中,若ISR()若使用寄存器组即using X时,则中断程序只保护<br /><br />PSW,ACC,B,DPH,DPL这几个寄存器。这是X应该>0,假设用户级为using 0<br /><br />所以要将中断隐身升华为操作系统,则只需在进入隐身程序前恢复这几个<br /><br />寄存器即可。<br /><br />故裸奔式实时操作系统HotTask51原理要比普通的嵌入式实时操作系统原理简单<br /><br />许多~~~<br /><br />这就是菜农将HotTask51冠以“裸奔式”的由来~~~<br /><br />也是不起名为HotOS51的由来和所在~~~<br /><br />菜农HotPower@126.com 2009.2.10 作于雁塔菜地<br /><br /><br />https://bbs.21ic.com/upfiles/img/20092/20092104122702.jpg你这是虚拟机
楼上主意好
<br /><br />虚拟机,不错<br />hot大叔好好想想<br /><br />最近看同事搞java虚拟机上的编程,觉得前景不错<br /><br />联想到塞班的C++开发环境,其实也是学java的跨平台思想<br /><br />哈哈~~~dengm编过反汇编程序,肯定明白虚拟机~~~
虽然这里更详细一些
还是没有看到关于 任务状态,任务调度方面的阐述.<br /><br />是不是基于中断服务, 通过中断隐身的返回方式, 直接将 cpu 控制交给任务了?<br /><br />即使这样, 也跳不开状态识别, 和调度判断.<br /><br />另外, c 实现冗余,陷阱等抗干扰代码,还真的不容易实现哈哈~~~HotTask51具有任何OS没有的系统任务狗~~~
<img src="https://bbs.21ic.com/upfiles/img/20074/20074141160854.jpg"><img src="https://bbs.21ic.com/upfiles/img/20074/20074141160854.jpg"><img src="https://bbs.21ic.com/upfiles/img/20074/20074141160854.jpg"><br />先搞个协作式的HotTask51,太累了~~~<br /><br />但愿能赶上“节日”,早点给情人们穿上“皇帝的嫁衣”~~~<br /><br />也算是农民伯伯的一片心意~~~~<br /><br />真后悔自己早生20年!!!!!!!!<br /><br />苍天不公呀!!!<br /><br />俺那时为何不知有此节日???实在是雷翻了俺~~~<br /><br /><img src="https://bbs.21ic.com/upfiles/img/20074/20074141160854.jpg"><img src="https://bbs.21ic.com/upfiles/img/20074/20074141160854.jpg"><img src="https://bbs.21ic.com/upfiles/img/20074/20074141160854.jpg"><br /><br />//任务枚举参数<br />enum _HotTask_enum_<br />{<br /> HotTask_Idel = 0,//HotTask51系统空闲任务,标准用户空闲任务<br /> HotTask_User0 = 0,//特殊扩展用户看门狗任务(在bPriority.0中)<br /> HotTask_User1 = 1,//最低1级标准用户<br /> HotTask_User2 = 2,//2级标准用户<br /> HotTask_User3 = 3,//3级标准用户<br /> HotTask_User4 = 4,//4级标准用户<br /> HotTask_User5 = 5,//5级标准用户<br /> HotTask_User6 = 6,//最高6级标准用户<br /> HotTask_User7 = 7,//特殊扩展用户空闲任务(在bPriority.7中)<br /> HotTask_Init = 7,//用户任务装载即系统根任务,标准用户看门狗任务<br /> HotTask_Wdt = 7,//HotTask51特有的软件看门狗任务<br /> HotTaskMaxCount = 8//最大任务个数<br />};<br /><br /><img src="https://bbs.21ic.com/upfiles/img/20074/20074141160854.jpg"><img src="https://bbs.21ic.com/upfiles/img/20074/20074141160854.jpg"><img src="https://bbs.21ic.com/upfiles/img/20074/20074141160854.jpg"><br /><br />/*<br /> HotTask51系统接口说明<br />1. 数组bPriority<br /> bPriority.0 系统空闲任务位 1~7位为扩展低级用户任务位<br /> bPriority.0~.7 标准用户任务可变级别位(1~6级可选)<br /> bPriority.7 系统看门狗和用户装载任务 0~6为扩展高级用户任务位<br /><br /> 故HotTask51拥有8+7+7=22个任务<br /><br /> 它分别用一个横向字节表示某任务,纵向某任务位得到信息<br /> 它有2个作用<br /> a.同级任务优先的循环选择<br /> 主要控制6个用户任务优先级的测试<br /> b.6个用户任务可否各自取代系统空闲任务及看门狗任务<br /> 它主要是扩展HotTask51只有6个用户任务之缺点<br />*/<br />#define interface typedef struct//HotTask51系统接口<br />interface _HotTask_Struct_<br />{<br /> volatile unsigned int iHotTaskSystemStart;//0x55aa系统上电测试变量<br />//同级任务循环扫描号<br /> volatile unsigned char iPrioTest;//用于同级循环<br />//当前任务号<br /> volatile unsigned char iTaskTick;//节拍中断断点任务序号<br />//任务指针<br /> unsigned int pPoint;//系统标准定义任务函数入口<br />//任务级别 在HotTaskTick()中用于同级任务循环扫描<br /> unsigned char bPriority;<br />//任务记录<br /> unsigned char bRecord;<br />//任务锁<br /> unsigned char bHotTaskLock;<br />}HotTask_Struct;<br /><br /><br /><br /><img src="https://bbs.21ic.com/upfiles/img/20074/20074141160854.jpg"><img src="https://bbs.21ic.com/upfiles/img/20074/20074141160854.jpg"><img src="https://bbs.21ic.com/upfiles/img/20074/20074141160854.jpg">正在赶工,实在太雷塌了~~~
#include "target.h"<br />//-------- <<< Use Configuration Wizard in Context Menu >>> -----------------<br /><br />// <e>HotTask51用户定时器参数配置<br />#define HotTask_Timer0_1_Config_SEL 1//默认不允许改写参数<br />void TimerInit()<br />{<br />// <o> 定时器0/1模式TMOD <0x-0xff><br />// <i> HotTask51默认: 0x21<br />#define HotTask_Timer0_1_TMOD 0x22<br /> TMOD = HotTask_Timer0_1_TMOD;//TIMER1方式2, TIMER0方式1<br />// <o> 定时器0 T0 <0x-0xffff><br />// <i> HotTask51默认: 0xd8f0<br />#define HotTask_Timer_T0HL 0xD8F0<br /> TH0 = HotTask_Timer_T0HL / 256;//TIMER0 50MS 定时<br /> TL0 = HotTask_Timer_T0HL % 256;<br />// <o> 定时器1 T1 <0x-0xffff><br />// <i> HotTask51默认: 0x3838<br />#define HotTask_Timer_T1HL 0x3838<br /> TH1 = HotTask_Timer_T1HL / 256;//TIMER1 0.2MS 定时<br /> TL1 = HotTask_Timer_T1HL % 256;<br />}<br />//</e><br />//------------- <<< end of configuration section >>> -----------------------<br /> https://bbs.21ic.com/upfiles/img/20092/200921482819643.gif4年了,不出手真对不起胡司令和俺自己~~~
俺的心在等待~~~~~~~~~~~
有人曾“三顾菜地”三年,这次俺犯规了一年谢罪~~~
<font color=#551A8B>uC/OS-II</font><font color=#CC0033>任务</font><font color=#551A8B>调度的改进与实现-摘自《现代电子技术》半月刊2006年第14期</font>在各种嵌入式操作系统中,其<font color=#CC0033>任务切换</font>带来的延时窗口町以说是最小的之一,非常适合<font color=#CC0033>强实时</font>性的任务要求。但对大部分周期性和实时性要求不高的任务来说,弘C/()s一Ⅱ还 <B>...</B><br /><font color=#008000>www.gotoread.com/vo/60/page190925.html - 15k - </font><font color=#7777CC>网页快照</font> - <font color=#7777CC>类似网页</font>
页:
[1]
2