本帖最后由 神秘狼 于 2020-8-14 12:30 编辑
让基于μC/OS-III开发的应用层无感地迁移到RT-Thread操作系统https://github.com/mysterywolf/RT-Thread-wrapper-of-uCOS-III
详细说明请戳上面的github链接↑,如果喜欢的话请在github上给我一个star,这对我很重要,开源项目的成就感就靠star了!
软件包已经发布(uCOSIII_Wrapper),可以通过ENV工具进行自动配置
1 概述这是一个针对RT-Thread国产操作系统的μCOS-III操作系统兼容层,可以让基于美国Micriμm公司的μCOS-III操作系统的项目快速、无感地迁移到RT-Thread操作系统上。在兼容层的设计、编写上尊重原版μC/OS-III,保证原版μC/OS-III的原汁原味。 支持版本:μC/OS-III 3.00-3.08全部版本 1.1 本兼容层适合于:之前学习过μCOS-III操作系统,意图转向学习RT-Thread国产操作系统。本兼容层可以帮您用已有的μCOS-III编程经验和习惯快速将项目跑起来,日后在应用过程中深入熟悉RT-Thread的API函数,逐步向RT-Thread过度,降低您的学习门槛和时间成本。有了本兼容层,对RT-Thread API以及编程风格的不熟悉再也不是您学习RT-Thread的阻力! 现有任务(线程)模块采用μCOS-III编写,想要用在基于RT-Thread的工程上 老项目需要从μCOS-III操作系统向RT-Thread操作系统迁移 当需要快速基于RT-Thread开发产品,但是工程师之前均采用μC/OS开发,从未用过RT-Thread的开发经验。本兼容层可以帮助让工程师快速基于μC/OS开发经验开发产品,简化软件的重用、缩短微控制器新开发人员的学习过程,并缩短新设备的上市时间。 避免在从μCOS-III迁移到RT-Thread时,由于μCOS-III的编程经验导致的思维定式引发的错误,这种错误一般很难被发现 例如:
- 两个操作系统对于任务/线程挂起、解挂函数的区别。
RT-Thread不支持任务嵌套挂起、解挂
​μCOS-III支持任务嵌套挂起、解挂 - 软件定时器参数的不同
- 任务堆栈的数据类型不同
本兼容层实现了与Micriμm公司专门为其旗下产品μC/OS等开发的专用软件μC/Probe的对接,可以通过该软件以图像化形式查看、调试RT-Thread内核以及μCOS-III兼容层的相关信息
2 使用2.1 迁移步骤- 将uCOS-III_Wrapper文件夹内的所有文件都加入到你的工程中,最好保持原有文件夹的结构。相较于原版μCOS-III增加了os_rtwrap.c文件,负责对RT-Thread和μCOS-III的转换提供支持。
- 浏览一下μC-CPU/cpu.h文件,看一下头文件中的定义是否符合你的CPU,一般不需要改这个文件
- 浏览一下μCOS-III/os.h文件,看一下错误代码,这个错误代码和原版μCOS-III是有一定区别的。
注意: 请勿随意打开注释掉的错误码枚举体成员, 如果用户使用到了这些注释掉的成员,则会在迁移时编译报错,用以提醒用户这些错误代码在兼容层已经不可用。 - 配置os_cfg.h和os_cfg_app.h
每个选项的配置说明和原版μCOS-III一致,若有不同,我已经在注释中有所解释。
原版μCOS-III配置说明可参见:
a)《嵌入式实时操作系统μC/OS-III》北京航空航天大学出版社 宫辉等译 邵贝贝审校
b) Micriμm公司μCOS-III在线文档: https://doc.micrium.com/display/kernel304/uC-OS-III+Features+os_cfg.h - μCOS-III原版定时器回调函数是在定时器线程中调用的,而非在中断中调用,因此要使用μCOS-III兼容层的软件定时器,需要将rtconfig.h中的宏定义RT_USING_TIMER_SOFT置1。
3 接口3.1 没有实现兼容的API(仅2个)虽然RT-Thread没有任务内建消息队列、任务内建信号量、任务内建寄存器机制,但是本兼容层均已实现,可以正常兼容。但由于RT-Thread没有提供相关接口,以下μCOS-III API无法兼容:
void OSTaskChangePrio (OS_TCB *p_tcb, OS_PRIO prio_new, OS_ERR *p_err);
void OSTaskTimeQuantaSet (OS_TCB *p_tcb, OS_TICK time_quanta, OS_ERR *p_err);
3.4 统计任务(OS_StatTask()、os_stat.c) 在μCOS-III中,统计任务是一个系统任务,通过OS_CFG_STAT_TASK_EN宏决定是否开启,可以在系统运行时做一些统计工作。例如统计总的CPU使用率(0.00% - 100.00%)、各任务的CPU使用率(0.00% - 100.00%)以及各任务的堆栈使用量。CPU的利用率用一个0-10000之间的整数表示(对应0.00% - 100.00%)。 但是RT-Thread并没有统计任务,因此需要创建一个任务来兼容原版μCOS-III的统计任务,完成上述功能。该统计任务会在兼容层初始化时自动创建,用户无需干预。用户仅需调用OSStatTaskCPUUsage全局变量即可获取当前的CPU使用率,CPU使用率的计算策略和原版μCOS-III完全一致。 目前统计任务实现的功能: - 计算全局CPU使用率
- 计算每个任务的任务堆栈使用情况(当 OS_CFG_DBG_EN 和 OS_CFG_STAT_TASK_STK_CHK_EN 为1)
注意:一旦开启统计任务,则该优先级强烈建议不要被其他任务使用,统计任务的优先级总是为OS_CFG_PRIO_MAX-2u 。
4 μC/Probe4.1 介绍 μC/Probe 是由Micriμm公司研发的一款基于Windows操作系统的、专门针对Micriμm公司旗下产品(μC/OS-II、μC/OS-III、uC/TCP-IP等)的应用程序。该软件以可视化的模式实时查看目标系统的内部变量,并且在不中断系统正常运行的情况下改变系统内部全局变量。全局变量可以通过刻度指针、数字表、柱状图、虚拟LED等可视化对象想试出来,通过滑块、开关或者按钮等来修改变量值。用户不需要编写任何代码就可以实现这些功能。目前μC/Probe也已经支持对FreeRTOS的调试。 μC/Probe可以通过多种方式与板卡通信,以获取调试信息: - J-Link
- CMSIS-DAP
- 与Keil-MDK编译器联合调试 (硬件在线仿真以及软件仿真两种方式都支持,软件仿真模式下不需要板卡)
- IAR Embedded Workbench plugin for μC/Probe
- Analog Devices CCES 2.6.0 or newer
- Eclipse plugin for μC/Probe
- TCP/IP (需要板载驻留代码支持)
- USB (需要板载驻留代码支持)
- RS-232/串口 (需要板载驻留代码支持)
4.2 使用 本兼容层已经实现与μC/Probe的对接,虽然不能和原版μCOS-III一样将所有内核信息全部显示,但是绝大多数信息以及所有内核关键信息均已实现与μC/Probe的对接。同时用户可以借助本兼容层,实现通过μC/Probe直接显示、调试RT-Thread内核信息和数据。
|