农民讲习所 发表于 2007-12-1 23:31

俺是敲边鼓的,给大家凑凑热闹

hotpower 发表于 2007-12-2 00:12

实际上这种设计是有问题的~~~本来就该挨拍~~~

hotpower 发表于 2007-12-2 00:17

不能打断的时间总和必须小于节拍时间,字谜实际在函数的间

王紫豪 发表于 2007-12-2 06:12

凌晨起来,等楼主上结果!

hotpower 发表于 2007-12-2 08:55

==~~

pheavecn 发表于 2007-12-2 09:11

我智商低,等结果。

e21 发表于 2007-12-2 09:17

这题不会,等结果。

我没见过长时间不允许中断的软件设计。

农民讲习所 发表于 2007-12-2 09:30

谁说的这句话?

应该精华<br /><br />“天冷裸奔,那是身体好,天暖披棉裘,那是有钱!”

myfaith 发表于 2007-12-2 10:11

还没结果?

iC921 发表于 2007-12-2 10:21

一群高手,居然这么能耗

一点有用的东西都还没有。这么高的楼,居然是空楼~

wimhy 发表于 2007-12-2 10:26

这个楼比较低,大家来看看

提点意见哈. <br /> 相关链接:<a href='https://bbs.21ic.com/club/bbs/list.asp?boardid=11&page=1&t=2777306&tp=RTOS%u4E2D%u6570%u7801%u7BA1%u52A8%u6001%u626B%u63CF%u7A0B%u5E8F%u600E%u4E48%u5199'>https://bbs.21ic.com/club/bbs/list.asp?boardid=11&page=1&t=2777306&tp=RTOS%u4E2D%u6570%u7801%u7BA1%u52A8%u6001%u626B%u63CF%u7A0B%u5E8F%u600E%u4E48%u5199</a>

古道热肠 发表于 2007-12-2 10:37

楼主给贴答案吧, 辅上讲解不是更有说服力吗!

&nbsp;&nbsp;&nbsp;接触过ucOSII的实际嵌入式运用,有了操作系统在任务较多时,的确很容易分解和扩充。建议大家有空学学一种实时操作系统,即使产品中用不上,其中的很多概念也是可以引用的,会有种“原来MCU有个管家的会更能出效率的感觉”。

hotpower 发表于 2007-12-2 10:40

哈哈~~~好多事情不说比说出来好~~~

相信不???

hq_y 发表于 2007-12-2 10:40

前几天的那个os好还是不好的那个帖子里的,给所长找出来了

