打印

**lz说湖南人好斗,

[复制链接]
楼主: wxj1952
手机看帖
扫描二维码
随时随地手机跟帖
501
highgear| | 2010-4-5 20:26 | 只看该作者 回帖奖励 |倒序浏览
一道脑残题, 有什么可讨论的。搂主根本未理解什么是 os.

使用特权

评论回复
502
nathenlu| | 2010-4-5 20:34 | 只看该作者
期待

使用特权

评论回复
503
xfgood3872| | 2010-4-5 20:35 | 只看该作者
从一楼爬到顶楼   坐下来休息下额    发现LZ很牛X的嘛  圈圈也牛X的嘛   不喜欢OS 喜欢裸奔

使用特权

评论回复
504
dongshan| | 2010-4-5 20:54 | 只看该作者
晕,挖墓啦!

使用特权

评论回复
505
adofu2008| | 2010-4-5 21:12 | 只看该作者
住顶层凉快!

使用特权

评论回复
506
冷漠| | 2010-4-6 11:30 | 只看该作者
唉,答案都有了的事。还在说什么“脑残题。”这是一道真真实实的研究生作业题,课下翻书上网都允许的。

还没有哪个学生敢说教授出的脑残题,那种如LZ所说,高考考不上,怪教委出题的人脑残的人,?看来,中国上千万考生,都在研究“脑残题”,就他那么一个人聪明?

OS能做到的,裸奔一定能做到,说白了就是自己写了个调度程序来实现。


说的太好了!爱因斯坦做得到,我一定也能做到。不过就是......
"说白了就是自己写了个调度程序来实现。" 中国喊了那么多年,每年毕业那么多硕士、博士,有几个写了的?写呀!别光说不做。“不是我不会,是LZ这个脑残题目太简单。”Q!

o

使用特权

评论回复
507
abcejs| | 2010-4-6 16:48 | 只看该作者
就是有了OS,系统调度也是分时间片的,几个线程之间仍然是会被打断的。
这样的话和裸奔中断并没有什么本质的区别。

使用特权

评论回复
508
zhzjzh21ic| | 2010-4-6 17:46 | 只看该作者
咋这多无聊的人?
我也挺无聊的,看了10多页!!!

使用特权

评论回复
509
NE5532| | 2010-4-6 20:31 | 只看该作者
对研究生和教授见的问题,我从来持保留态度,要是教授行,学校就改企业了;要是研究生行,我们这些本科生就该回家了。

使用特权

评论回复
510
highgear| | 2010-4-6 21:01 | 只看该作者
冷嬷嬷又跳出来了。

如果这道题只是作业,那么没有人说什么。但要在一个技术论坛里“终结“, 而且根本不懂 os(Lz 混淆了底层硬件中断与os中断的概念, os 的interrupt 应为打断), 说脑残还是客气的了。 NE555 说的对, 技术这一行,本来就不是教授硕士、博士的工作, 而是工程技术人员的事, 我敢说,这里随便一个中手, 写程序都比大多数教授强。

你冷嬷嬷别把你们单位的水平与这里的工程技术人员相比, 那时地下与天上的距离。

不服气? 你冷嬷嬷还是先那个按键控制LED做出来, 然后我们可以比试一下做一个 OS (说实话,这个只能称为 task scheduler, 因为没有动态内存分配等等资源管理内核), 看看 os (task scheduler) 有多难。

写呀!别光说不做。

使用特权

评论回复
511
zsyok77322| | 2010-4-7 16:41 | 只看该作者
呵呵,我的理解能力有限,不知道这个流水帐程序是否可行,保证无累积误差
unsigned char TaskNumber;        /*4个任务的心跳,分钟到达后偶数才执行*/
unsigned char MinFlag;                /*分钟到达标识*/
unsigned char SecCounter;        /*秒钟计数器*/

void main1(void)
{
        unsigned char SecCounter_bak;

        init();

        SecCounter_bak=SecCounter;
        while(1)
        {
                while(SecCounter_bak==SecCounter);        /*等待秒钟到达*/
               
                if((MinFlag==1)||(TaskNumber!=0))
                {
                        MinFlag=0;
                        if(TaskNumber==0)
                        {
                                F071();
                               
                        }
                        else if(TaskNumber==2)
                        {
                                F072();
                               
                        }
                        else if(TaskNumber==4)
                        {
                                F073();
                               
                        }
                        else if(TaskNumber==6)
                        {
                                F074();
                               
                        }
                        if(TaskNumber>6)
                        {
                                TaskNumber=0;
                        }

                        F05();
                }
        }
}

