本帖最后由 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的。
经过确认和更改,任务已经可以切换了。
结帖 感谢
评分
查看全部评分
没有说是修改哪里,如何修改的,哎,
就这样结贴了
评分
查看全部评分