你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
Cortexxx 发表于 2019-4-9 09:30 有个小问题
watershade 发表于 2019-4-15 13:06 不好意思,这几天没有看论坛。 下图是从freeRTOS v10.0.0的手册上截图的。(这个手册freeRTOS官方可免费 ...
意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器
这个代码的第三个参数 128 申请的是stack还是Heap?
我进到这个function里面看到它用malloc开了一块内存,故认为是开辟的是heap空间,
但是他的形参名称为什么是 StackDepth。 这点我就很糊涂了,到底这个128*4 stack 还是heap?
不好意思,这几天没有看论坛。
下图是从freeRTOS v10.0.0的手册上截图的。(这个手册freeRTOS官方可免费下载)
手册提到了动态创建和静态创建两种内存分配方法。我的上面提到的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的大小选择没有了。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
这是我个人的理解,如果你有疑问或者不同意。可以留言给我,咱们交流交流。谢谢
感谢回复 了解了 XDDD