打印

老生常谈---一种裸奔多任务模型

[复制链接]
楼主: dld2
手机看帖
扫描二维码
随时随地手机跟帖
61
wxj1952| | 2008-6-25 13:04 | 只看该作者 回帖奖励 |倒序浏览

支持38L和40L。

从小的教育方式不同。他们从小就是鼓励奇思妙想的,我们从小就是统一答案的考试。结果就是培养出来的都是一模一样的mind. 学习能力很强,奇思妙想没有。

使用特权

评论回复
62
农民讲习所| | 2008-6-25 13:48 | 只看该作者

乱扯。

谈奇思妙想,没人比得上学龄前的小孩子。

天才不都=1%灵感+99%的汗水吗?

使用特权

评论回复
63
fsaok| | 2008-6-25 14:52 | 只看该作者

讨论得似乎太远了

中国人和老外的差距,其实不在于思维方式,而在于市场环境。

mcu本来就是老外的东西,为了推广mcu,老外有IC厂家支持去搞一些开发工具,

我们只是这些开发工具的用户,如果我们有一个新的idea,我们有资金可以把这个新的idea变成一个新的开发工具吗?开发成功后又能得到IC厂家的支持吗?

如果没有一个好的工具,比如所长的什么编程思想,最后可能变成非物质性文化遗产。

中国人和老外的最大区别是,老外会把一些思想标准化成适合大规模生产的产品!从而很多人都容易操作。

比如火*是中国人发明的,但老外标准化成枪**,

到老外的工厂和我们的企业相比,就知道人家的生产工艺标准比我们的多得多

使用特权

评论回复
64
wxj1952| | 2008-6-25 14:54 | 只看该作者

且看所谓高手秘笈

CSEG  AT  0BH        ;定时器1中断向量
     JMP  TIMERINT    ;

RETINT: RETI        ;要点在这里,进入中断后立即开放系统心跳,这样即使下面的程序出了问题,下一次心跳仍然能够启动中断。

TIMERINT: CALL RETINT   ;定时器1中断入口,首先开放下一次系统心跳。
         .
        .
        .
       刷新定时器程序        ;刷新函数
    ......
     ......
    切换任务程序        ;调度函数
    ......
    RET

这是一段嵌入式RTOS中的内核程序。首先它是“外国人”做的。谁要使用,请注明出处。别说是自己的原创秘笈。
第二、这是“内核”程序,属于系统程序,它是按照某种模式规则由计算机专家设计的。且经过严格的测试(我们用户根本不知道的时序测试还有其他测试),然后才能推向市场的。
为什么规定“内核不能调用应用程序?”这是研究生提出的问题?比我还菜!

这位高手以为他发现了什么巧妙地方法,竟然把用户函数代换了上面的调度函数!如此实现了“快速切换”,比计算机专家专家还高明。还让我解释为什么这是“违背了可靠性设计原则的大忌”?

 “这是可靠性设计大忌“,那么请说出什么地方,什么原因降低了可靠性,不要信口雌黄。


这还用解释么?我累不累!
1、你用上面的程序调用用户程序,你怎么测试时间可靠性?你怎么保证你的用户程序task_n 运行时间之和远远小于系统心跳频率?你怎么确定你这个系统能够允许同时运行多少个task?又根据什么来确定定时器1中断时间间隔?这只能专用于你自己的系统,没有任何通用性!换一个系统环境就可能出问题或者重新设计、调试、测试。你自己可以说“俺从来不看书,每天面对复杂一千倍的问题。”“仁者见仁”。你可以关起门来自己裸奔,自我欣赏,管它什么OS设计模式、规则。俺简约就行。但是你别影响众人。学生们更不知道这种裸奔方法应用时需要关注的基本问题:自己的系统中task_n运行时间之和必须要远小于定时器1设定频率。(其他还有别的问题...都写给你?太累了吧。)还以为是你老师的巧妙设计方法呢。什么书都不看,拿这么逊的问题和所长辩论。

2、任何一本操作系统教程上都写明了系统内核、外核与用户程序之间的关系。这种隔离分层式设计就是为了可靠性目标才慢慢总结发展来的模式。紧贴系统硬件的内核程序(包括时钟中断程序)根本不能和用户程序有联系,因为内核是整个系统最坚固的部分,脆弱的用户程序如果和坚固的内核程序混到一起会产生什么后果,这不是可靠性大忌?按模式设计是现代程序员的素养。这位老兄还停留在DOS设计阶段,把用户程序和系统程序搅混成一团,参考OS+自由裸奔,巧妙吧。 
  
   不看书的人,自我欣赏,但是别和看过书的人辩论。否则1500元求助你的2个问题,一个也不知道,结果最后还是我咨询者的错!

