搜索
bottom↓
回复: 40

ucos与rtx kernel初比较

[复制链接]

出0入0汤圆

发表于 2012-6-27 12:40:12 | 显示全部楼层 |阅读模式
UCOS2是2.83
RTX是4.53

STM32F101xx
功能差不多,使用情况也差不多。
两个操作系统下任务数一样,基本是从UCOS下移植到RTX下的。
语法也差不多。
RTX下没有用时间片。
移植很方便。
最大的区别是,占用内存的大大不同,RTX完胜。
运行状况也差不多,还在测试中。
看来,RTX在小系统中,优势明显。
主要是任务堆栈方面,占用空间相差太远了。
RTX应该是协作式的。

阿莫论坛20周年了!感谢大家的支持与爱护!!

该献的血还是要献的。你不献他不献。难道让我去献? --- 出自坛友:lovejp1981

出0入0汤圆

发表于 2012-6-27 12:54:15 | 显示全部楼层
RTX是抢占式的,

出0入0汤圆

发表于 2012-6-27 13:03:10 | 显示全部楼层
RTX是抢占的,简单好用

出0入0汤圆

发表于 2012-6-27 13:04:15 | 显示全部楼层
你说的是Keil家的RL-ARM吧,RTX是谁给起的名字???

出0入0汤圆

发表于 2012-6-27 13:06:03 | 显示全部楼层
RTT  RTX  ???

出0入0汤圆

发表于 2012-6-27 13:12:12 | 显示全部楼层
marx 发表于 2012-6-27 13:04
你说的是Keil家的RL-ARM吧,RTX是谁给起的名字???

以前用51的时候,KEIL就带着一个RTX-???的核,到了ARM,仍然有.....

出0入0汤圆

发表于 2012-6-27 13:53:39 | 显示全部楼层
    keil的RTX,有时间片(利用SYTICK),有线程轮换(相同优先级线程),有信号量、互斥量、定时器、队列、事件。线程是抢占式的。
    楼主根本就没搞清楚,要多学习啊。

出0入0汤圆

发表于 2012-6-27 14:05:27 | 显示全部楼层
RTX 够用了,
创建线程的时候没有时间片参数,自己可以在后台做一个伪的,精度不差多少的 。。。

出0入0汤圆

 楼主| 发表于 2012-6-27 14:10:57 | 显示全部楼层
RTX主要好处在,加多任务时,堆栈消耗极少,可以加很多任务

出0入0汤圆

发表于 2012-6-27 14:17:02 | 显示全部楼层
本帖最后由 wuzhujian 于 2012-6-27 14:18 编辑

    我修改的RTX最小系统,代码量2.4K,内存最小要求:200字节。
    支持动态内存分配,main()函数是主线程,完成一次线程切换所用时间,在72Mhz的STM32上,0.74us。比ucos,不知要快多少倍。

出0入0汤圆

 楼主| 发表于 2012-6-27 14:53:32 | 显示全部楼层
原来用UCOS就是受限于堆栈空间,换成RTX极爽。
UCOS下,一开任务,就要开好多栈空间,烦死人了。
现在RTX跟前后台的方式多不了多少空间。
用前后台时,也学UCOS做了个伪的信箱队列。

说协作式,主要是指不用每任务分配栈堆。

出0入0汤圆

 楼主| 发表于 2012-6-27 14:54:26 | 显示全部楼层
相同的功能,前后台,UCOS,RTX都做了出来了。

准备测试其稳定性。

出0入0汤圆

发表于 2012-6-28 21:31:33 | 显示全部楼层
等待楼主的测试结果.

出0入0汤圆

发表于 2012-9-14 15:57:08 | 显示全部楼层
进入单片机好多年,一直裸奔,没进入OS,准备进入...

出0入0汤圆

发表于 2012-9-15 14:52:06 | 显示全部楼层
wu老师对RTX研究如此之深,期待您写写基础的教程,帮助大家入门,谢谢!研究这个实在是不多!

出0入0汤圆

发表于 2012-9-15 22:40:19 | 显示全部楼层
rtx抢占式,在设计任务优先级的时候要多花点心思,不然会出大麻烦,呵呵

出0入0汤圆

