打印

带os到底比不带os有哪些优势?

[复制链接]
楼主: doob
手机看帖
扫描二维码
随时随地手机跟帖
281
computer00| | 2007-11-29 23:17 | 只看该作者 回帖奖励 |倒序浏览

为啥不可以?


void delay(unsigned int i)
{
 while(i--)
 {
  ScanLed();
  ScanKey();
  //
 }
}

delay(100);

使用特权

评论回复
282
qihao| | 2007-11-29 23:49 | 只看该作者

21ic 侃单片机 尽是高楼大厦!

使用特权

评论回复
283
wimhy| | 2007-11-30 00:12 | 只看该作者

回280楼

延时的同时还真的可以做其它的事情.只是不是00的写法.

使用特权

评论回复
284
xwj| | 2007-11-30 00:18 | 只看该作者

同意LS,延时的同时当然可以做其它的事情

只要你的延时程序架构正确

使用特权

评论回复
285
hq_y| | 2007-11-30 00:20 | 只看该作者

哇,快2个250了

晕, 错了

使用特权

评论回复
286
ayb_ice| | 2007-11-30 08:35 | 只看该作者

延时太短不可能做其它事情

如果MS级完全可以做其它事情,可以先执行其它任务,一段时间后再回来的。

使用特权

评论回复
287
wxj1952| | 2007-11-30 08:57 | 只看该作者

咦?

 282楼的delay(100)是延时多少时间?所写的形式应该算计数器吧。根本就是计数器形式。把ScanLed(); ScanKey();运行了100次后退出。

  假设要求你的 ScanLed();
  ScanKey();
要20ms运行一次,不可控呀?

谁给个能说服人的架构?至少时间要精确,否则怎么叫延时函数。

使用特权

评论回复
288
ayb_ice| | 2007-11-30 09:14 | 只看该作者

这是程序架构的问题,不是一两句话能说清楚的

使用特权

评论回复
289
农民讲习所| | 2007-11-30 10:24 | 只看该作者

确实可以肯定wxj1952没掌握前后台设计。

使用特权

评论回复
290
sz_kd| | 2007-11-30 10:32 | 只看该作者

支持延时可以做其它的事情

使用特权

评论回复
291
computer00| | 2007-11-30 11:12 | 只看该作者

不知道wxj1952所说的延时精确是怎样个精确法?

用操作系统能精确到多少? 可控吗? CPU空闲和忙时的响应时间一样吗?

使用特权

评论回复
292
甄蔡组合| | 2007-11-30 11:16 | 只看该作者

OS没有接触过.听起来不错!!学习中

使用特权

评论回复
293
hkap| | 2007-11-30 14:23 | 只看该作者

具体没用过,期待后面项目能体验一下...

使用特权

评论回复
294
wxj1952| | 2007-11-30 15:06 | 只看该作者

圈圈写的OS时间片不可控吗?

OS的延时函数是可以精确控制的。假定最小时间片(时基T)是100us,——根据切换程序的运行时间而定,越快的CPU可以精确到越小的时基,例如10us。
   之后每个任务都可以在这个时基T基准上设置自己的倍数,也就是为自己设置可变时间片。例如任务A运行需要1ms,那么A开始运行时设置延时函数系数为10倍率,下一次条件变化时,A也可能需要运行2ms,那么设置delay(20)。A任务独占过长的时间片当然不合理,也许A任务1.6ms就运行完毕了,是不是400us就CPU空闲浪费了?OS怎么做的谁都知道,A如果提前运行完毕,运行一个“主动放弃CPU函数”将自己置于就绪态,就可以把400us让给其他任务运行了。因此,宏观上,OS系统只要有任务需要运行,CPU总是满负荷的。

以上说的是可控时间片。不用说也可以理解:假如A任务处于运行态占据CPU时,运行到某一段需要等待5ms之后再运行,它调用wait(5ms)延时函数,主动放弃CPU 5ms,将自己置于阻塞态,让给其他任务B、C、或D运行,5ms之后,OS的调度器将把CPU使用权恢复给A任务,(恢复A运行态)误差不会超过一个T。精确吗?理论上没有误差。谁要是追究这一点,恐怕是胡搅蛮缠了。

高手总说别人不懂,请他自己“奔”一个给人看看,又说自己不屑/懒得做。中国吹了20年也没吹出一个OS,然后说微软做的太差。

实现以上功能的OS源代码,已经是公开的。别到时高手又要不屑一看了。

使用特权

评论回复
295
农民讲习所| | 2007-11-30 15:14 | 只看该作者

无知啊无知

使用特权

评论回复
296
computer00| | 2007-11-30 16:33 | 只看该作者

呵呵,我写的OS是以10ms为一个时钟节拍的

就是说,即使你将需要延时的任务优先级设置为最高,那么延时的误差可能为10ms。

如果这个任务的优先级不是最高的,那很可能延迟会比预计的要长得多。


你要是说使用操作系统提供的延迟函数能够比裸奔的还准确,打死我也不信。有机会你自己写个操作系统试试就明白了。

使用特权

评论回复
297
ayb_ice| | 2007-11-30 17:23 | 只看该作者

computer00 有些人相信的

使用特权

评论回复
298
dld2| | 2007-11-30 18:29 | 只看该作者

这个楼居然还在盖

使用特权

评论回复
299
jack.king| | 2007-11-30 18:56 | 只看该作者

继续顶

使用特权

评论回复
300
wxj1952| | 2007-11-30 19:09 | 只看该作者

一般CPU满载时10ms可以运行至少20个任务。

这一点没有人有疑义吧。
那么,有没有哪个优先级任务迫切到要在0.5ms之内去抢占/去打断其他任务的时间片?
圈圈的意思是说,当一个低优先级启动5ms延时时,当延时时间到达时,恰好有一个高优先级的任务需要运行,于是抢占发生了,低优先级的延时误差产生了。

但是我这个调度器不是这么设计的,我是让低优先级任务A在精确延时时间到达时,变化了优先权,A任务这时优先权最高,不允许任何其他任务打断。这样即使有紧急任务申请执行,对不起,请推迟300us(最大延迟,没那么巧。)什么样的任务等不及300us ?(注意这是最慢的CPU )那就放到中断事件程序里执行,这样比切换任务快。非要说300us我等不及,那就用专用快速CPU单一任务为你服务怎么样?因为一个抢占切换程序运行时间也要100us以上!

前面一个帖子说过,当一个低优先级任务A运行到还剩20us完成时,抢占任务B来了,A被挂起了,结果抢占切换任务程序需要运行100us,任务B反而慢了。谁都知道,抢占任务切换程序的运行时间比正常结束任务的切换时间要长得多。(它还要保留A任务的恢复点和交换栈区什么的)。于是,我说这很滑稽。所以我设计当前任务不允许抢占。也就是合作式调度器。

如果打死也不相信的话,请给我出一道实际一点的难题,我递交我的程序。看看有没有误差。

另外,设置时间片10ms,就是认为10ms时基误差可以忽略。这是时间片设置原则。我设置的是100us,那么误差就是100us。

使用特权

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

本版积分规则