农民讲习所&nbsp;发表于&nbsp;2007-12-2&nbsp;09:30&nbsp;侃单片机&nbsp;←返回版面&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />88楼:&nbsp;谁说的这句话?&nbsp;<br /><br />应该精华<br /><br />“天冷裸奔,那是身体好,天暖披棉裘,那是有钱!”&nbsp;<br />&nbsp;<br /><br /><br /><br /><br />and&nbsp;发表于&nbsp;2007-11-20&nbsp;01:13&nbsp;侃单片机&nbsp;←返回版面&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />244楼:&nbsp;苏武牧羊&nbsp;伴我爬上244楼&nbsp;<br /><br />分水岭是抢占点。<br /><br />总有那么些事情是更着急的,所以它们必须抢占那些不那么着急的事情,抢占--因为CPU有限,如果每个任务都拥有一个CPU,那么只要设计通讯通路就可以了,如果每个单位的CPU足够小,那就到了硬逻辑--FPGA,但大多数时候你只有一个CPU。<br /><br />中断--使用一个抢占点的系统,应该就算是裸奔吧。在中断代码中,可以用来完成很多任务,如果CPU支持更复杂的中断优先级算法,那就可以用来做更复杂的事情。但是,如果把太多的任务放到中断代码中,过于拥挤就会出现问题--本质上还是时间的矛盾。<br /><br />把矛盾向上推,构造另一条抢占线--任务,应该就是算是OS吧。在这个缓冲的空间中,为解决时间的矛盾提供了充裕得多的回旋余地,但系统复杂性也随之提高。OS还不只这些--CPU都瓜分了,顺便把系统资源也都瓜分了吧--这是一个任务的世界。<br /><br />裸奔的系统很真实,很纯粹,OS的系统很温暖,很缥缈。基于一个中断抢占点,徒手构造状态机和任务调度,和&nbsp;把OS完全安家到一片全新的CPU,自己读着芯片手册写完BSP和驱动,哪一个更容易,哪一个更难?<br /><br />需求驱动,催生出体系的任务。把这些任务一字排开,有的是从管和门穿过你的系统,把它们分配给硬件,要求太高的逻辑,分配给数字电路,其它的交给软件。<br /><br />把剩下的任务再次排开,这里有三个筐,中断级,任务调度级,用户级,把剩下的任务用这三个筐盛住,就可以收钱走人了。先把任务全部倒到用户级,如果有的很着急,就把他挪到中断级,如果还有很急的,就继续挪。挪动一个任务,在用户级就要产生相应的调度来配合,因为这是一次割裂,而割裂是在一条直线(CPU)上进行,多个割裂相互交叠,必须用状态来区分和配合。<br /><br />如果装下了,收工。如果中断级用完了,而着急的还存在,而且还夹缠不清,那就把一些装到任务调度级,这也是一种割裂--三断的割裂--原来那么些苛刻的任务,为了抢夺CPU来兑现自身,不惜把自己一折而三,这样做可以把这些任务用三个篮子盛住,代价是你必须用配合的代码来弥补因折断而产生的割裂,以维系来自于需求的任务的完整性,搞来搞去,OS产生了。<br /><br />天暖就裸奔,天冷就加衣,没人会说什么。天冷裸奔,那是身体好,天暖披棉裘,那是有钱,也不应该说什么。<br />&nbsp;<br />&nbsp;<br />

wimhy 发表于 2007-12-2 10:43

发个水帖

93楼:<br /><br />我晕,啥事情?

forthlab 发表于 2007-12-2 11:59

我就来现丑了.

我就来现丑了.如果LZ有陷阱,大家帮忙把我拉出来.<br />一直想学习OS,所以对这个讨论很感兴趣.有错误,大家拍砖时手下留情.<br />这里用我常用的状态机来实现:<br /><br /><br />//================用c51的语法=============<br /><br />bit&nbsp;sec_flag&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;//秒标志位<br />bit&nbsp;min_flag&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;//分钟标志位<br /><br />//秒中断函数,<br />//中断时间到,sec_flag&nbsp;=&nbsp;1;<br />//这里省略中断函数...................<br /><br /><br />void&nbsp;sec_proc(&nbsp;void&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//秒处理函数<br />{<br />if(&nbsp;sec_flag&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;sec_flag&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;F05(&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><br />void&nbsp;min_proc(&nbsp;void&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//分钟处理状态机<br />{<br />static&nbsp;unsigned&nbsp;char&nbsp;status;<br /><br />switch(&nbsp;status&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;_F071:&nbsp;&nbsp;if(&nbsp;min_flag&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;min_flag&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;F071(&nbsp;);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;status&nbsp;=&nbsp;_F072;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;_F072:&nbsp;&nbsp;F072(&nbsp;);&nbsp;status&nbsp;=&nbsp;_F073;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;_F073:&nbsp;&nbsp;F073(&nbsp;);&nbsp;status&nbsp;=&nbsp;_F074;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;_F074:&nbsp;&nbsp;F074(&nbsp;);&nbsp;status&nbsp;=&nbsp;_F071;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;default:&nbsp;status&nbsp;=&nbsp;_F071;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><br /><br />main()<br />{<br />while(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;sec_proc(&nbsp;);&nbsp;&nbsp;&nbsp;&nbsp;//秒处理函数<br />&nbsp;&nbsp;&nbsp;&nbsp;min_proc(&nbsp;);&nbsp;&nbsp;&nbsp;&nbsp;//分钟处理函数(状态机)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />

