| 本帖最后由 wanyisq 于 2018-7-9 08:18 编辑 
 我使用的STM32F103VE运行的STM32CubeMX生成的freertos工程。
 一共有两个任务,TSAK1和TASK2都是翻转LED,TASK1的堆栈设置64,两个任务切换、运行正常。但是TASK1任务堆栈更改为128的话,就不执行任务切换,只有TASK1的任务在运行
 代码如下
 
 复制代码#define START_TASK_PRIO 1
#define START_STK_SIZE  128
TaskHandle_t StartTask_Handle;
#define TASK1_TASK_PRIO 2
#define TASK1_STK_SIZE  64
TaskHandle_t Task1Task_Handle;
#define TASK2_TASK_PRIO 3
#define TASK2_STK_SIZE  64
TaskHandle_t Task2Task_Handle;
复制代码void start_task(void *pvParameters)
{
  taskENTER_CRITICAL();
  
/*
        xTaskCreate( (TaskFunction_t) key_task,
              (const char *  ) "key task",
              (const uint16_t) KEY_STK_SIZE,
              (void *        ) NULL,
              (UBaseType_t   ) KEY_TASK_PRIO,
              (TaskHandle_t *) &KEYTask_Handle );
*/ 
        
  xTaskCreate( (TaskFunction_t) task1_task,
              (const char *  ) "task1 task",
              (const uint16_t) TASK1_STK_SIZE,
              (void *        ) NULL,
              (UBaseType_t   ) TASK1_TASK_PRIO,
              (TaskHandle_t *) &Task1Task_Handle );
                                                        
  xTaskCreate( (TaskFunction_t) task2_task,
              (const char *  ) "task2 task",
              (const uint16_t) TASK2_STK_SIZE,
              (void *        ) NULL,
              (UBaseType_t   ) TASK2_TASK_PRIO,
              (TaskHandle_t *) &Task2Task_Handle );
                                                        
  vTaskDelete(StartTask_Handle);
  
  taskEXIT_CRITICAL();
}
void task1_task(void *pvParameters)
{
  while(1)
  {
    HAL_GPIO_TogglePin(GPIOD,LED2_Pin);
    osDelay(200);
  }
}
void task2_task(void *pvParameters)
{
  while(1)
  {
    HAL_GPIO_TogglePin(GPIOD,LED1_Pin);
    osDelay(200);
  }
}
复制代码int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_FREERTOS_Init();
        xTaskCreate( (TaskFunction_t) start_task,
              (const char *  ) "start task",
              (const uint16_t) START_STK_SIZE,
              (void *        ) NULL,
              (UBaseType_t   ) START_TASK_PRIO,
              (TaskHandle_t *) &StartTask_Handle );
  /* Start scheduler */
  osKernelStart();
  while (1)
  {
  }
}
 | 
评分
查看全部评分
评分
查看全部评分
后面经过eric2013的指点,是使用cubemx配置的Free RTOS,强制开启了CMSIS-RTOS V1封装层,任务函数就不能使用Free RTOS自己的函数了,需要使用CMSIS-RTOS的。
经过确认和更改,任务已经可以切换了。
结帖 感谢
评分
查看全部评分
没有说是修改哪里,如何修改的,哎,
就这样结贴了
评分
查看全部评分