打印

为什么要学习ucos

[复制链接]
楼主: crazy2012
手机看帖
扫描二维码
随时随地手机跟帖
21
dong_abc| | 2013-10-5 20:55 | 只看该作者 回帖奖励 |倒序浏览
对时间要求苛刻的系统,前后台结构就很难应付了。

使用特权

评论回复
22
chenbb8| | 2013-10-5 21:26 | 只看该作者
dong_abc 发表于 2013-10-5 20:53
再出道题,来试试。
John Lee 17:38:32
系统中有2个事件:E1、E2,和一个共享设备。

ucos中ISR平面优先级都比任务平面高,先不用管,通过信号量和对应任务同步和通讯即可。
E1的死线为10ms,比E2的最短处理时间都要长,所以E1的优先级必须比E2高。E2最短处理时间
20ms加上E1的最短处理时间5ms,依然不会超过50ms的限制。

使用互斥体管理共享设备,独占共享设备的时间比较短,只需要0.5ms,当E2占用共享设备的时候,
如果E1的ISR发送信号量 激活任务E1,当E1申请共享设备的时候,引发优先级继承 优先处理E2,
也就是说E1申请共享设备的等待时间 最多0.5ms,应该不会出现问题。

裸机环境,假设所用调度器没有优先级概念,类似于时间触发模式的调度器,系统时标2ms
并只有E1 E2两个任务,它们通过状态机切碎。如果E1 E2切开的程序段都是等大的话,那么最恶劣的情况下
E1 E2同时被触发,那么E1将不能在10ms内完成。
设备共享倒是好说,只要用一个标志位来管理就好了,任务之间优先级是一样的,没有所谓的优先级反转的问题。

如果能将访问设备的任务分离出来称为独立任务就更好了,这样任务之间的耦合度又可以进一步降低。

使用特权

评论回复
评分
参与人数 1威望 +6 收起 理由
dong_abc + 6 赞一个,OS玩得比我溜,理解得很透彻。.
23
i55| | 2013-10-5 22:44 | 只看该作者
dong_abc 发表于 2013-10-5 20:55
对时间要求苛刻的系统,前后台结构就很难应付了。

只会点灯的撸主,前后台比RTOS效率高得多,至少不用保存context

使用特权

评论回复
评论
crazy2012 2013-10-5 23:16 回复TA
看来单片机上RTOS也不是必须的哦 
24
chenbb8| | 2013-10-5 23:08 | 只看该作者
dong_abc 发表于 2013-10-5 20:53
再出道题,来试试。
John Lee 17:38:32
系统中有2个事件:E1、E2,和一个共享设备。

如果E1 E2的处理都是关键性的任务,不允许有处理遗漏或者无法在规定时间内处理完毕的话。
而因为E1的执行时间短(快捷性)、实时要求高(紧迫性),那么需要设置E1的处理任务优先级比E2高。
但是,如果E1频繁发生的话,可能会导致E2无法在规定时间内处理完毕或者遗漏处理,
我用RTOS是无法解决这个问题,还是两个单片机好,哈哈

使用特权

评论回复
评论
dong_abc 2013-10-5 23:25 回复TA
楼上那个系统中断紧急执行时间0.1ms非常短,E1频繁中断也没影响。进的快,出得也快。 
dong_abc 2013-10-5 23:18 回复TA
如果E1优先级高,还频繁发生的话,那E2就得另谋生路了。 
25
dong_abc| | 2013-10-5 23:16 | 只看该作者
chenbb8 发表于 2013-10-5 23:08
如果E1 E2的处理都是关键性的任务,不允许有处理遗漏或者无法在规定时间内处理完毕的话。
而因为E1的执行 ...

就上面那种情况而言,E2是漏不了的。 有些非常讲究实时性的系统,设计不当就会掉到陷阱了。

使用特权

评论回复
26
chenbb8| | 2013-10-5 23:19 | 只看该作者
dong_abc 发表于 2013-10-5 23:16
就上面那种情况而言,E2是漏不了的。 有些非常讲究实时性的系统,设计不当就会掉到陷阱了。 ...

