使用标准库移植freertos和使用cubemx 生成的freertos 试验结果不一致的疑问?
使用标准库移植freertos和使用cubemx 生成的freertos 试验结果不一致的疑问?试验很简单 就是2个任务每个任务里面翻转led并串口打印
下面是标准库移植freertos2个led同时亮灭并同时500ms打印信息试验结果与设想一样
下面是cubemx生成的freertos 2个led同时亮灭 但串口打印这里却是2者间隔500ms打印信息试验结果与设想却不一样 除非把2个任务优先级更改为不一样就正常了
刚学习freertos望解答 感谢@硬汉大佬
看这个看不出太多信息,上源码 本帖最后由 dfsfjwfmlwsf 于 2022-10-24 14:44 编辑
庄永 发表于 2022-10-24 00:54
看这个看不出太多信息,上源码
大佬 有空帮忙看一下感谢{:33:}
osdely是不是阻塞了啊,两个任务一个完成另一个才动 baobao5 发表于 2022-10-24 14:30
osdely是不是阻塞了啊,两个任务一个完成另一个才动
osStatus osDelay (uint32_t millisec)
{
#if INCLUDE_vTaskDelay
TickType_t ticks = millisec / portTICK_PERIOD_MS;
vTaskDelay(ticks ? ticks : 1); /* Minimum delay = 1 tick */
return osOK;
#else
(void) millisec;
return osErrorResource;
#endif
}
osDelay 我看也是调用的vTaskDelay 初学者没有想明白 好久没用过freertos了,你把你那个标准库的两个任务的优先级都改成0试一下是不是和cube生成的一样的效果。刚刚翻了一下手册,freertos的空闲任务优先级为0,cube使用的cmsis封装的任务优先级osPriorityNormal也是0,这样弄的话系统中所有的任务的优先级都是0,此时freertos采用时间片轮询调度算法,不知道是不是这样解释的
dfsfjwfmlwsf 发表于 2022-10-24 12:01
大佬 有空帮忙看一下感谢
你没有看起时间片轮询功能,相同优先级下的执行不正常。FreeRTOSConfig.h下定义宏configUSE_TIME_SLICING开启这个功能 dfsfjwfmlwsf 发表于 2022-10-24 12:01
大佬 有空帮忙看一下感谢
另外printf应该也不行,你找硬汉自己实现的printf看看。我手里没有板子,你这两个都试一下。 庄永 发表于 2022-10-24 22:35
另外printf应该也不行,你找硬汉自己实现的printf看看。我手里没有板子,你这两个都试一下。
感谢解答cubemx生成的工程时间片是默认开启的 应该还是printf打印的问题 我设置变量每次++仿真看 2个任务是同步增加的 dfsfjwfmlwsf 发表于 2022-10-25 11:55
感谢解答cubemx生成的工程时间片是默认开启的 应该还是printf打印的问题 我设置变量每次++仿真 ...
我看你的代码没有使能这个宏,不知道CubeMX会不会开启。
你这个printf不可靠的,实在要这样用,加入临界段保护
页:
[1]