二、μCOS-II与RT-Thread API对应表:(左侧μCOS-Ⅱ,右侧RT-Thread) 任务创建与删除: OSInit(&err);初始化μC/OS-Ⅱ,对这个函数的调用必须在调用OSStart()函数之前。 | 分动态和静态方法, 动态方法: rt_thread_create(); rt_thread_delete(); 静态方法: rt_thread_init(); rt_thread_detach(); | OSTaskCreate(); OSTaskDel(); | | |
任务挂起与恢复
操作系统进入/退出“临界区”的功能代码:
ENTER ISR
任务优先级: μC/OS-Ⅱ和RT-Thread都是值越小优先级越高,但优先级数不同,μC/OS-Ⅱ支持最多64级,RT-Thread支持最多256级。
任务延时: OSTimeDly();延时ticks | rt_thread_delay ();延时ticks | OSTimeDlyHMSM ();延时(时 分 秒 毫秒) | |
事件: μC/OS-Ⅱ
RT-Thread 功能 | | | | | | | 静态方法: rt_sem_init(); 动态方法: rt_sem_create(); | 静态方法: rt_mutex_init (); 动态方法: rt_mutex_create (); | 静态方法: rt_event_init (); 动态方法: rt_event_create (); | 静态方法: rt_mb_init (); 动态方法: rt_mb_create (); | 静态方法: rt_mq_init (); 动态方法: rt_mq_create (); | | 静态方法: rt_sem_detach(); 动态方法: rt_sem_delete(); | 静态方法: rt_mutex_detach (); 动态方法: rt_mutex_delete (); | 静态方法: rt_event_detach (); 动态方法: rt_event_delete (); | 静态方法: rt_mb_detach (); 动态方法: rt_mb_delete (); | 静态方法: rt_mq_detach (); 动态方法: rt_mq_delete (); | | | | | | | | | | | | rt_mq_send(); rt_mq_urgent(); | | | | | | | 查询事件状态 | | | | | | 其他 | rt_sem_control(); 执行cmd,目前函数里面只有一个RT_IPC_CMD_RESET实现 | rt_mutex_control(); 目前函数直接返回err: return -RT_ERROR; | rt_event_control(); 执行cmd,目前函数里面只有一个RT_IPC_CMD_RESET实现 | rt_mb_control(); 执行cmd,目前函数里面只有一个RT_IPC_CMD_RESET实现 | rt_mq_control(); 执行cmd,目前函数里面只有一个RT_IPC_CMD_RESET实现 |
整个移植过程就这样,最后谈下RT-Thread。 接触RT-Thread之后,个人还是蛮喜欢的,入门很快,编码风格很好。它是一个分层的操作系统,有丰富的系统组件,例如LwIP轻型TCP/IP协议栈、文件系统等,使用方便。
开发过程中对RT-Thread与μCOS最大的不同体验一个是在RT-Thread中的静态和动态方法的区分,另一个是内存安全性方面。以前项目跑在μCOS上很多double free的问题,μCOS不做任何警告,完全看不出来有什么问题,只是时间久了,系统复位;移植到RT-Thread上之后double free系统会assert,一次性解决了好些bug。
|