事件的数据保存起来的确是不会遗漏处理,
但是超时了~~

使用特权

评论回复
27
dong_abc| | 2013-10-5 23:29 | 只看该作者
i55 发表于 2013-10-5 22:44
只会点灯的撸主,前后台比RTOS效率高得多,至少不用保存context

现在点灯,说不定以后点火箭呢。

使用特权

评论回复
28
dong_abc| | 2013-10-5 23:36 | 只看该作者
chenbb8 发表于 2013-10-5 23:19
事件的数据保存起来的确是不会遗漏处理,
但是超时了~~

这个看应用环境,如果确实是有大量的数据就不会提出这样的时间要求。如果不允许超时,可以让DMA来处理。

使用特权

评论回复
29
ren0zhe| | 2013-10-6 11:58 | 只看该作者
再搞搞以太网通讯的,看看带OS的跟裸机的有啥区别。你的智能手机的功能试下写写不带OS的代码

使用特权

评论回复
30
crazy2012|  楼主 | 2013-10-6 15:42 | 只看该作者
ren0zhe 发表于 2013-10-6 11:58
再搞搞以太网通讯的,看看带OS的跟裸机的有啥区别。你的智能手机的功能试下写写不带OS的代码 ...

以太网通信的不是照样可以裸机做吗。看了几个开源的以太网协议栈都是可以裸机的哦。

使用特权

评论回复
31
elec921| | 2013-10-6 17:17 | 只看该作者
穿衣服麻烦,但是穿好了很有面子。

使用特权

评论回复
32
ren0zhe| | 2013-10-6 17:47 | 只看该作者
crazy2012 发表于 2013-10-6 15:42
以太网通信的不是照样可以裸机做吗。看了几个开源的以太网协议栈都是可以裸机的哦。 ...

可以是可以,但是有了OS帮你处理一些事情,你做起来不感觉方便一些?做的东西更稳定一些?

使用特权

评论回复
33
xiaoyuan_ly| | 2013-10-6 20:54 | 只看该作者
    其实,用操作系统就是为了资源共享和更加高效的使用资源。资源共享,比如和你切身利益直接相关的,就是你编写的程序可以一直被使用而越来越强壮;高效的使用资源,比如处理器,在某个特定的项目上,你也许可以考虑的比使用操作系统更加的高效,但你能保证一直都能不使用操作系统高效吗?相反,你为了这个高效所花费的时间、精力代价会随着一个项目的结束而结束,当新的项目开始时,又要从新开始。人的精力总是有限的,总希望以前使用的方式和方法能够被重复的使用、利用,当然也包括你所掌握的各种软硬资源;----这才是根本之道。
    所以说,你如果只是玩玩,那有没有操作系统无所谓;掌握操作系统,是让你可以站在巨人的肩膀上去关注自己需要解决的项目问题,而不是纠结在基础框架上。当然,使用操作系统就需要你去学习操作系统,学习一系列的“巨人们的规则习惯”,这样你才有掌握一切的可能。学好、掌握一个操作系统不容易,如果有可能,还是自己去写一个操作系统。我们不求名利,只求对自己实用也可,这也许也是裸跑和裸奔的意义所在。

使用特权

评论回复
评论
happyming0809 2013-10-11 10:32 回复TA
好像说的很好 
crazy2012 2013-10-6 21:40 回复TA
这一段话理解了 
34
xiaoyuan_ly| | 2013-10-6 21:12 | 只看该作者
既然已经说开了,又想到了点,就继续说说我的理解,继续再说下吧;那个编译器工具已经帮了我们很大的忙,特别是C编译器,如果说C编译器是静态的去高效的资源共享和使用,那么操作系统就是实时的高效资源共享和使用;我不知道你理解不理解我这样的说法。
    在C编译器阶段,链接特性和全局变量、局部变量使用就是一个很好的证明。而操作系统,它除了对这些已存在的硬件资源高效的共享和使用外,它还创造为我们可以更好工作的软件逻辑资源。这里说的是创造,我的理解是:操作系统提供了软件资源的创造使用,让我们可以更加好的在自己的“无限”逻辑中使用,而尽量少受到物理资源的限制,即使有这样的限制,也由编译器和操作系统来掌控,而对你表现的就是“无限逻辑资源”,从而让你尽情的“无限制”使用。

