圆圈
发表于 2007-12-6 14:23
农民讲习所
我出道题目吧:<br />事件一:响应要求5微妙,处理时间30微妙; 优先级0<br />事件二:响应要求1毫秒,处理时间1毫秒; 优先级1<br />事件三:响应要求2毫秒,处理时间1毫秒; 优先级2<br />事件四:响应要求10微妙,处理时间10毫秒;优先级3<br />事件 5 6 7 8 9..20:响应要求50~100毫秒,处理时间1~50毫秒<br />
dld2
发表于 2007-12-6 14:28
我觉得嵌入式系统上的OS可以这样分
一类是微内核、强实时、抢占调度。用在通信、控制领域。例如vxworks。<br />另一类是宏内核、准实时、基于优先级和时间片的调度。用在手持终端这样的地方。手持终端一般有杂七杂八的一堆功能,所以这类OS也有杂七杂八的一堆层次和组件。例如wince。<br />嵌入式linux介于二者之间,又想向上靠,又想向下靠。<br /><br />象1952用的那个OS其实是个玩具。uCos也有玩具的嫌疑。
圆圈
发表于 2007-12-6 14:29
21ICBBS提醒您注意:发言不成功!!!,至少主题不应为空
wince palm os主要是人机界面好,而且类windows编程风格,因此推广的人很多,毕竟win上的程序员要比嵌入式领域的程序员便宜...<br />VXWORK是实时系统,但PDA HANDPHONE对实时要求并不高,所以其实嵌入式linux等都可以应付这种应用。<br />但对于军事及数控机床这样的行业,用linux palm os wince肯定不行,因为他们的实时性要求可能满足不了实际的需求。 因为linux是基于时间片为基础来调度的。并不具备实时性,同理于其他~~~
圆圈
发表于 2007-12-6 14:35
UCOS
UCOS是实时系统,但比较简单,而且缺少很多协议(文件系统 TCP/IP USB MMU...),所以一般系统上使用的话肯定够用,但系统大了复杂了,并不一定能胜任。 选择什么操作系统,关键还是要看应用场合的~ 选择操作系统价格 性能 资源耗费 服务 系统持续性等都是考虑因素。 而性能内容更多,具体为任务管理 内存管理 信号量 消息 队列 邮箱 第三方协议,这些是最基本的,正规严格的操作系统管理的内容更多,但关键点还是任务和内存。(没有整理过思路,随性说,可能有遗漏)
农民讲习所
发表于 2007-12-6 14:38
你说的OS不错,那么嵌入式黑奔和嵌入OS的比较差不多也这样
另外你出的题不对,俺说过么嵌入式黑奔是串行化的三个等级处理,不是优先级别处理。两者策略和理论出发点是不同的。<br /><br />51中的中断等级和中断优先级别是大不相同的。<br /><br />如果你举个产品控制要求,俺倒是觉得合适,黑奔做不到,OS一定也做不到。
农民讲习所
发表于 2007-12-6 14:40
俺的培训教材里面都有,上面这些你可以看看俺是怎么处理
农民讲习所
发表于 2007-12-6 14:43
拿内存管理这个经典来说
做产品只需要在初始化阶段实现动态内存分配,不需要在运行过程中分配,即使在运行中有这么要求,通常也会在初始化阶段一次性分配完毕。这就可以看出嵌入式裸奔和嵌入式OS对产品态度上的巨大差别。
圆圈
发表于 2007-12-6 14:50
我说过了,某种程度上说,不一样就是不一样
如果你的嵌入式裸奔能写到线程调度,那我出的题目就很容易解决了。毕竟代码都是人写的,你要写个嵌入式多任务调度的程序代码,那我没话说,但问题是有多少人又精力能力去做. 项目的时间进度你总还是要考虑的是吧.. 但如果你只是简单的单线程状态机化,我告诉你,那个问题很难处理好! 而且系统以后增加什么任务,将导致系统复杂度大大增加,而且可能还需要重新分析划分系统状态。<br /><br />其实我一开始就直接说明了两者根本区别:<br />单线程状态机无论怎么做,都需要在退出某种状态后,方有机会去处理事件。而多线程,在事件发生后,系统就立刻进行线程调度以决定是否对该该事件进行处理。 两者差别在于实时性。 你那样的才真正是弱实时,因为你不允许在执行完当前状态前去处理事件,而这个时间的花费是不确定的。这就是两者根本区别.
圆圈
发表于 2007-12-6 14:57
310
内存管理没这么简单的~ 好的内存管理可实现内存碎片整理回收,而且还有越界保护功能,同时还能查询内存使用状态来检测系统内存是否存在泄漏... 更不要说一些具有MMU功能的内存管理,可以用硬盘或者U盘来运行大于内存的代码了~ 还是那句话,OS还是相当专业的。当然状态机的思想也是种改进系统软件性能的好方法,特别是对于单片机系统而言,就是如此。我以前写过车载系统的代码,对于拨号那部分就采用了状态机,这样就免去了系统的很多等待时间,消除并解决了系统的处理盲点。
农民讲习所
发表于 2007-12-6 15:12
晕,MCU上还内存回收,找死啊
内存泄漏知道不?产品上是坚决禁止使用,何况MCU。<br />WINDOW3.1是最典型的嵌入式黑奔模范,巨大的嵌入式黑奔。<br />你掉进OS的水潭里了。<br /><br />俺再次强调,两者处理的策略不同,你不能用OS的话去解释嵌入式黑奔,反过来同样不能用嵌入式黑奔解释OS。至于表现在产品的系统上,和OS不OS没直接关系,只要你结构设计良好。
农民讲习所
发表于 2007-12-6 15:13
你也不会嵌入式黑奔,只会单线程设计MCU
根据:“我以前写过车载系统的代码,对于拨号那部分就采用了状态机,这样就免去了系统的很多等待时间,消除并解决了系统的处理盲点。”
dld2
发表于 2007-12-6 15:20
俺门那里的规矩是,禁止malloc
如果想动态申请释放,比如通讯协议栈的数据缓冲,自己管理先。
圆圈
发表于 2007-12-6 15:47
我说的没错的
你们说的嵌入式黑奔难道不就是单线程状态机+中断+基准ticks吗? 同样的模式下应用深度的差别不会带来根本差异的!
dld2
发表于 2007-12-6 15:54
316
是多任务,不是单任务。俺不习惯说线程。<br />多任务+按需自主管理调度。
athlon64fx
发表于 2007-12-6 16:04
不排斥OS,也不是所有的情况下OS都比裸奔好..
如果裸奔是徒步,那么OS就好比驾车..而车也要分自行车,摩托车,汽车,火车等..<br />个人以为这个比喻比较恰当。
athlon64fx
发表于 2007-12-6 16:05
回错贴子了。。。
圆圈
发表于 2007-12-6 16:07
你说将部分任务处理防到中断内?
这个方法确实提高了实时性,但系统其他线程其他中断不是都被影响了吗?而且你这样的只能在简单点的系统上使用,复杂的,需处理大量数据或实时处理要求高且多的场合,你的系统复杂性就大大增加了~~ 当然你将部分任务处理放到中断里确实也是个办法,比如led点灯程序 波形输出程序等都可以放入定时中断内处理~~ 但这种模式肯定有局限,毕竟中断处理一向不推荐占用太多时间。
农民讲习所
发表于 2007-12-6 16:13
你要分清楚,哪个任务是哪个实时处理层的
这点一定要,入门必考!
machunshui
发表于 2007-12-6 19:28
圆圈讲的有道理
圆圈讲的有道理
forthlab
发表于 2007-12-6 19:40
建议圆圈开个新贴,
这个帖子太长了,看起来不方便.<br />很想多了解MCU上的OS.