andrew.xu 发表于 2007-12-12 17:29

re

fengyeu 发表于 2007-12-12 18:20

楼主啊!给个结果出来的 时间表把!

什么时候给出您的答案啊!~!!!<br />真的等了很久了。。。。。。。。。。。。。。。。。

sz_kd 发表于 2007-12-13 09:07

呵呵,还是不要期待吧

估计没有什么戏

arm86 发表于 2007-12-13 10:33

今天貌似又没戏了

每天顶一下,看看楼主能**到什么时候

还要守法吗 发表于 2007-12-13 14:25

越看越火

LZ&nbsp;是S&nbsp;____B<br />偏还是自视很高<br />LZ要不是刚工作,要不就是一个大老头子<br />真&nbsp;T&nbsp;M&nbsp;D&nbsp;的火<br />做人最基本的都没有了<br />要是长在我们那个地方,估计还没开始第就被&nbsp;计掉了

xxrrpp2000 发表于 2007-12-13 17:01

火气太大鸟。。。。。

wuhancyq 发表于 2007-12-13 22:10

OK!

F071()~F074()只是顺序执行,不是说必须无强占无间隙执行!<br />只要在每分钟内顺序执行了着4个函数就可以,例如F071()在第1秒执行,而F072()在第30秒执行,F073()在第45秒F074()在第50秒执行都是可以的,只要注意计算好连续2秒钟执行F050()和F07x()的时间间隔,适当进行中断和任务控制就可以,这个程序完全可以做到秒信号是精确的(假设晶振是足够稳定的)

wuhancyq 发表于 2007-12-13 22:57

OK!

0、设计的时间中断片tick=100ms<br />1、有两种定时开销的函数:F050()和F07x(),分别的时间开销是500ms和700ms.也就是说是5ticks和7ticks<br />2、1秒钟有1000ms,也就是10ticks.<br />3、每20ticks(2秒)是一个大循环,<br />&nbsp;&nbsp;&nbsp;20=1+5+1+(3+4)+1+5<br />&nbsp;&nbsp;&nbsp;解释如下:<br />&nbsp;&nbsp;&nbsp;上式中的1是用于系统状态管理和分、秒显示用的<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5是运行F050()的时间<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(3+4)=7是运行F07x()的时间,3在前一秒中执行,4在后一秒中执行<br />&nbsp;&nbsp;&nbsp;上式满足了:每秒执行了F050(),并可以通过状态管理进行F07x()的执行与否<br />&nbsp;&nbsp;&nbsp;而且,在每次执行函数(不管是F050()或F07x()),都进行了一次系统状态管理,保证了&quot;显示&quot;时钟的精确性<br />&nbsp;&nbsp;&nbsp;

wuhancyq 发表于 2007-12-13 23:01

OK!

分钟到达时,执行完成4个F07x()的时间已经是8秒以后了,但是这并没有违反LZ的要求:它是顺序执行的,也没有被强占或中断

wuhancyq 发表于 2007-12-13 23:07

OK!

剩下的问题就是在主循环中设置几个状态量,进行查询执行就可以了.当然对中断要进行恰当的管理,注意在什么时候Enabled或Disabled,还有就是当中断打开时,在中断处理中要进行一些状态量的改变<br />估计的c51语言代码也写不了100行吧

wuhancyq 发表于 2007-12-13 23:31

OK!

LZ看ucosII中的例子,这个500ms+700ms能很好说明OS的应用,但是这并不是说裸奔就不行了,有高手用1片27C64程序,一起跑3片80C31(无ROM),这和现在IT界的多核没有什么区别吧<br />当然我们知道OS要省很多事,但是LZ关于&quot;中国人&quot;的叹息未免...<br />

wuhancyq 发表于 2007-12-13 23:35

OK!

LZ要公开的OS的答案我也有,但是裸奔的代码才多少字节啊<br />我做单片机快20年了,希望交流(今天偶然路过....)<br />cyqwuhan@sohu.com

hotpower 发表于 2007-12-13 23:37

楼上6个OK~~~

xxrrpp2000 发表于 2007-12-14 08:54

LS

//Faint<br />你就是在数几个“OK”啊?<br />wuhancyq要晕死了。<br />^o^<br /><br />///////////////////////////////<br />俺也数了一下,果然是六个。。。。。。<br />哇哈哈哈~~~~~~~

wxj1952 发表于 2007-12-14 09:49

第二名还空缺,正在统计。

果然还有高人没出现,再等等,再等等。

fuzichun 发表于 2007-12-14 09:59

你们不说我还没看几个OK哈

还是你们细心.

bob.xue 发表于 2007-12-14 12:51

改进一下。

