打印

**lz说湖南人好斗,

[复制链接]
楼主: wxj1952
手机看帖
扫描二维码
随时随地手机跟帖
301
圆圈| | 2007-12-6 14:23 | 只看该作者 回帖奖励 |倒序浏览

农民讲习所

我出道题目吧:
事件一:响应要求5微妙,处理时间30微妙; 优先级0
事件二:响应要求1毫秒,处理时间1毫秒; 优先级1
事件三:响应要求2毫秒,处理时间1毫秒; 优先级2
事件四:响应要求10微妙,处理时间10毫秒;优先级3
事件 5 6 7 8 9..20:响应要求50~100毫秒,处理时间1~50毫秒

使用特权

评论回复
302
dld2| | 2007-12-6 14:28 | 只看该作者

我觉得嵌入式系统上的OS可以这样分

一类是微内核、强实时、抢占调度。用在通信、控制领域。例如vxworks。
另一类是宏内核、准实时、基于优先级和时间片的调度。用在手持终端这样的地方。手持终端一般有杂七杂八的一堆功能,所以这类OS也有杂七杂八的一堆层次和组件。例如wince。
嵌入式linux介于二者之间,又想向上靠,又想向下靠。

象1952用的那个OS其实是个玩具。uCos也有玩具的嫌疑。

使用特权

评论回复
303
圆圈| | 2007-12-6 14:29 | 只看该作者

21ICBBS提醒您注意:发言不成功!!!,至少主题不应为空

wince palm os主要是人机界面好,而且类windows编程风格,因此推广的人很多,毕竟win上的程序员要比嵌入式领域的程序员便宜...
VXWORK是实时系统,但PDA HANDPHONE对实时要求并不高,所以其实嵌入式linux等都可以应付这种应用。
但对于军事及数控机床这样的行业,用linux palm os wince肯定不行,因为他们的实时性要求可能满足不了实际的需求。 因为linux是基于时间片为基础来调度的。并不具备实时性,同理于其他~~~

使用特权

评论回复
304
圆圈| | 2007-12-6 14:35 | 只看该作者

UCOS

UCOS是实时系统,但比较简单,而且缺少很多协议(文件系统 TCP/IP USB MMU...),所以一般系统上使用的话肯定够用,但系统大了复杂了,并不一定能胜任。 选择什么操作系统,关键还是要看应用场合的~  选择操作系统价格 性能 资源耗费 服务 系统持续性等都是考虑因素。 而性能内容更多,具体为任务管理 内存管理 信号量 消息 队列 邮箱 第三方协议,这些是最基本的,正规严格的操作系统管理的内容更多,但关键点还是任务和内存。(没有整理过思路,随性说,可能有遗漏)

使用特权

评论回复
305
农民讲习所| | 2007-12-6 14:38 | 只看该作者

你说的OS不错,那么嵌入式黑奔和嵌入OS的比较差不多也这样

另外你出的题不对,俺说过么嵌入式黑奔是串行化的三个等级处理,不是优先级别处理。两者策略和理论出发点是不同的。

51中的中断等级和中断优先级别是大不相同的。

如果你举个产品控制要求,俺倒是觉得合适,黑奔做不到,OS一定也做不到。

使用特权

评论回复
306
农民讲习所| | 2007-12-6 14:40 | 只看该作者

俺的培训教材里面都有,上面这些你可以看看俺是怎么处理

使用特权

评论回复
307
农民讲习所| | 2007-12-6 14:43 | 只看该作者

拿内存管理这个经典来说

做产品只需要在初始化阶段实现动态内存分配,不需要在运行过程中分配,即使在运行中有这么要求,通常也会在初始化阶段一次性分配完毕。这就可以看出嵌入式裸奔和嵌入式OS对产品态度上的巨大差别。

使用特权

评论回复
308
圆圈| | 2007-12-6 14:50 | 只看该作者

我说过了,某种程度上说,不一样就是不一样

如果你的嵌入式裸奔能写到线程调度,那我出的题目就很容易解决了。毕竟代码都是人写的,你要写个嵌入式多任务调度的程序代码,那我没话说,但问题是有多少人又精力能力去做. 项目的时间进度你总还是要考虑的是吧..  但如果你只是简单的单线程状态机化,我告诉你,那个问题很难处理好! 而且系统以后增加什么任务,将导致系统复杂度大大增加,而且可能还需要重新分析划分系统状态。

