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

关于 FreeRTOS xTaskCreate 函数usStackDepth 的疑问

[复制链接]
su-409464 提问时间:2016-7-11 18:48 /

#define configMINIMAL_STACK_SIZE         ( ( uint16_t ) 128 )

#define configTOTAL_HEAP_SIZE         ( ( size_t ) ( 2 * 1024 ) )


configuration file 里面 这两个选项是按照 nucleo 提供的 例子,填的。


main 函数中只做了 一个LED  toggle 的 task


int main(void)

{

  HAL_Init();


  /* Configure the system clock to 2 MHz */

  SystemClock_Config();


  //BSP driver init

  BSP_Init();


  xTaskCreate( vTaskLEDBlink, "vTaskLED", 512, NULL, 2, &xHandleTaskLED );  


  /* Add your application code here */

  vTaskStartScheduler();



  /* Infinite loop */

  while (1)

  {

  }

}


当   xTaskCreate( vTaskLEDBlink, "vTaskLED", 512, NULL, 2, &xHandleTaskLED );  填入512时,程序下载后,LED 没有实现toggle


当  xTaskCreate( vTaskLEDBlink, "vTaskLED", 128, NULL, 2, &xHandleTaskLED );  填入128时, 程序下载后,LED 可以实现Toggle 。



我不明白的时候 如果填入512  内存不足,为什么没有任何提示?


如果以后 有其他task  这个值应该填多少合适呢?  有没有 依据 可以参考?


收藏 评论5 发布时间:2016-7-11 18:48

举报

5个回答
涛哥2035 回答时间:2016-7-11 23:28:36
#define configTOTAL_HEAP_SIZE         ( ( size_t ) ( 2 * 1024 ) )
你定义的任务堆栈大小是2048byte
如果
xTaskCreate( vTaskLEDBlink, "vTaskLED", 512, NULL, 2, &xHandleTaskLED );
请注意奥,这里的512是按4字节算的哦,512是512word,也就是2048byte
再弄个idle空任务的话,函数堆栈都出界了,所以执行错误。
由于是软件错误,跟编译和硬件没关系,所以不报错

因此,freertos的堆栈空间分配和中断嵌套是需要深入学习和一定要注意的地方

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2 很给力!

查看全部评分

犹豫的大三 回答时间:2016-7-12 10:26:59
那堆得大小要如何限定呢?可以检测出已使用的空间大小吗
废鱼 回答时间:2016-7-13 09:38:41
一般1024或者512就足够了。.MAP文件。可以看一下对应任务占用的代码空间。
su-409464 回答时间:2016-7-14 08:55:32
whtt 发表于 2016-7-11 23:28
#define configTOTAL_HEAP_SIZE         ( ( size_t ) ( 2 * 1024 ) )
你定义的任务堆栈大小是2048byte
如 ...

精辟,就是这个原因。

所以我觉得一开始 还是要先把 configuration 这个文件 里面的每个项 大概看一下,具体什么意思。

但是网上很大教 移植的  都遗漏了 这一点。

所以即便你一步步按照别人 的方法进行移植, 后面程序跑起来 很多东西 也你迷迷糊糊的。。。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版