打印

**lz说湖南人好斗,

[复制链接]
楼主: wxj1952
手机看帖
扫描二维码
随时随地手机跟帖
221
IceAge| | 2007-12-4 21:49 | 只看该作者 回帖奖励 |倒序浏览

还在争?

坦率的说,争这个意义不大。wxj1952 的用“终结“ 一字,显然欠妥。这样的题目,无论在 os 下有什么样的调度策略,裸奔绝对, 我是说, **** 绝对 **** 可以做到,无论如何,wxj1952 你肯定会输掉的。

os 的优势在于通用性,灵活性,特别是可扩展性,这是 裸奔 很难做到的。

wxj1952 是新警察吧?

使用特权

评论回复
222
liandao| | 2007-12-4 21:49 | 只看该作者

可行么

A.每分钟到达点之后9秒时序图
|___________________|___________________|___________________|___________________|
|    700ms   | 300ms|200ms|300ms|500ms  |    700ms   | 300ms|200ms|300ms|500ms  |   <<时间
|-->  F071  <|-->F05     <|  _  |-->F05<|-->  F072  <|-->F05     <|  _  |-->F05<|   <<任务
|                   +     |  |          +                   +     |  |          +
|0                  1     |  |          2                   4     |  |          5   <<秒值
|                         |  |<-300ms延时|                         |  |<-300ms延时|
|                         |             |                         |              |   
#--                       |<-秒跳        |<-秒跳                    |<-秒跳        |<-秒跳
|<---每分钟到达点



|___________________|___________________|___________________|___________________|
|    700ms   | 300ms|200ms|300ms|500ms  |    700ms   | 300ms|200ms|300ms|500ms  |   <<时间
|-->  F073  <|-->F05     <|  _  |-->F05<|-->  F074  <|-->F05     <|  _  |-->F05<|   <<任务
+                   +     |  |          +                   +     |              +
5                   6     |  |          7                   8     |   |          9  <<秒值
|                         |  |<-300ms延时|                         |   |<-300ms延时|
|                         |             |                         |              |
|<-秒跳                    |<-秒跳        |<-秒跳                    |<-秒跳        |<-秒跳

B.每分钟其余时间时序图
|___________________|___________________|___________________|
|  500ms |   500ms  |  500ms  | 500ms   |  500ms  |   500ms |  <<时间
|-->F05 <|  _ _ _ _ |-->F05  <| _ _ _ _ |-->F05  <|  _ _ _ _|  <<任务
+              |    +              |    +              |    +    
8              |    9              |     10            |   11  <<秒值
|              |<-500ms延时         |<-500ms延时         |<-500ms延时
|                   |                   |                   |
|<-秒跳              |<-秒跳             |<-秒跳              |<-秒跳       

补充说明:
1 F05执行情况有两种如下:
1.a F05在每秒的开始点起被执行,如图B描述的时序图.
1.b F05并没有严格在每秒的时刻到达的时候被执行,但每一秒内均被执行过一次,如图A描述的时序图(这点不知是否合适?)                             
2.在每分钟的时刻到达后,9秒内F05如1.a所讲,9秒期间4个顺序任务F071--F074依次在每两秒的开始点被执行
3.图B中秒的维护比较容易,秒跳变比较精准;图A中,秒跳有偏差,一次是1200ms 下次是800ms 如此往复4次.虽然秒跳位置偏差但时间并未出现偏差

要求点检查:
1.时间精确<<可以做到
2.F071---F074顺序执行<<可以做到
3.每秒一次F05<<做到了?(但时间点并不是次次都在秒跳的开始点)
4.任务不允许被打断<<做到
--------------------               
个人认为以下要求不能满足:
1.如果要求秒跳均是在每秒的开始点,做不到,因为700ms的任务加上一个500ms的任务比1秒长.
2.要求耗时500ms的任务F05必须开始于每秒的开始点,也做不到.



1、用单CPU做一个精确的时钟。
2、以此时钟为基准,每秒钟运行一次一个500ms开销的任务,设其为F05()。
3,每分钟到达时,运行一次4个紧密关联的函数,每个运行开销700ms, 设其为F071(),F072(),F073(),F074();要求4个函数必须顺序运行。
4、为简化题目,只做秒、分2位。

使用特权

评论回复
223
xwj| | 2007-12-4 21:53 | 只看该作者

好,就以LZ目前的这个版本为准,开始咬文嚼字的审题:

好,就以LZ目前的这个版本为准,开始咬文嚼字的审题:

这是一个实际应用的例子。实现目标:

1、用单CPU做一个精确的时钟。
--估计不是“精确”,而应该是“准确”,既整体计数不会错误即可。这样理解LZ同意吗?

2、以此时钟为基准,每秒钟运行一次一个500ms开销的任务,设其为F05()。
--依题意F05()在每秒钟内必须得到一次运行,每次运行的整体时长时500mS,但不限定是否被打断以及是否非在一秒开始时准确开始。由于有“每秒钟运行一次”的要求,考虑偏差,在任意2秒内如果一次都没运行那就肯定是错的。这样理解LZ同意吗?

3,每分钟到达时,运行一次4个紧密关联的函数,每个运行开销700ms, 设其为F071(),F072(),F073(),F074();要求4个函数必须顺序运行。
--依题意F07x()每个函数运行时间为700mS,然后顺序依次为F071(),F072(),F073(),F074(),不能错乱(比如F071(),F073(),F072(),F074();),不能混合(比如F071(F072()),,F073(),F074();)等。而在“一分钟后”是1.01分时开始运行F071()还是1.10分时开始运行关系不大,是1.x1分时开始运行F072()还是1.x2分时开始运行F072()关系不大,实际上只要保证F071(),F072(),F073(),F074();4个的相对顺序正确就行了。这样理解LZ同意吗?

4、为简化题目,只做秒、分2位。
--这个无所谓啦,设秒的范围为0~59;分的范围为0~59。这样理解LZ同意吗?

要求:各函数时间开销严格,运行期间不允许打断(即不允许被中断或抢占)。
--这个要求非常关键,LZ本意上所设置的难点也就在这里了。“各函数时间开销严格”中的“严格”就很关键了。比如700mS的函数要时运行成了701mS或699mS都是不对的。这样理解LZ同意吗?
--“运行期间 不允许 打断”这句也是相当关键的,分为3个关键词组:“运行期间”“不允许”“打断”,缺一不可,对吧? 那么分别来详细理解:“运行期间”是指每个函数(比如F05()、F071())运行中间,对吧?“不允许”很好理解,违规就立即out嘛。“打断”--这个打断就不知怎么说了,不知会不会有人故意去曲解它呢?按照文字的意思,对应到处理器的行为上,如果运行F071()时PC指针全部在F071()的范围内才是不被打断,只要执行F071()范围外的任何指令,就是被打断了,这样理解LZ同意吗?
--再看括号里的补充:(即不允许被中断或抢占),这个“中断”是指 a、别的程序中断了它一下然后又返回了;b、还是指别的程序中断了它,就此不返回了;c、还是指别的程序中断了它,运行完另外的程序后再返回它了; d、还是指CPU产生了定时器硬件中断、IO硬件中断等?“抢占”很好理解,只是针对OS来说的,实际应该是上面的情况c吧。这样理解LZ同意吗?




先问这一部分吧,等LZ确认后再继续...

使用特权

评论回复
224
xwj| | 2007-12-4 21:58 | 只看该作者

如果对于我的理解有异议可以提出来,我们甚至可以把解释

前提是只要你有合理或不合理的解释!

然后我们再在你的“解释”上统一讨论或比试,但不允许反悔或逃跑,OK?

使用特权

评论回复
225
农民讲习所| | 2007-12-4 21:59 | 只看该作者

LZ想要答案而已,夸张手法是市场运作。

使用特权

评论回复
226
老狼| | 2007-12-4 22:23 | 只看该作者

那就玩玩吧