3、发现所有质疑你的网友都受到了你的训斥。哈,咱们这位研究生讲师大人竟然连IBM环形网的接口芯片(或者是原理)是什么都不知道,查遍互联网也没拿到我的1000元求助金。咱们这位混了5年今天才透露自己是研究生的讲师大人竟然连MPL语句都看不懂,自称2分钟就能学会,到现在可过去10天了吧,500元求助金我还等着你的答案呢。研究生和本科生最不一样的地方不是他学的知识多,而是他离开学校后持续自我学习的能力。

其实这种设计的解决方案书上早就有了。这叫做合作式(或者协作式)调度器。main()运行调度器程序,ISR运行刷新程序,两者配合得天衣无缝。请参考:

《时间触发嵌入式系统设计模式》——使用8051系列微处理器开发可靠应用  【英】Michael J.Pont著 中国电力出版社

拿不出85.00¥我送你一本。

使用特权

评论回复
65
农民讲习所| | 2008-6-25 15:02 | 只看该作者

看不懂LS的东东

使用特权

评论回复
66
农民讲习所| | 2008-6-25 15:03 | 只看该作者

要拿中国人和老外比

建议只和一个国家比,这样才公平。

使用特权

评论回复
67
wxj1952| | 2008-6-25 15:22 | 只看该作者

同意63楼

也同意所长。如果中国的教育能把小孩子的奇思妙想保持到大学时代,那么中国的天才就多了。
可惜,从小学起,就是只许听话,“不准思想”。看那些把自己的天才孩子关在家里自自己教的家长,真是明智之举,要是送到学校,这孩子就毁了。

我周围处处有天才儿童,可他们的将来,顶多是到国外研究汽车喷漆的机器之类。

使用特权

评论回复
68
IceAge| | 2008-6-25 21:10 | 只看该作者

先鄙视 wxj1952 无中生有,信口雌黄的东厂作风

做人要厚道。技术论坛,请不要用下三烂的辩论手法。

关于reti 原创性,这本不是问题。对于51,只要想中断不返回,就必须调用 reti, 没有别的方法,intel spec 说的很清楚,这不是什么秘籍,也不适用其他的cpu.

这里谈论的是os-less,我想这里大多数程序员都还是用裸奔,你可以开一个主题专门讨论os。 

“你怎么保证你的用户程序运行时间远远小于系统心跳频率“,这点必须由程序员保证,因为没有 os 调度,所以引入state machine 把任务切分,你的概念和逻辑实在混乱,你先看明白用 state machine 做的那个键盘的例子作发表言论。 

500元求助金?你是指那个宏,呵呵,我已经给你了三个:TMS320C5X,X86, ZLG51 assembler。不光是我,这里的大多数人,只要你能给出技术说明,那一定就能写出来那个宏。如果不是你提,这种雕虫小技我都不好意思说, wxj1952别不服气。 

使用特权

评论回复
69
armnew| | 2008-6-25 22:37 | 只看该作者

请教

请问IceAge,所有任务每次运行的时间必须远远小于mcu的中断间隔吗,如果每20ms来次中断,所有的运行时间应该在多少以内才安全呢?如果这时其他的中断比较频繁,有些任务会不会执行不到啊?

使用特权

评论回复
70
webber8351| | 2008-6-25 22:48 | 只看该作者

好贴,学习学习!

使用特权

评论回复
71
wxj1952| | 2008-6-25 23:55 | 只看该作者

69楼切中要害。

还不只是一个任务,这位“我读研究生的时候.....”好吹牛的人,是要在一个时间片内把系统中的所有task运行一遍,到底有几个任务?到底系统能允许执行几个什么样类型的任务?

你既然要影响众人,就把可能出现的问题同时说出来,这跟你“我读研究生的时候...”问题不搭界!
建议您下次先开场白“我读博士生的时候,......”“钱学森给我们讲课的时候,.....”

500元请教这位研究生一个8051宏汇编器的问题,竟然先要我提供Ax51汇编器说明书?!我都告诉你了,技术说明就在徐爱均那本书上,自己不去找,我现在再告诉你在那本书上的591页,一共2页。你不是“这种雕虫小技,无论什么破宏,我保证在2分钟就能提供答案么?”早知道还需要提供技术说明,早知道“51宏我已经忘了”,就别吹这个牛啊。

