你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

调试调到怀疑人生,heap我对你的误解有多深

[复制链接]
watershade 发布时间:2019-4-2 21:41
阅读主题, 点击返回1楼
收藏 3 评论12 发布时间:2019-4-2 21:41
12个回答
Cortexxx 回答时间:2019-4-9 09:30:01
有个小问题
  1. xTaskCreate(FactoryTask,"Factory",128, 0, 3, NULL);
复制代码
  1.         BaseType_t xTaskCreate(        TaskFunction_t pxTaskCode,
  2.                                                         const char * const pcName,
  3.                                                         const uint16_t usStackDepth,
  4.                                                         void * const pvParameters,
  5.                                                         UBaseType_t uxPriority,
  6.                                                         TaskHandle_t * const pxCreatedTask ) /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
复制代码


这个代码的第三个参数 128 申请的是stack还是Heap?
我进到这个function里面看到它用malloc开了一块内存,故认为是开辟的是heap空间,
但是他的形参名称为什么是 StackDepth。 这点我就很糊涂了,到底这个128*4 stack 还是heap?
watershade 回答时间:2019-4-15 13:06:24

不好意思,这几天没有看论坛。
下图是从freeRTOS v10.0.0的手册上截图的。(这个手册freeRTOS官方可免费下载) frtos_heap_stack.jpg
手册提到了动态创建和静态创建两种内存分配方法。我的上面提到的TOTAL_HEAP_SIZE其实只在动态创建的时候才有效.
在动态分配的时候,需要先指定heap的总共大小。但这段memory并不是划出来不用的。所有的task,queue和semaphore创建的时候都要从这里面划分。而对于任务的动态创建,TCB和stack都是从heap里面分配的。但如果使用静态创建,那这个任务就是在编译环节分配的。不是程序在heap里面动态分配的。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
如果你看st封装的cmsis-rtos,他的程序创建使用的是osThreadCreate.而freeRTOS的memory allocation分为三种:一种是Dynamic,另一种是Static,第三种是Dynamic/Static。但本质上使用的还是上图提到的两个functions:xTaskCreate和xTaskCreateStatic
图片里展示了主要的内容。你可以试着将memory allocate改成static,你会看到heap的大小选择没有了。
frtos_heap_stack_2.jpg frtos_heap_stack_3.jpg

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
这是我个人的理解,如果你有疑问或者不同意。可以留言给我,咱们交流交流。谢谢
Cortexxx 回答时间:2019-4-16 08:56:04
watershade 发表于 2019-4-15 13:06
不好意思,这几天没有看论坛。
下图是从freeRTOS v10.0.0的手册上截图的。(这个手册freeRTOS官方可免费 ...

感谢回复 了解了 XDDD
12

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版