void SecondInt(void)                //秒中断函数
{
        if(SecCounter>59)
        {
                SecCounter=0;
                MinFlag=1;
        }
        else
        {
                SecCounter++;
        }
}

使用特权

评论回复
512
zsyok77322| | 2010-4-7 16:44 | 只看该作者
晕,要把F05程序移到if((MinFlag==1)||(TaskNumber!=0))所在括号外面去

使用特权

评论回复
513
zsyok77322| | 2010-4-7 16:50 | 只看该作者
unsigned char TaskNumber;        /*4个任务的心跳,分钟到达后偶数才执行*/
unsigned char MinFlag;                /*分钟到达标识*/
unsigned char SecCounter;        /*秒钟计数器*/


void main1(void)
{
        unsigned char SecCounter_bak;
        init();
        SecCounter_bak=SecCounter;
        while(1)
        {
                while(SecCounter_bak==SecCounter);        /*等待秒钟到达*/
                if((MinFlag==1)||(TaskNumber!=0))
                {
                        MinFlag=0;
                        if(TaskNumber==0)
                                F071();
                        else if(TaskNumber==2)
                                F072();
                        else if(TaskNumber==4)
                                F073();
                        else if(TaskNumber==6)
                                F074();
                        if(TaskNumber>6)
                                TaskNumber=0;
                        else
                                TaskNumber++;
                }
                F05();
        }
}
void SecondInt(void)                //秒中断函数
{
        if(SecCounter>59)
        {
                SecCounter=0;
                MinFlag=1;
        }
        else
                SecCounter++;
}
void init(void)  //初始化寄存器
{
        SecCounter=0;
        TaskNumber=0;
        MinFlag=0;
}

使用特权

评论回复
514
zsyok77322| | 2010-4-7 16:58 | 只看该作者
如果说用OS是为了用别人的代码的话,我宁肯不用,做产品出了问题所花的代价比做学术出的问题大多了,一心只想用别人代码的人不是一个做产品的人,别人只要有一个小BUG,就有可能要了你公司的命

使用特权

评论回复
515
fuchouzhe| | 2010-4-8 14:00 | 只看该作者
无聊的问题讨论了n年了

使用特权

评论回复
516
woshidasha| | 2010-4-8 15:03 | 只看该作者
woshidasha

到此一游

使用特权

评论回复
517
logics| | 2010-4-8 15:25 | 只看该作者
做记号,无用之争。
OS与不用OS看情况而定。

使用特权

评论回复
518
gaiwang42| | 2010-4-9 13:55 | 只看该作者
要求:各函数时间开销严格,运行期间不允许打断(即不允许被中断或抢占)。
这种要求是不是也意味着不允许任务调度?如果要把上述函数操作都看作原子,即使有os有怎么做呢
任务调度也是需要中断函数执行的
如果仅仅只是满足上述的要求,我到是觉得裸奔比os好控制
裸奔可以通过不停改变计数时钟来达到精确定时,开始定时1s执行一次F05(),到一分钟时改变定时,定时600ms执行一次F05(),定时800ms执行一次F07X(),接着再定时600ms执行一次F05(),依次如下

|F05()-----F05()-----|F05()-----F05()-----|>>>>|F05()-F071()-F05()-|F05()-F072()-F05()-|F05()-F073()-F05()-|F05()-F074()-F05()-|
|表示2s的间隔,-表示100ms空闲时间间隔,>>>>表示省略24个前面的样式
F05(),F071(),F072(),F073(),F074()代表函数运行时间开销

使用特权

评论回复
519
mo910| | 2010-4-13 14:25 | 只看该作者
lz就一脑残

使用特权

评论回复
520
ytfyiu| | 2010-4-15 14:39 | 只看该作者
挖坟..  
顺便想打听下传闻...匠人真是个JJ?

使用特权

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

本版积分规则