使用特权

评论回复
35
m564522634| | 2013-10-7 16:17 | 只看该作者
我正在跑,个人感觉uc/os跑好了不可能不想去写前后台的程序去了。前后台程序好像简单但是他的逻辑思维有要比uc/os难很多。多任务下的任务切换是靠自己做的中断来的,但是在实时性的把握上前后台就比较难控制了。主要是每个任务你都要做时间标志到了这个时间你就要去发生一次中断看起来好像简单。但你任务多了的时候了你每个任务的运行速度你很难把握了。而uc/os了他自己带了一个任务调度器,每个任务什么时候执行什么时候这个任务处于等待状态那么调度器就可以去执行其他的任务去了,大大减少了CPU的空转。在单个时间短内uc/os运行的任务时间要比前后台运行的多。最重要的一点就是任务切换是uc/os自己完成你可以非常容易配置这个任务一段时间内执行多少次,大大减少了你自己在逻辑上的考虑时间

使用特权

评论回复
评论
dong_abc 2013-10-7 17:40 回复TA
也很难保证程序结构一致性,任务间要同步、要通信就会无形中打乱了程序段。 
评分
参与人数 2威望 +7 收起 理由
xiaoyuan_ly + 1 "而uc/os了他自己带了一个任务调度器,每.
dong_abc + 6 前后台要做好多任务,势必会导致逻辑紊乱。.
36
NE5532| | 2013-10-7 20:38 | 只看该作者
m564522634 发表于 2013-10-7 16:17
我正在跑,个人感觉uc/os跑好了不可能不想去写前后台的程序去了。前后台程序好像简单但是他的逻辑思维有要 ...

“实时操作系统”这个名字本来就是误导人的,“实时”的含义是可以同时处理多个任务,但是每个任务都不能太复杂,MCU的总处理能力一定,跑一个操作系统肯定要消费掉一些处理能力,剩下的自然就少了。

定时调度?要求每10uS响应任务1次,你用OS实现看看呢?

使用特权

评论回复
评论
shizaigaole 2013-10-8 08:55 回复TA
NE5532 不懂实时操作系统的概念 
37
huangqi412| | 2013-10-7 21:59 | 只看该作者
linfeng24 发表于 2013-10-3 23:33
因为实时操作系统的执行效率和稳定性都比裸机跑高

。。。
是人可以减少省力气。。

使用特权

评论回复
38
i55| | 2013-10-7 23:14 | 只看该作者
NE5532 发表于 2013-10-7 20:38
“实时操作系统”这个名字本来就是误导人的,“实时”的含义是可以同时处理多个任务,但是每个任务都不能 ...

"每10uS响应任务1次"——用神马MCU实现什么样的任务?讲给我听听让我也乐一乐。

使用特权

评论回复
39
crazy2012|  楼主 | 2013-10-7 23:34 | 只看该作者
i55 发表于 2013-10-7 23:14
"每10uS响应任务1次"——用神马MCU实现什么样的任务?讲给我听听让我也乐一乐。 ...

我经常会做100us的任务。

使用特权

评论回复
40
i55| | 2013-10-7 23:41 | 只看该作者
crazy2012 发表于 2013-10-7 23:34
我经常会做100us的任务。

100us的任务算个j8,5年前我开始学ucos的时候用72M的STM32跑33us的systick毫无压力,更何况任务切换跟systick完全没关系。你要是用不到2块钱的8位机我肯定建议你远离ucos。脱离具体应用场合的一切假设都是耍流氓。

使用特权

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

本版积分规则