发表于 2012-9-15 23:08:56 | 显示全部楼层
Achin 发表于 2012-9-15 22:40
rtx抢占式,在设计任务优先级的时候要多花点心思,不然会出大麻烦,呵呵

有什么麻烦?

出0入0汤圆

发表于 2012-9-15 23:26:38 | 显示全部楼层
liurangzhou 发表于 2012-9-15 23:08
有什么麻烦?

如果优先级高的任务没设计好,会一直占用CPU,优先级低的任务可能会得不到运行。

出0入0汤圆

发表于 2012-9-16 12:42:02 | 显示全部楼层
Achin 发表于 2012-9-15 23:26
如果优先级高的任务没设计好,会一直占用CPU,优先级低的任务可能会得不到运行。 ...

优先级反转,任何RTOS都存在这个问题

出0入0汤圆

发表于 2012-9-16 12:52:45 | 显示全部楼层
RTX是搶占的?

出0入0汤圆

发表于 2012-9-16 14:02:43 | 显示全部楼层
为啥不试试 FreeRTOS

出0入0汤圆

发表于 2012-9-21 09:56:41 | 显示全部楼层

MARK,留以后看是否可用上

出0入0汤圆

发表于 2012-9-21 10:20:43 | 显示全部楼层
请问内存消耗少的原因是什么、?
为什么不需要分配任务堆栈??系统是怎么处理的。

出0入0汤圆

发表于 2012-9-21 10:25:49 | 显示全部楼层
wuzhujian 发表于 2012-6-27 14:17
我修改的RTX最小系统,代码量2.4K,内存最小要求:200字节。
    支持动态内存分配,main()函数是主线程 ...

高手!

出0入0汤圆

发表于 2012-9-21 21:27:03 | 显示全部楼层
等…… 等人把ucprobe移植到rtx上……

出0入0汤圆

发表于 2012-9-21 21:41:06 | 显示全部楼层

出0入0汤圆

发表于 2012-9-22 11:29:22 | 显示全部楼层
xuexi

出0入0汤圆

发表于 2013-5-31 16:01:32 | 显示全部楼层
听说这个是不错,没有研究过

出0入0汤圆

发表于 2014-3-30 21:22:50 | 显示全部楼层
请问内存消耗少的原因是什么、?
为什么不需要分配任务堆栈??系统是怎么处理的。

出0入0汤圆

发表于 2014-3-30 22:48:15 | 显示全部楼层
本帖最后由 wuzhujian 于 2014-3-30 22:54 编辑

我想,应该是:
1> ucos没有用到Cortex-M的双堆栈,也就是说,没有用到psp,所有的任务,用的都是MSP。这样一来,每个线程的堆栈都必须有足够的深度,才能满足中断嵌套的需要,即使这个线程只是个while(1),也是需要很大的线程堆栈的。因为,如果是刚好在某个分配线程堆栈少的线程运行时,进入到多个中断的嵌套处理,多次保护现场环境的结果是,该线程的堆栈溢出了。
2> rtx是使用了Cortex-M的双堆栈的,线程堆栈的大小,只要考虑本线程就行了。发生中断时,中断处理将使用MSP指向的系统堆栈空间,与线程堆栈无关。因此,最小的线程while(1),其线程堆栈大小,只需要能保存R0~R12R14,R15,以及PSR就可以了(R13,即线程堆栈指针,是保存线程控制块中的,不需要保存的线程堆栈中),最少线程堆栈大小为:(15+1)*4 = 64字节。

出0入0汤圆

 楼主| 发表于 2014-4-1 09:14:28 | 显示全部楼层
高手就是高手,偶只看到现象,高手看到的是本质

出0入0汤圆

发表于 2014-4-1 10:29:32 | 显示全部楼层
好深奥,学习中……

出0入0汤圆

发表于 2014-4-25 17:19:42 | 显示全部楼层
wuzhujian 发表于 2014-3-30 22:48
我想,应该是:
1> ucos没有用到Cortex-M的双堆栈,也就是说,没有用到psp,所有的任务,用的都是MSP。这样 ...

