硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1241|回复: 9
收起左侧

[FreeRTOS] 使用标准库移植freertos和使用cubemx 生成的freertos 试验结果不一致的疑问?

[复制链接]

5

主题

13

回帖

28

积分

新手上路

积分
28
发表于 2022-10-23 20:12:21 | 显示全部楼层 |阅读模式
使用标准库移植freertos和使用cubemx 生成的freertos 试验结果不一致的疑问?

试验很简单 就是2个任务  每个任务里面翻转led并串口打印

下面是标准库移植freertos  2个led同时亮灭  并同时500ms打印信息  试验结果与设想一样
1.png 2.png 3.png

下面是cubemx生成的freertos   2个led同时亮灭     但串口打印这里却是2者间隔500ms打印信息  试验结果与设想却不一样   除非把2个任务优先级更改为不一样就正常了
4.png 5.png 6.png

刚学习freertos  望解答 感谢  @硬汉大佬


回复

使用道具 举报

75

主题

684

回帖

909

积分

金牌会员

积分
909
发表于 2022-10-24 00:54:20 | 显示全部楼层
看这个看不出太多信息,上源码
回复

使用道具 举报

5

主题

13

回帖

28

积分

新手上路

积分
28
 楼主| 发表于 2022-10-24 12:01:41 | 显示全部楼层
本帖最后由 dfsfjwfmlwsf 于 2022-10-24 14:44 编辑
庄永 发表于 2022-10-24 00:54
看这个看不出太多信息,上源码

大佬 有空帮忙看一下  感谢

F429IG_FreeRTOS_HAL_DynamicTask.7z

16.18 MB, 下载次数: 25

回复

使用道具 举报

3

主题

47

回帖

56

积分

初级会员

积分
56
发表于 2022-10-24 14:30:12 | 显示全部楼层
osdely是不是阻塞了啊,两个任务一个完成另一个才动
回复

使用道具 举报

5

主题

13

回帖

28

积分

新手上路

积分
28
 楼主| 发表于 2022-10-24 15:43:45 | 显示全部楼层
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    初学者没有想明白
回复

使用道具 举报

19

主题

234

回帖

291

积分

高级会员

积分
291
发表于 2022-10-24 16:49:17 | 显示全部楼层
好久没用过freertos了,你把你那个标准库的两个任务的优先级都改成0试一下是不是和cube生成的一样的效果。刚刚翻了一下手册,freertos的空闲任务优先级为0,cube使用的cmsis封装的任务优先级osPriorityNormal也是0,这样弄的话系统中所有的任务的优先级都是0,此时freertos采用时间片轮询调度算法,不知道是不是这样解释的
image.png
回复

使用道具 举报

75

主题

684

回帖

909

积分

金牌会员

积分
909
发表于 2022-10-24 21:44:52 | 显示全部楼层
dfsfjwfmlwsf 发表于 2022-10-24 12:01
大佬 有空帮忙看一下  感谢

你没有看起时间片轮询功能,相同优先级下的执行不正常。FreeRTOSConfig.h下定义宏configUSE_TIME_SLICING开启这个功能
回复

使用道具 举报

75

主题

684

回帖

909

积分

金牌会员

积分
909
发表于 2022-10-24 22:35:29 | 显示全部楼层
dfsfjwfmlwsf 发表于 2022-10-24 12:01
大佬 有空帮忙看一下  感谢

另外printf应该也不行,你找硬汉自己实现的printf看看。我手里没有板子,你这两个都试一下。
回复

使用道具 举报

5

主题

13

回帖

28

积分

新手上路

积分
28
 楼主| 发表于 2022-10-25 11:55:21 | 显示全部楼层
庄永 发表于 2022-10-24 22:35
另外printf应该也不行,你找硬汉自己实现的printf看看。我手里没有板子,你这两个都试一下。

感谢解答  cubemx生成的工程时间片是默认开启的      应该还是printf打印的问题    我设置变量每次++仿真看   2个任务是同步增加的
回复

使用道具 举报

75

主题

684

回帖

909

积分

金牌会员

积分
909
发表于 2022-10-25 21:39:19 | 显示全部楼层
dfsfjwfmlwsf 发表于 2022-10-25 11:55
感谢解答  cubemx生成的工程时间片是默认开启的      应该还是printf打印的问题    我设置变量每次++仿真 ...

我看你的代码没有使能这个宏,不知道CubeMX会不会开启。
你这个printf不可靠的,实在要这样用,加入临界段保护
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-29 13:54 , Processed in 0.333186 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表