forthlab 发表于 2007-12-2 12:03

我这个程序可能出现的误差:

由于程序不允许打断,所以在到60秒,分钟+1的时候,由于分钟处理有4个函数(F071..F074),所以会出现秒处理的&quot;时刻&quot;有误差,但误差不会超过1秒.等4个函数(F071..F074)处理结束后,秒处理就没有误差了.<br />LZ一直不说,各位在打口水仗,心里没有底啊!

dld2 发表于 2007-12-2 12:11

一直觉得贴代码是需要点勇气的。支持一下。

status&nbsp;=&nbsp;_F070;这个状态有些多余吧。直接用_F071也一样。

hq_y 发表于 2007-12-2 12:13

呼唤斑竹~~~~~~~~给and加裤

and&nbsp;发表于&nbsp;2007-11-20&nbsp;01:13&nbsp;侃单片机&nbsp;←返回版面&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />244楼:&nbsp;苏武牧羊&nbsp;伴我爬上244楼&nbsp;<br /><br />分水岭是抢占点。<br /><br />总有那么些事情是更着急的,所以它们必须抢占那些不那么着急的事情,抢占--因为CPU有限,如果每个任务都拥有一个CPU,那么只要设计通讯通路就可以了,如果每个单位的CPU足够小,那就到了硬逻辑--FPGA,但大多数时候你只有一个CPU。<br /><br />中断--使用一个抢占点的系统,应该就算是裸奔吧。在中断代码中,可以用来完成很多任务,如果CPU支持更复杂的中断优先级算法,那就可以用来做更复杂的事情。但是,如果把太多的任务放到中断代码中,过于拥挤就会出现问题--本质上还是时间的矛盾。<br /><br />把矛盾向上推,构造另一条抢占线--任务,应该就是算是OS吧。在这个缓冲的空间中,为解决时间的矛盾提供了充裕得多的回旋余地,但系统复杂性也随之提高。OS还不只这些--CPU都瓜分了,顺便把系统资源也都瓜分了吧--这是一个任务的世界。<br /><br />裸奔的系统很真实,很纯粹,OS的系统很温暖,很缥缈。基于一个中断抢占点,徒手构造状态机和任务调度,和&nbsp;把OS完全安家到一片全新的CPU,自己读着芯片手册写完BSP和驱动,哪一个更容易,哪一个更难?<br /><br />需求驱动,催生出体系的任务。把这些任务一字排开,有的是从管和门穿过你的系统,把它们分配给硬件,要求太高的逻辑,分配给数字电路,其它的交给软件。<br /><br />把剩下的任务再次排开,这里有三个筐,中断级,任务调度级,用户级,把剩下的任务用这三个筐盛住,就可以收钱走人了。先把任务全部倒到用户级,如果有的很着急,就把他挪到中断级,如果还有很急的,就继续挪。挪动一个任务,在用户级就要产生相应的调度来配合,因为这是一次割裂,而割裂是在一条直线(CPU)上进行,多个割裂相互交叠,必须用状态来区分和配合。<br /><br />如果装下了,收工。如果中断级用完了,而着急的还存在,而且还夹缠不清,那就把一些装到任务调度级,这也是一种割裂--三断的割裂--原来那么些苛刻的任务,为了抢夺CPU来兑现自身,不惜把自己一折而三,这样做可以把这些任务用三个篮子盛住,代价是你必须用配合的代码来弥补因折断而产生的割裂,以维系来自于需求的任务的完整性,搞来搞去,OS产生了。<br /><br />天暖就裸奔,天冷就加衣,没人会说什么。<b><font color=#FF0000>天冷裸奔,那是身体好,天暖披棉裘,那是有钱,也不应该说什么。</font><br /></b>

hotpower 发表于 2007-12-2 12:17

支持发放红色的三角裤头!!!只要没误差积累即可认为成功~~~

页: 1 2 3 4 [5] 6 7 8 9 10 11 12 13 14
查看完整版本: **lz说湖南人好斗,