呵呵,果然高手如云!LZ更是深藏不露!<br /><br />俺在看完&nbsp;xwj&nbsp;的的解释和LZ的回复之后,才理解了大部分题意。今天又看到<br />wuhancyq&nbsp;&nbsp;的解释,终于有个全面的理解了。都是俺从农村出来的语文水平不高&nbsp;:(<br /><br />1,关于时钟,LZ说要精确,但是xwj解释了LZ的笔误,应该是准确。&nbsp;wuhancyq&nbsp;的思想<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;确实做到了精确,难得啊!<br />2,按照LZ的意思,F05&nbsp;F07这些任务是临界代码,绝对不容许中断,包括时钟。<br />&nbsp;&nbsp;&nbsp;因为LZ本意可能是要在执行这些临界代码前关闭一切中断。<br />&nbsp;&nbsp;&nbsp;在这一点上,wuhancyq&nbsp;的稍微有点差异,因为其在运行F05和F07时需要打开&nbsp;100ms的定时器中断。<br />&nbsp;&nbsp;&nbsp;但是一般来说,把定时器中断的服务时间做到us级别,就不会有太大的影响。<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;所以以上两点wuhancyq&nbsp;的确实已经做到了,LZ可以拿wuhancyq&nbsp;的思想去量产了~~~~呵呵!<br />&nbsp;&nbsp;<br />但是如果再改进一点,舍弃时钟的精确性,只要保证其准确性,可以做到第二点的“不允许任何打断”的要求。<br /><br />请看以下分析:<br />&nbsp;<br />&nbsp;1,时钟节拍换成800ms,此定时器作为“时间管理”,“任务调度”,以及维持系统节拍状态<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a,首先是状态维护:将系统时钟定为800ms&nbsp;一次中断,5个节拍是个状态循环。&nbsp;这样800ms&nbsp;*&nbsp;5&nbsp;=&nbsp;4秒。<br />&nbsp;&nbsp;&nbsp;&nbsp;b,时间管理:第&nbsp;1,2,4,5&nbsp;节拍都计为1秒,第3节拍不做计数。这样牺牲了精确性,只保证了准确性。<br />&nbsp;&nbsp;&nbsp;&nbsp;c,任务调度:第&nbsp;1,2,4,5&nbsp;调度&nbsp;F05()。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;若分钟时间到,第3节拍调度&nbsp;F07()的其中之一;否则,该节拍为空节拍,不做任何调度。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;任务调度时,只产生标志即可(主循环查询标志)。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;注意:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1)主循环在执行任务F05和F07()前,可将所有中断关闭,包括定时器,因为800ms定时大于F07运行的700ms,所以相互不受影响。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2)main在空转时,响应时间(发现调度标志的时间)必须小于100ms,否则100ms+700ms&nbsp;大于800ms,会对时钟准确性有影响。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;2,main循环:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;刷新“显示”时钟;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(调度F05标志)//第1,2,4,5节拍<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&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;F05();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;清除F05标志;&nbsp;//执行完毕<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;退出临界区;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(分钟到)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(调度F07标志)//第3节拍到了<br />&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;switch&nbsp;F07_Status:<br />&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;case&nbsp;1:<br />&nbsp;&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;&nbsp;F071();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;F07_Status=2;&nbsp;//循序执行<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;清除调度F07标志;<br />&nbsp;&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;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;2:<br />&nbsp;&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;case&nbsp;3:<br />&nbsp;&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;case&nbsp;4:<br />&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;default:&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;F07_Status=0;//F071()~~~~F074();任务<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;清除&quot;&nbsp;分钟到&quot;&nbsp;标志;//<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}

wxj1952 发表于 2007-12-15 12:45

回cyq 和 bob.xue

两位显然都是硕士/高工以上重量级段手。考虑问题的方法/思路/角度/视野就是不一样。<br />&nbsp;&nbsp;&nbsp;非常赞同留下信箱之举,我此前给2位都发过回函,一直没有消息。所以不得不写在此。不方便就是在两位高手面前害怕说错话,漏了怯汇众都看得到。不过也没大的关系,反正我是求助者,初段位菜鸟。“不耻下问。”<br /><br />2位提出的方法令人叫绝,我/和单位的讨论小组,还真没从这些方面想到过。可称的上是奇思妙想。<br />bob的修改稿似乎是对cyq方法的推翻,“既然允许F05插入F07x之间隙,那以800为节拍会更简单。”<br />bob的第一部分,确实是抓住了题目的漏洞,“它只说要求顺序运行,没有说要求在1分钟内的何时完成。它只说了间隙之间可以被中断或调度,没有说不允许被F05截断。.....”正所谓:重要的不是看到了什么,而是没看到什么。<br />&nbsp;&nbsp;&nbsp;这就是高段位与初段位的差别。虽然我觉得这样不行,却无懈可击。没什么说的,满分!<br /><br />&nbsp;&nbsp;&nbsp;第二部分,不知我以前说清楚没有,F07x是由一个F280的长任务分解而来的,因为它必须符合时间片设置规则,使运行时间小于系统节拍。bob是用OS来做的,规则运用严谨/概念清晰。要把28分片,好像只能分解成&nbsp;4个7&nbsp;?所以bob想到了以8为系统节拍。以及5*8=4秒.....<br />&nbsp;&nbsp;&nbsp;&nbsp;有什么问题没有?&nbsp;漏了什么没看到的?<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;“如果bob(或者cyq)这样做可以,那我觉的......那样岂不是更简单/规范?那这道题一点难度都没有了,谁都想得到。哪还用3K求助?......”所以,bob或者cyq这样做不行。&nbsp;&nbsp;<br /><br />我的信箱:cmy19831@126.com<br />&nbsp;&nbsp;&nbsp;<br /><br />

mapleyang 发表于 2007-12-15 15:20

回楼上的

原来在你眼里,重量级选手都得是硕士、高工以上的...<br />原来nbhh的在这里叫嚣,要组织打擂,然后拿3k(或者10k?)做奖金,结果怎么成了求助了?这里面有啥story?<br />如果求助,那你何来的所谓答案?<br />如果有答案,早就说要公布,现在却连个影都没有,何来的“诚信”?<br />如果19831是你的出生年月的话,算我啥都没说,不跟小p孩计较<br />如果1952是你的出生年月的话,算小辈无礼了,还请大叔见谅

aihe 发表于 2007-12-15 16:40

有人得满分了,给钱啊

页: 12 13 14 15 16 17 18 19 20 21 [22] 23 24 25 26 27 28 29
查看完整版本: **lz说湖南人好斗,