硬汉嵌入式论坛

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

[技术讨论] 使用STM32cubemx生成FreeRTOS,再使用Tracealyzer调试,为什么创建任务任务栈看到会多出8字节?

[复制链接]

13

主题

52

回帖

91

积分

初级会员

积分
91
发表于 2023-6-28 17:13:48 | 显示全部楼层 |阅读模式
  osThreadDef(StartTask, StartTaskEntry, osPriorityNormal, 0, 128);
  StartTaskHandle = osThreadCreate(osThread(StartTask), NULL);

  /* definition and creation of Led0Task */
  osThreadDef(Led0Task, Led0TaskEntry, osPriorityIdle, 0, 128);
  Led0TaskHandle = osThreadCreate(osThread(Led0Task), NULL);

  /* definition and creation of Led1Task */
  osThreadDef(Led1Task, Led1TaskEntry, osPriorityIdle, 0, 128);
  Led1TaskHandle = osThreadCreate(osThread(Led1Task), NULL);

/*****************************************************************************/
  /* Allocate space for the stack used by the task being created. */
    pxStack = pvPortMalloc( ( ( ( size_t ) usStackDepth ) * sizeof( StackType_t ) ) );
这里4*128 = 512,但是Tracealyzer里面看到是520字节
微信截图_20230628171305.png

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106771
QQ
发表于 2023-6-28 17:16:02 | 显示全部楼层
帮顶。
回复

使用道具 举报

13

主题

52

回帖

91

积分

初级会员

积分
91
 楼主| 发表于 2023-6-28 17:21:39 | 显示全部楼层
动态创建任务会有两次动态申请内存,一次是申请任务栈,一次是申请任务TCB,从tracelyzer上可以看出,520字节是任务栈的,104字节是TCB任务块的。但是按照计算应该是512字节才对啊。这两个申请是在前后,通过地址计算,后面的地址减前面的地址,确实也是520字节。这8字节哪里出来的
回复

使用道具 举报

13

主题

52

回帖

91

积分

初级会员

积分
91
 楼主| 发表于 2023-6-28 18:09:16 | 显示全部楼层

硬汉大佬,这不会和堆栈8字节对齐有关吧,但是这也是8字节对齐的啊
回复

使用道具 举报

13

主题

52

回帖

91

积分

初级会员

积分
91
 楼主| 发表于 2023-6-29 17:00:57 | 显示全部楼层
昨晚测试了下,代码里面打印出来的地址和Tracelyzer里面也对应的上,搞不懂了
11111.png
回复

使用道具 举报

3

主题

47

回帖

56

积分

初级会员

积分
56
发表于 2023-6-29 17:54:12 | 显示全部楼层
Hzzz 发表于 2023-6-29 17:00
昨晚测试了下,代码里面打印出来的地址和Tracelyzer里面也对应的上,搞不懂了


heap4实际分配的值是要大于你malloc的值的,是不是因为这个?



回复

使用道具 举报

13

主题

52

回帖

91

积分

初级会员

积分
91
 楼主| 发表于 2023-6-30 09:21:44 | 显示全部楼层
baobao5 发表于 2023-6-29 17:54
heap4实际分配的值是要大于你malloc的值的,是不是因为这个?

为什么会大于我申请的,这里有什么资料介绍吗
回复

使用道具 举报

13

主题

52

回帖

91

积分

初级会员

积分
91
 楼主| 发表于 2023-6-30 09:46:59 | 显示全部楼层
baobao5 发表于 2023-6-29 17:54
heap4实际分配的值是要大于你malloc的值的,是不是因为这个?

你说的是对的,我跳进源码看了下,每次申请的内存不但要做对齐而且在每次申请的内存前会加上一个指向下一个得链表项再加上一个长度。所以不考虑对齐的话,确实会多4个字节出来。
回复

使用道具 举报

3

主题

47

回帖

56

积分

初级会员

积分
56
发表于 2023-6-30 13:43:57 | 显示全部楼层
Hzzz 发表于 2023-6-30 09:21
为什么会大于我申请的,这里有什么资料介绍吗

我发的图片有
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-5 20:11 , Processed in 0.300805 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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