我还真不知道这论坛上哪位朋友向高手(500元求助金)请教51汇编问题的时候,却先要向高手提供51汇编技术说明?你不会自己找?我知道你没时间,知道你“看不上2分钟进账500元。一天进账1000元”。这种给自己下台阶的雕虫小技,骗小孩子呢。

再找个理由说说为什么1000元求助还不知道IBM环形网的接口芯片或者原理电路?还需要我提供什么技术说明吗?告诉您:任何一本《计算机网络》的书上都有原理叙述。不过我问的是原理电路。
    您读的是兰州大学机械专业研究生吧。

使用特权

评论回复
72
IceAge| | 2008-6-26 00:42 | 只看该作者

wxj1952 又在胡搅蛮缠了

宏只是指令展开问题,各个公司assembler有不同做法,格式不同,没有标准,没有统一格式,用repeat,rept,while 等等不一而足,你既然不满意我写的TI, zlg51 的写法,那么你就给出一个你满意的 assembler 技术说明,这个道理显而易见.

“1000元求助还不知道...“,还有这样扯蛋的。术业有专攻,我不知道的东西很多,又有什么奇怪的。

“到底有几个任务?到底系统能允许执行几个什么样类型的任务“,我的帖子已经讲的明白了,看不懂是你自己的头脑问题。

to armnew: 
"中断比较频繁,有些任务会不会执行不到" 会的,这是没有os所要付出的代价之一。解决方案之一是,设置一个task busy 标志, 让中断正常返回。

Timer_Interrup:
   jnb task_busy, _taskbusy
   reti    //正常返回到中断点
_taskbusy

使用特权

评论回复
73
IceAge| | 2008-6-26 01:08 | 只看该作者

我知道你 wxj1952 很不服气

或许是我过于看轻 wxj1952 你认为值得自豪的技术,损伤了你的自尊心,如果是这样,我向你表示诚挚歉意。事情变成意气之争,就无聊了。

关于裸本,我个人的经验表明,如果不使用os, 那么 中断驱动 + state machine 是一个较好的方法,对于大多数 mcu 应用来说,已经 good enough.
所长的方法也很不错。不知道还有没有其他的方法。

再次向 wxj1952 道歉

使用特权

评论回复
74
农民讲习所| | 2008-6-26 09:48 | 只看该作者

如果将主循环也认为是中断的一种,实际也可以这样简单对

那么将主循环浪费掉是很可惜的事情。
基于时间片的OS,除开调度方面讲,用主循环可以代替时间片的。
使用主循环,相当多了一套可嵌套的处理方法,对实时性的提高有实质的作用。

在高级的MCU中,运行速度的提高,可以完全弥补前面的实时性差距,所以越大的软件规模,OS作用越大。

使用特权

评论回复
75
wswh2o| | 2008-6-26 10:13 | 只看该作者

任务的局部变量怎么处理

一切换,不就没了

使用特权

评论回复
76
dld2|  楼主 | 2008-6-26 14:23 | 只看该作者

直接操作SP、PC、PSW,应算作“黑奔”

比裸奔狠得多。

使用特权

评论回复
77
brightchl| | 2008-6-26 18:23 | 只看该作者

有道理

说得不错

使用特权

评论回复
78
wxj1952| | 2008-6-26 21:04 | 只看该作者

这么多问题怎么没考虑到?

很多任务的运行时间不是固定不变的,它可能有条件分支、或延时要求,那么有2个确定点,最快完成时间和最坏完成时间。具体到老师这个程序就不好计算了。
假定某个任务task_n 最快完成时间1ms,需要延时情况下最坏完成时间20ms。在这种模式应用下当然是按最坏完成时间计算。再假定系统中有10个这种类型的任务,那么定时器1的溢出时间应该设定为远大于200ms。假定系统设定为240ms。
    问题来了:
    1、如果某一时刻,所有任务都以最快运行时间完成,那么一个循环仅需要10ms ,剩下230ms系统设置为IDLE休闲!即使休闲期间有任务迫切需要执行也要等到下一个时隙到来!
    您不是为了快速、简约才这么设计的吗。怎么反而比前后台模式响应还慢?怎么解决?
   2、假定某一时刻 t ,task9有运行要求,而系统正在call task1状态,那么即使call task2~call task8没有运行要求,老师的程序也把它们统统无效地运行了一遍。使得task9 无效等待。这和LZ的程序模式:有效查询、跳过空闲等待任务、最高实时效率地使所有就绪任务得到执行的思想,--相去甚远。
    这位研究生老师根本就没看懂LZ的程序所要表达的是什么。拿这么老套的程序出来说自己的“更简洁高效”。
   3、即使您看懂了LZ的程序模式,想说“我也可以使用这种模式并达到实时效率。”算了吧,要是在“中断里执行所有任务”这种模式下能够实现什么实时高效率,书上就不会称这是最“逊”的模式了。作者都比你笨,都是草包?
   4、研究生老师如今还在玩状态机?连个状态转移表都写不好,还以为自己是最新潮的。建议看看DeviceNet现场总线中的“网络事件/状态转移表”,看看别人怎么玩的状态机。中国要是会玩状态机,也不至于没有自己的FB。当然这位研究生老师是整天面对“复杂1000倍问题”的人,是顶尖的中国人。谁都没放在眼里。
     “这种雕虫小技也来难我”。

