打印

**lz说湖南人好斗,

[复制链接]
楼主: wxj1952
手机看帖
扫描二维码
随时随地手机跟帖
421
andrew.xu| | 2007-12-12 17:29 | 只看该作者 回帖奖励 |倒序浏览

re

使用特权

评论回复
422
fengyeu| | 2007-12-12 18:20 | 只看该作者

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

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

使用特权

评论回复
423
sz_kd| | 2007-12-13 09:07 | 只看该作者

呵呵,还是不要期待吧

估计没有什么戏

使用特权

评论回复
424
arm86| | 2007-12-13 10:33 | 只看该作者

今天貌似又没戏了

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

使用特权

评论回复
425
还要守法吗| | 2007-12-13 14:25 | 只看该作者

越看越火

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

使用特权

评论回复
426
xxrrpp2000| | 2007-12-13 17:01 | 只看该作者

火气太大鸟。。。。。

使用特权

评论回复
427
wuhancyq| | 2007-12-13 22:10 | 只看该作者

OK!

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

使用特权

评论回复
428
wuhancyq| | 2007-12-13 22:57 | 只看该作者

OK!

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

使用特权

评论回复
429
wuhancyq| | 2007-12-13 23:01 | 只看该作者

OK!

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

使用特权

评论回复
430
wuhancyq| | 2007-12-13 23:07 | 只看该作者

OK!

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

使用特权

评论回复
431
wuhancyq| | 2007-12-13 23:31 | 只看该作者

OK!

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

使用特权

评论回复
432
wuhancyq| | 2007-12-13 23:35 | 只看该作者

OK!

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

使用特权

评论回复
433
hotpower| | 2007-12-13 23:37 | 只看该作者

楼上6个OK~~~

使用特权

评论回复
434
xxrrpp2000| | 2007-12-14 08:54 | 只看该作者

LS

//Faint
你就是在数几个“OK”啊?
wuhancyq要晕死了。
^o^

///////////////////////////////
俺也数了一下,果然是六个。。。。。。
哇哈哈哈~~~~~~~

使用特权

评论回复
435
wxj1952|  楼主 | 2007-12-14 09:49 | 只看该作者

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

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

使用特权

评论回复
436
fuzichun| | 2007-12-14 09:59 | 只看该作者

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

还是你们细心.

使用特权

评论回复
437
bob.xue| | 2007-12-14 12:51 | 只看该作者

改进一下。

呵呵,果然高手如云!LZ更是深藏不露!

俺在看完 xwj 的的解释和LZ的回复之后,才理解了大部分题意。今天又看到
wuhancyq  的解释,终于有个全面的理解了。都是俺从农村出来的语文水平不高 :(

1,关于时钟,LZ说要精确,但是xwj解释了LZ的笔误,应该是准确。 wuhancyq 的思想
     确实做到了精确,难得啊!
2,按照LZ的意思,F05 F07这些任务是临界代码,绝对不容许中断,包括时钟。
   因为LZ本意可能是要在执行这些临界代码前关闭一切中断。
   在这一点上,wuhancyq 的稍微有点差异,因为其在运行F05和F07时需要打开 100ms的定时器中断。
   但是一般来说,把定时器中断的服务时间做到us级别,就不会有太大的影响。
  
  所以以上两点wuhancyq 的确实已经做到了,LZ可以拿wuhancyq 的思想去量产了~~~~呵呵!
  
但是如果再改进一点,舍弃时钟的精确性,只要保证其准确性,可以做到第二点的“不允许任何打断”的要求。

请看以下分析:
 
 1,时钟节拍换成800ms,此定时器作为“时间管理”,“任务调度”,以及维持系统节拍状态
     a,首先是状态维护:将系统时钟定为800ms 一次中断,5个节拍是个状态循环。 这样800ms * 5 = 4秒。
    b,时间管理:第 1,2,4,5 节拍都计为1秒,第3节拍不做计数。这样牺牲了精确性,只保证了准确性。
    c,任务调度:第 1,2,4,5 调度 F05()。
       若分钟时间到,第3节拍调度 F07()的其中之一;否则,该节拍为空节拍,不做任何调度。
       任务调度时,只产生标志即可(主循环查询标志)。
       注意:
       1)主循环在执行任务F05和F07()前,可将所有中断关闭,包括定时器,因为800ms定时大于F07运行的700ms,所以相互不受影响。
       2)main在空转时,响应时间(发现调度标志的时间)必须小于100ms,否则100ms+700ms 大于800ms,会对时钟准确性有影响。

    
 2,main循环:
     
    while(1)
    {
        刷新“显示”时钟;
        
        if(调度F05标志)//第1,2,4,5节拍
        {
            进入临界区;
            F05();
            清除F05标志; //执行完毕
            退出临界区;
        }
        
        if(分钟到)
        {
            if(调度F07标志)//第3节拍到了
            {
                switch F07_Status:
                
                case 1:
                    进入临界区;
                    F071();
                    F07_Status=2; //循序执行
                    清除调度F07标志;
                    退出临界区;
                
                case 2:
                    ...
                case 3:
                    ...
                case 4:
                
                default: 
                    F07_Status=0;//F071()~~~~F074();任务
                    清除" 分钟到" 标志;//
            }
        
        }
    
    
    
    }

使用特权

评论回复
438
wxj1952|  楼主 | 2007-12-15 12:45 | 只看该作者

回cyq 和 bob.xue

两位显然都是硕士/高工以上重量级段手。考虑问题的方法/思路/角度/视野就是不一样。
   非常赞同留下信箱之举,我此前给2位都发过回函,一直没有消息。所以不得不写在此。不方便就是在两位高手面前害怕说错话,漏了怯汇众都看得到。不过也没大的关系,反正我是求助者,初段位菜鸟。“不耻下问。”

2位提出的方法令人叫绝,我/和单位的讨论小组,还真没从这些方面想到过。可称的上是奇思妙想。
bob的修改稿似乎是对cyq方法的推翻,“既然允许F05插入F07x之间隙,那以800为节拍会更简单。”
bob的第一部分,确实是抓住了题目的漏洞,“它只说要求顺序运行,没有说要求在1分钟内的何时完成。它只说了间隙之间可以被中断或调度,没有说不允许被F05截断。.....”正所谓:重要的不是看到了什么,而是没看到什么。
   这就是高段位与初段位的差别。虽然我觉得这样不行,却无懈可击。没什么说的,满分!

   第二部分,不知我以前说清楚没有,F07x是由一个F280的长任务分解而来的,因为它必须符合时间片设置规则,使运行时间小于系统节拍。bob是用OS来做的,规则运用严谨/概念清晰。要把28分片,好像只能分解成 4个7 ?所以bob想到了以8为系统节拍。以及5*8=4秒.....
    有什么问题没有? 漏了什么没看到的?
   
    “如果bob(或者cyq)这样做可以,那我觉的......那样岂不是更简单/规范?那这道题一点难度都没有了,谁都想得到。哪还用3K求助?......”所以,bob或者cyq这样做不行。  

我的信箱:cmy19831@126.com
   

使用特权

评论回复
439
mapleyang| | 2007-12-15 15:20 | 只看该作者

回楼上的

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

使用特权

评论回复
440
aihe| | 2007-12-15 16:40 | 只看该作者

有人得满分了,给钱啊

使用特权

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

本版积分规则