我没有用过RTX,之前用uCOSii-2.52做过3D打印机:
1. uCOSii可以利用CortexM的双堆栈特性,在移植的时候对调度算法稍加改动既可,因为中断内会自动切换到MSP,所以只要在切换回Task时切换成PSP既可,这个具体是读写一个寄存器就可以控制了。
2. 利用咬尾中断机制,中断嵌套执行的整个过程中,PUSH和POP只执行了一次,这个机制也使得一些原本不能在中断内调用的内核API变得可以在中断内调用。
3. uCOSii的任务堆栈是一个预先定义的数组,这个可能是很多人觉得不方便的地方。
    个人认为,这个是uCOSii的一个保守特点,所有数据空间都在编译的时候决定好,可以避免动态管理内存造成的麻烦。
    关于动态内存分配,我没有使用uCOSii自带的内存管理机制,而是在malloc()之前进入临界区,之后退出临界区,另外,分配的内存大小总是以32字节的倍数。(使用了MicroLib)
不过uCOSii也比较纠结,商业用途还要收费,最近跟朋友一个筹划开源项目,正纠结于此,RTX据说也是商业用收费的吧?

出0入0汤圆

发表于 2014-4-25 17:37:34 | 显示全部楼层
楼上英明,一直祼奔中,只是自己做几个时间片调用几个自定义的任务。。。

出0入0汤圆

发表于 2014-6-30 12:44:04 | 显示全部楼层
wuzhujian 发表于 2012-6-27 14:17
我修改的RTX最小系统,代码量2.4K,内存最小要求:200字节。
    支持动态内存分配,main()函数是主线程 ...

膜拜wu大牛啊,我这段时间学习,也在尝试修改内核部分,有些不尽人意的地方我都尽量改过来,现在才到4.2k大小,和你的相比差距实在不小啊

还有我之前看到你在main函数也能作为线程,这一点我还没能做到啊,我打算去看看cmsis-rtx是怎么做到了,那里好像是可以的

出0入0汤圆

发表于 2014-6-30 15:19:46 | 显示全部楼层
myxiaonia 发表于 2014-6-30 12:44
膜拜wu大牛啊,我这段时间学习,也在尝试修改内核部分,有些不尽人意的地方我都尽量改过来,现在才到4.2k ...

去启动文件里面找_main。

出0入0汤圆

发表于 2014-6-30 15:30:22 | 显示全部楼层
error_dan 发表于 2014-6-30 15:19
去启动文件里面找_main。

找到_main怎么说,我这个代码大小就是通过map文件得出的

还有cmsis-rtx确实能够在main()主函数中进行任务创建,本身就可以作为一个任务来调度呢,我回头好好研究下

出0入0汤圆

发表于 2014-6-30 17:34:21 | 显示全部楼层
myxiaonia 发表于 2014-6-30 15:30
找到_main怎么说,我这个代码大小就是通过map文件得出的

还有cmsis-rtx确实能够在main()主函数中进行 ...

启动过程中,这个_main插入到mian前面在用户程序跑起来之前初始化很多东西,RTX也在这里把系统准备好,新版的提供了一个开关自己去把内核跑起来,否则他就自己跑了,并且创建一个mian线程作为用户程序的入口。
mian线程是普通线程,干嘛不都行,退出都可以。。。

出0入0汤圆

发表于 2014-8-19 16:43:49 | 显示全部楼层
wuzhujian 发表于 2014-3-30 22:48
我想,应该是:
1> ucos没有用到Cortex-M的双堆栈,也就是说,没有用到psp,所有的任务,用的都是MSP。这样 ...

请教下,我这边用CMSIS RTOS RTX版本 4.74 建的工程,如果不勾选microlib,线程就一直卡在wait_MUT这里,勾选了就可以正常调度

出0入0汤圆

发表于 2018-2-12 22:34:17 | 显示全部楼层
wuzhujian 发表于 2012-6-27 14:17
我修改的RTX最小系统,代码量2.4K,内存最小要求:200字节。
    支持动态内存分配,main()函数是主线程 ...

wu大哥,能否分享下你修改的RTX源码?谢谢!

出0入0汤圆

发表于 2020-9-14 18:52:44 | 显示全部楼层
rtx只能用keil开发哟
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-9-3 06:28

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表