其实我一开始就直接说明了两者根本区别:
单线程状态机无论怎么做,都需要在退出某种状态后,方有机会去处理事件。而多线程,在事件发生后,系统就立刻进行线程调度以决定是否对该该事件进行处理。 两者差别在于实时性。 你那样的才真正是弱实时,因为你不允许在执行完当前状态前去处理事件,而这个时间的花费是不确定的。这就是两者根本区别.

使用特权

评论回复
309
圆圈| | 2007-12-6 14:57 | 只看该作者

310

内存管理没这么简单的~ 好的内存管理可实现内存碎片整理回收,而且还有越界保护功能,同时还能查询内存使用状态来检测系统内存是否存在泄漏... 更不要说一些具有MMU功能的内存管理,可以用硬盘或者U盘来运行大于内存的代码了~   还是那句话,OS还是相当专业的。当然状态机的思想也是种改进系统软件性能的好方法,特别是对于单片机系统而言,就是如此。我以前写过车载系统的代码,对于拨号那部分就采用了状态机,这样就免去了系统的很多等待时间,消除并解决了系统的处理盲点。

使用特权

评论回复
310
农民讲习所| | 2007-12-6 15:12 | 只看该作者

晕,MCU上还内存回收,找死啊

内存泄漏知道不?产品上是坚决禁止使用,何况MCU。
WINDOW3.1是最典型的嵌入式黑奔模范,巨大的嵌入式黑奔。
你掉进OS的水潭里了。

俺再次强调,两者处理的策略不同,你不能用OS的话去解释嵌入式黑奔,反过来同样不能用嵌入式黑奔解释OS。至于表现在产品的系统上,和OS不OS没直接关系,只要你结构设计良好。

使用特权

评论回复
311
农民讲习所| | 2007-12-6 15:13 | 只看该作者

你也不会嵌入式黑奔,只会单线程设计MCU

根据:“我以前写过车载系统的代码,对于拨号那部分就采用了状态机,这样就免去了系统的很多等待时间,消除并解决了系统的处理盲点。”

使用特权

评论回复
312
dld2| | 2007-12-6 15:20 | 只看该作者

俺门那里的规矩是,禁止malloc

如果想动态申请释放,比如通讯协议栈的数据缓冲,自己管理先。

使用特权

评论回复
313
圆圈| | 2007-12-6 15:47 | 只看该作者

我说的没错的

你们说的嵌入式黑奔难道不就是单线程状态机+中断+基准ticks吗?  同样的模式下应用深度的差别不会带来根本差异的!

使用特权

评论回复
314
dld2| | 2007-12-6 15:54 | 只看该作者

316

是多任务,不是单任务。俺不习惯说线程。
多任务+按需自主管理调度。

使用特权

评论回复
315
athlon64fx| | 2007-12-6 16:04 | 只看该作者

不排斥OS,也不是所有的情况下OS都比裸奔好..

如果裸奔是徒步,那么OS就好比驾车..而车也要分自行车,摩托车,汽车,火车等..
个人以为这个比喻比较恰当。

使用特权

评论回复
316
athlon64fx| | 2007-12-6 16:05 | 只看该作者

回错贴子了。。。

使用特权

评论回复
317
圆圈| | 2007-12-6 16:07 | 只看该作者

你说将部分任务处理防到中断内?

这个方法确实提高了实时性,但系统其他线程其他中断不是都被影响了吗?而且你这样的只能在简单点的系统上使用,复杂的,需处理大量数据或实时处理要求高且多的场合,你的系统复杂性就大大增加了~~   当然你将部分任务处理放到中断里确实也是个办法,比如led点灯程序 波形输出程序等都可以放入定时中断内处理~~  但这种模式肯定有局限,毕竟中断处理一向不推荐占用太多时间。

使用特权

评论回复
318
农民讲习所| | 2007-12-6 16:13 | 只看该作者

你要分清楚,哪个任务是哪个实时处理层的

这点一定要,入门必考!

使用特权

评论回复
319
machunshui| | 2007-12-6 19:28 | 只看该作者

圆圈讲的有道理

圆圈讲的有道理

使用特权

评论回复
320
forthlab| | 2007-12-6 19:40 | 只看该作者

建议圆圈开个新贴,

这个帖子太长了,看起来不方便.
很想多了解MCU上的OS.

使用特权

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

本版积分规则