|
发表于 2022-9-4 19:18:53
|
显示全部楼层
我和你一样的情况,最开始看安富莱给threadx捧上了天,我尝试使用threadx,可能是我自己移植的原因,一直不够稳定,运行一段时间就死机。果断pass掉了。
然后切换到ucosiii,这个系统挺稳定的,但是我感觉函数参数过多,过于复杂,队列只只能传递指针,看着不爽,也给ucos pass掉了,现在使用 freertos
打个比方,下面是ucos创建任务的函数,你看,搞一大堆参数,一看就烦。
OSTaskCreate((OS_TCB *)&ServoTaskTcb,
(CPU_CHAR *)"ServoTask",
(OS_TASK_PTR ) ServoTask,
(void *)0,
(OS_PRIO )ServoTaskPrio,
(CPU_STK *)ServoTaskStack,
(CPU_STK_SIZE )ServoTaskStackSize / 10,
(CPU_STK_SIZE )ServoTaskStackSize,
(OS_MSG_QTY )0,
(OS_TICK )0,
(void *)0,
(OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
(OS_ERR *)&err);
再看看 freertos的 简简单单,用起来非常清爽。
xTaskCreate( vMainTask, // 任务函数
"vMainTask", // 任务名
512, // 任务栈大小,单位word,也就是4字节
NULL, // 任务参数
30, // 任务优先级
&xHandleMain); // 任务句柄
在看看ucos的延时函数,居然要传递3个参数,兼职神经病。
OSTimeDly(10, OS_OPT_TIME_DLY, &err);
再看看 freertos的,一个参数搞定
vTaskDelay(10);
ucos3好像没有二值信号量,我的程序大量使用 二值信号量,(意思是我要多次释放信号量,但是只能获取一次),freertos 就可以,ucos就不行
这一点请硬汉指正,我不是很确定。 |
|