Timer   //定时1秒
{
  TimerCounter++;
  SecondLBL=1;
}
main()
{
 
 TimerCounter=0; //秒计时器
 SecondLBL=0;   //秒到达标志
 OpenAndInitTimer();//

 while(1)
 {
  if((SecondLBL==1)&&(TimerCounter<59))
  {
    F05();
    SecondLBL=0;
  }
  if(TimerCounter>=59)
  { 
    CloseTimer();      //lineA 关定时器
    F071();
    F072();
    F073();
    F074();
    Delay();           //延时时间常数为,程序由lineA到lineB 时间为3秒
    TimerCounter=3;    //让秒计时留出3秒的时间,留给这段程序执行
                         需要根据程序运行,修改等待时间
    OpenAndInitTimer();//lineB 开定时器,并从新初始化    
  }
}

 不知道楼主是不是这个意思!

使用特权

评论回复
227
zhuhai2004| | 2007-12-4 22:26 | 只看该作者

耐心看完所有的帖子,到最后也不知道都说了什么?

听说日本的uITRON的实时系统也不错,可惜是收费的。(没办法,好东西都是要银子的,可是不用银子的又不敢用,郁闷)不知道有没有这方面的高手啊?因为用日系的片子,所以关注,高手不如谈谈这个东东呗!

使用特权

评论回复
228
平常人| | 2007-12-4 22:29 | 只看该作者

哈哈,一只猫耍一群老鼠

有人在偷着乐

使用特权

评论回复
229
liandao| | 2007-12-4 22:29 | 只看该作者

追加

洗澡时想了一下:
对"224楼"补充如下:
如果图A图B正确,那么用状态机的方式做"裸奔"很容易的,即便是要求用OS,那么问题也能解决,在图A中每次秒跳点做系统时间校正就行了.
-->执行F071-->执行F05--->校正系统时间-->300ms空等-->F05--->
   |         |         |         |            |  <<调度点  

-->执行F072-->执行F05--->校正系统时间-->300ms空等-->F05--->
   |         |         |         |            |  <<调度点  

-->执行F073-->执行F05--->校正系统时间-->300ms空等-->F05--->
   |         |         |         |            |  <<调度点  

-->执行F074-->执行F05--->校正系统时间-->300ms空等-->F05--->
   |         |         |         |            |  <<调度点  
...
还是认为500ms任务和700ms任务无法同时对齐于秒的开始点,如同有一个很多连续的一米的空格子,有70cm和50cm长的东西,事先要求每个格子放一个50cm的东西,那么无论如何70cm的东西是根本不再能发到格子里的.

使用特权

评论回复
230
uc.c| | 2007-12-4 22:29 | 只看该作者

楼好高啊

这么高的楼,一页一页看下来,真累。

使用特权

评论回复
231
wxj1952|  楼主 | 2007-12-4 22:43 | 只看该作者

XWJ的分析完全对!

非常对不起,我差点今天关机了。没想到有这么多热心网友关注。我要再等就对不起人了。

xwj的分析完全对!就是F05“但不限定是否被打断”这句,应该像F07x一样理解,只要启动运行,就应连续到完成。“所有函数‘运行期间’不允许被打断”。

我这里公开主要答案:“什么叫临界代码”?

代码的临界段
代码的临界段也称为临界区,指处理时不可分割的代码。一旦这部分代码开始执行,则不允许任何中断打入。为确保临界代码的执行不被中断,再进入临阶段之前须关中断,而临界代码执行完后,要立即开中断。
 ——摘自《嵌入式实时操作系统uc/OS-II》

所以,把F07x处理为临界代码即可。临界代码的规则是(书上没说,我们自己应该知道):一段临界代码的运行时间不能超过一个系统节拍时间。分割任务也是按此规则吧。其实这是裸奔规则,(我在为裸奔者提示。)OS可以自动管理,不要求用户理解这么复杂的事情。

还有,好像hotpower说过:只要秒脉冲不丢,什么都可以奔出来。临界代码运行期间,系统心跳停止了么?没有。所以,还有最后一个问题,怎么保证正确恢复丢失的秒数?

基本原理都说明了。没有刁难谁。最后这个问题,还想看看怎么奔的。后天来看OS怎么做的。

谢谢诸位!谢谢老狼,谢谢liandao。

使用特权

评论回复
232
老狼| | 2007-12-4 22:43 | 只看该作者

uITRON

这个系统的作者好象叫 板村建(板寸贱),按zlg 的说法,全世界占有量第一(我不太相信),现在都在说全世界占有量第一,LINUX , WinCE 都说是占有量第一,如果从我能看到的来说,我个人觉得还是wince 更有发展,这个世界,跟老大混,不会有错的,不过在咱那个ARM 论坛上可不敢这样说,板砖不知道要飞过来多少。uITRON,个人觉得是最没前途的,你看看老周,现在再推啥?也就 LINUX , WinCE。 那个uITRON也就说说,没推啥产品!其实我更喜欢Vxwork or threadx,但是太贵了!

使用特权

评论回复
233
chuangong| | 2007-12-4 22:51 | 只看该作者

不知这样是否可以裸奔?

void main(void)
{
    while(1)
    {
        //TCONT为定时器的计数器寄存器,
        //该寄存器需满足大于2秒的定时计数长度(    假设为2秒 =500ms+700ms+其他语句执行时间)
        //timerReload为1秒的重载值
        if(timerReload>TCONT)         //1秒计数已经溢出
        {
             TCONT = timerReload + TCONT ;       //重载1S计数值,暂时不理该语句对时钟误差的影响
             Sec++;
             EnSecDeal=true;
             if(Sec>=60)
             {     
                 Sec = 0;
                 Min++;
                 EnMinDeal = true;
                 EnF07 = 1;
             }
        }

        if(EnSecDeal==true)          //1秒的处理
        {
            EnSecDeal=false;
            F05();
        }
        //TCONT为定时器的计数器寄存器,该寄存器需满足大于2秒定时计数长度;
        //timerReload为1秒的重载值
        if(timerReload>TCONT)    //1秒计数已经溢出
        {
             TCONT = timerReload + TCONT ;       //重载1S计数值,暂时不理该语句对时钟误差的影响
             Sec++;
             EnSecDeal=true;
             if(Sec>=60)
             {     
                 Sec = 0;
                 Min++;
                 EnMinDeal = true;
                 EnF07 = 1;
             }
        }
        if(EnMinDeal==turn)       //1分钟的处理
        {
            switch(EnF07)
            {
                case 1 :F071();    EnF07 = 2;break;
                case 2 :F072();    EnF07 = 3;break;
                case 3 :F073();    EnF07 = 4;break;
                case 4 :F074();    EnF07 = 5;EnMinDeal=false;break;
                default:break;
            }
        }
    }
}

使用特权

评论回复
234
xwj| | 2007-12-4 22:56 | 只看该作者

就因为“一旦这部分代码开始执行,则不允许任何中断打入

那你的系统节拍时间定多少?700mS还是700mS以上?此时的OS还有什么意义?此时你怎么去保证每一秒内F05()都能运行一次?

而且你的节拍怎么来???


OS根本就不是这样用的,LZ根本就是举错了例子...

使用特权

评论回复
235
平常人| | 2007-12-4 23:06 | 只看该作者

我说嘛,玩这种文字游戏,这不是耍人是什么

在11楼,我第一次发言时就要求LZ画个坐标图描述一下你的要求,这是避免歧义的最好办法,但LZ始终置之不理。

不知道LZ是要考大家的文字理解能力还是要考大家的编程能力,如果是前者,那纯属在捉弄人。

如果是后者,则犯了任务定义之大忌,定义任务的目的是要实现既定目标,现在变成了所有人在揣摩出题人的真实意图,我只能说这是LZ在故意卖关子,看所有人的笑话;也许楼主不这么认为,但实际效果就是如此!试想在战场上,一个指挥员下命令而所有的下属都不明白他的意图,即使他是个非常优秀的指挥员,他仍然要吃败仗。再多说一句,如果你让你的承包商设计一个产品,但所有的承包商都不十分清楚你要的是什么样的产品,可能你是个十分优秀的人,你也自认为说明的很明确了,但如果没有人能够理解你的意图,你仍然不能得到你想要得到的产品,最终你还是不能达到你的目的。

使用特权

评论回复
236
zhuhai2004| | 2007-12-4 23:07 | 只看该作者

uITRON主要是资料太少,推广不开,资料都是日文的多。

工业应用我看好uITRON,uLINUX可能更适合联网吧!好像在哪里看过计算机所的同志也谈过uITRON的系统,评价很高.

使用特权

评论回复
237
xwj| | 2007-12-4 23:11 | 只看该作者

同意LS,去看看我出的那个题吧,会象你这样缠夹不清吗?

使用特权

评论回复
238
soso| | 2007-12-4 23:19 | 只看该作者

有点疑问

那个 F05 可不可以被打断?或者不能被打断但是可以被延迟?

F071-F074 这几个函数之间是否只要顺序执行即可,而不限制中间插入其他动作?

使用特权

评论回复
239
athlon64fx| | 2007-12-4 23:21 | 只看该作者

re:

此帖和“利用失重现象宇航员也许就不会死”异曲同工。
http://bbs.news.sina.com.cn/tableforum/App/view.php?bbsid=4&subid=2&fid=1549&tbid=2449

一万五千个跟帖的试图说服他,但是却不知道其实他是故意炒作的。
大家看看这个帖子吧。
相关链接:http://bbs.news.sina.com.cn/tableforum/App/view.php?bbsid=4&subid=2&fid=1549&tbid=2449

使用特权

评论回复
240
soso| | 2007-12-4 23:29 | 只看该作者

RTOS 不过是个工具,其基础仍然是非RTOS。

可以说,能够用RTOS做到的,用非RTOS的方法也都能做到。而用非RTOS的方法做不到的,用RTOS一样做不到。

使用特权

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

本版积分规则