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

调试调到怀疑人生,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扩展软件包
关注我们
st-img 微信公众号
st-img 手机版