搜索
查看: 3821|回复: 6

[求助] FreeRTOS堆栈设置导致任务不执行切换

[复制链接]

该用户从未签到

30

主题

579

帖子

12

蝴蝶豆

金牌会员

最后登录
2020-3-22
发表于 2018-7-9 08:14:43 | 显示全部楼层 |阅读模式
本帖最后由 wanyisq 于 2018-7-9 08:18 编辑

我使用的STM32F103VE运行的STM32CubeMX生成的freertos工程。
一共有两个任务,TSAK1和TASK2都是翻转LED,TASK1的堆栈设置64,两个任务切换、运行正常。但是TASK1任务堆栈更改为128的话,就不执行任务切换,只有TASK1的任务在运行
代码如下
  1. #define START_TASK_PRIO 1
  2. #define START_STK_SIZE  128
  3. TaskHandle_t StartTask_Handle;

  4. #define TASK1_TASK_PRIO 2
  5. #define TASK1_STK_SIZE  64
  6. TaskHandle_t Task1Task_Handle;

  7. #define TASK2_TASK_PRIO 3
  8. #define TASK2_STK_SIZE  64
  9. TaskHandle_t Task2Task_Handle;
复制代码
  1. void start_task(void *pvParameters)
  2. {
  3.   taskENTER_CRITICAL();
  4.   
  5. /*
  6.         xTaskCreate( (TaskFunction_t) key_task,
  7.               (const char *  ) "key task",
  8.               (const uint16_t) KEY_STK_SIZE,
  9.               (void *        ) NULL,
  10.               (UBaseType_t   ) KEY_TASK_PRIO,
  11.               (TaskHandle_t *) &KEYTask_Handle );
  12. */
  13.        
  14.   xTaskCreate( (TaskFunction_t) task1_task,
  15.               (const char *  ) "task1 task",
  16.               (const uint16_t) TASK1_STK_SIZE,
  17.               (void *        ) NULL,
  18.               (UBaseType_t   ) TASK1_TASK_PRIO,
  19.               (TaskHandle_t *) &Task1Task_Handle );

  20.                                                        
  21.   xTaskCreate( (TaskFunction_t) task2_task,
  22.               (const char *  ) "task2 task",
  23.               (const uint16_t) TASK2_STK_SIZE,
  24.               (void *        ) NULL,
  25.               (UBaseType_t   ) TASK2_TASK_PRIO,
  26.               (TaskHandle_t *) &Task2Task_Handle );

  27.                                                        
  28.   vTaskDelete(StartTask_Handle);
  29.   
  30.   taskEXIT_CRITICAL();
  31. }

  32. void task1_task(void *pvParameters)
  33. {
  34.   while(1)
  35.   {
  36.     HAL_GPIO_TogglePin(GPIOD,LED2_Pin);
  37.     osDelay(200);
  38.   }
  39. }

  40. void task2_task(void *pvParameters)
  41. {
  42.   while(1)
  43.   {
  44.     HAL_GPIO_TogglePin(GPIOD,LED1_Pin);
  45.     osDelay(200);
  46.   }
  47. }
复制代码
  1. int main(void)
  2. {

  3.   HAL_Init();

  4.   SystemClock_Config();

  5.   MX_GPIO_Init();

  6.   MX_FREERTOS_Init();

  7.         xTaskCreate( (TaskFunction_t) start_task,
  8.               (const char *  ) "start task",
  9.               (const uint16_t) START_STK_SIZE,
  10.               (void *        ) NULL,
  11.               (UBaseType_t   ) START_TASK_PRIO,
  12.               (TaskHandle_t *) &StartTask_Handle );
  13.   /* Start scheduler */
  14.   osKernelStart();

  15.   while (1)
  16.   {

  17.   }

  18. }
复制代码

回复

使用道具 举报

该用户从未签到

30

主题

1058

帖子

12

蝴蝶豆

金牌会员

最后登录
2021-11-9
发表于 2018-7-9 08:52:44 | 显示全部楼层
好奇,坐等答案
回复 支持 反对

使用道具 举报

该用户从未签到

74

主题

1442

帖子

194

蝴蝶豆

版主

最后登录
2023-10-26
发表于 2018-7-9 14:55:50 | 显示全部楼层
看看FreeRTOS 配置, 你给线程运行的Heap大小多少?

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

296

帖子

128

蝴蝶豆

金牌会员

最后登录
2020-12-2
发表于 2018-7-12 10:04:01 | 显示全部楼层
是因为操作系统的堆栈配置小了。configTOTAL_HEAP_SIZE 看看这个配置是不是过小?

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

30

主题

579

帖子

12

蝴蝶豆

金牌会员

最后登录
2020-3-22
 楼主| 发表于 2018-7-12 10:38:27 | 显示全部楼层
线程的堆栈上面已经define过了,操作系统的堆栈使用的是默认的,应该是够的。
后面经过eric2013的指点,是使用cubemx配置的Free RTOS,强制开启了CMSIS-RTOS V1封装层,任务函数就不能使用Free RTOS自己的函数了,需要使用CMSIS-RTOS的。
经过确认和更改,任务已经可以切换了。
结帖 感谢

评分

参与人数 1蝴蝶豆 +4 收起 理由
zero99 + 4 结帖奖励

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

227

主题

828

帖子

32

蝴蝶豆

金牌会员

最后登录
2021-1-15
发表于 2018-7-25 16:51:51 | 显示全部楼层
wanyisq 发表于 2018-7-12 10:38
线程的堆栈上面已经define过了,操作系统的堆栈使用的是默认的,应该是够的。
后面经过eric2013的指点,是 ...

没有说是修改哪里,如何修改的,哎,

就这样结贴了

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

2

帖子

0

蝴蝶豆

初级会员

最后登录
2018-9-3
发表于 2018-9-3 01:58:48 | 显示全部楼层
我也遇到相同问题,很多天了,请问要怎样使用CMSIS-RTOS解决?谢谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-4-26 05:32 , Processed in 0.200966 second(s), 46 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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