使用特权

评论回复
79
wxj1952| | 2008-6-26 21:26 | 只看该作者

失态了吧,研究生老师。

“1000元求助还不知道...“,还有这样扯蛋的。术业有专攻,我不知道的东西很多,又有什么奇怪的。
*********************************************************************
  
噢,我不知道,我以为您什么都懂呢。
 不过,不懂就承认自己不懂,没什么大不了。怎么最后自己不懂下不来台,反而是我扯蛋?我怎么知道您这么无知,我一直以为老师您是研究生、高手,什么都懂的呀。

还有,奇怪了,这位一天到晚“面对1000倍复杂问题”的网上黑客,这位“从来都是我攻击别人,没人能黑我的”研究生,这位昨天还训我让我好好看看《数据结构》的老师,竟然没学过《计算机网络》,竟然不知道以太网原理,谁不知道与以太网相提并论的是IBM的令牌环网,你大概连IEEE802.3/4/5是什么都不知道吧,还吹自己是黑客!“21IC比我....”原来是术业有专攻,什么都不懂的人。

下不来台阶了就说“我不是学这个的。”就跟看不懂/解不了我用51宏汇编写的MPL语句,然后说:“51宏我早忘了”一样!那么请问这位研究生老师,您到底是学什么的?您要教给我们什么?您连51宏都看不懂,你在这论坛混什么呢。您连计算机网络都不懂,您在这充什么高手、黑客。

我从来没反对过你裸奔,但是请你注意,你裸奔的时候不要采用task——纯粹的OS术语。问什么什么不知道,又要装得什么都懂,现在摇身一变,又懂状态机啦。
懂状态机怎么不懂网络协议的有限状态机?懂状态机怎么没看过petri网状态转移图?连个“状态转移图”都画不出来还懂状态机?还指导我看谁的键盘状态机?别让我认真起来,再500元请教一个状态机的问题,到最后答不上来,告诉我“术业有专攻,我不是这个专业的”。

要是真懂,就别怕问,不懂就别装懂。丢了2回研究生面子啦,还准备丢几回?网友的质疑其实都有道理的,结果都让你毫无道理地驳回了,好像就你一个人是对的。
    
    说的都是不沾边的话,问你的MPL问题,竟然最后送我3个汇编器,让我惊讶不已,“这是什么研究生老师”?“那不是汇编器的问题,我有最好的Ax51汇编器”。我差点叫起来了。
 

“宏只是指令展开问题,各个公司assembler有不同做法,格式不同,没有标准,没有统一格式,用repeat,rept,while 等等不一而足,你既然不满意我写的TI, zlg51 的写法,那么你就给出一个你满意的 assembler 技术说明,这个道理显而易见.”

这种逻辑还要我提醒你么?我那个Intel的 Ax51宏%while 你答不上来,可以说“我51宏早忘了”,那么您尽可以拿一个其它任何公司的任何格式while 来解我的问题,——所有公司的宏汇编都是以Intel为蓝本的。除非你说:“什么公司的宏汇编我都玩不好。”下台阶咱们就算了。可是您说的是:“一只破宏,雕虫小技。2分钟就能解出来。”把2个第一都不放在眼里啦,那就不一样了,拉出来一看,原来是个只有嘴上功夫的研究生。
 
 不懂就承认自己不懂,没什么大不了。别最后自己不懂下不来台,却给自己找千般原因、理由,最后反而骂学生扯蛋。失态了吧,研究生老师。
    年龄比我大20岁不止吧。别跟年轻人计较。

使用特权

评论回复
80
dld2|  楼主 | 2008-6-26 21:42 | 只看该作者

:(

请在技术范围内讨论问题。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则