二、μ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();OSStart();真正开始运行多任务。rt_thread_startup(tid);
任务挂起与恢复OSTaskSuspend();rt_thread_suspend(tid);OSTaskResume ();rt_thread_resume (tid);
操作系统进入/退出“临界区”的功能代码:OS_ENTER_CRITICAL();rt_enter_critical ();OS_EXIT_CRITICAL();rt_exit_critical ();
ENTER ISROSIntEnter ();rt_interrupt_enter();OSIntExit ();rt_interrupt_leave();
任务优先级:μC/OS-Ⅱ和RT-Thread都是值越小优先级越高,但优先级数不同,μC/OS-Ⅱ支持最多64级,RT-Thread支持最多256级。
任务延时:OSTimeDly();延时ticksrt_thread_delay ();延时ticksOSTimeDlyHMSM ();延时(时 分 秒 毫秒)
事件:μC/OS-Ⅱ功能信号量互斥信号量事件标志组消息邮箱消息队列建立事件OSSemCreate();OSMutexCreate();OSFlagCreate();OSMboxCreate();OSQCreate();删除事件OSSemDel ();OSMutexDel ();OSFlagDel ();OSMboxDel ();OSQDel ();等待事件OSSemPend();OSMutexPend();OSFlagPend();OSMboxPend();OSQPend();发送事件OSSemPost();OSMutexPost();OSFlagPost();OSMboxPost();OSQPost();无等待获得事件OSSemAccept();OSMutexAccept();OSFlagAccept();OSMboxAccept();OSQAccept();查询事件状态OSSemQuery();OSMutexQuery();OSFlagQuery();OSMboxQuery();OSQQuery();
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_sem_take();rt_mutex_take();rt_event_recv();rt_mb_recv();rt_mq_recv();发送事件rt_sem_release();rt_mutex_release();rt_event_send();rt_mb_send_wait();rt_mq_send();rt_mq_urgent();无等待获得事件rt_sem_trytake();rt_mb_send();查询事件状态其他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。