野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5065|回复: 4

[freertos] 任务优先级的问题。

[复制链接]
发表于 2022-6-10 15:17:51 | 显示全部楼层 |阅读模式
smt32单片机freertos操作系统中空闲任务的优先级设置为时,系统无法切换到Idle任务,切换时进入HardFault_Handler异常,打不到任务空闲任务块。有没有人遇到过这种情况?

回复

使用道具 举报

发表于 2022-6-11 17:11:02 | 显示全部楼层
截图初始化和各个任务部分的代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-14 08:20:23 | 显示全部楼层
/*
*************************************************************************
*                        任务控制块 & STACK
*************************************************************************
*/
TCB_t Task1TCB,Task2TCB;

#define TASK1_STACK_SIZE                    20
StackType_t Task1Stack[TASK1_STACK_SIZE];



#define TASK2_STACK_SIZE                    20
StackType_t Task2Stack[TASK2_STACK_SIZE];
//定义任务控制块
TCB_t Task1TCB;
TCB_t Task2TCB;
//定义任务句柄
TaskHandle_t Task1_Handle;
TaskHandle_t Task2_Handle;

/*
*************************************************************************
*                               函数声明
*************************************************************************
*/
void delay (uint32_t count);
void Task1_Entry( void *p_arg );
void Task2_Entry( void *p_arg );


int  main(void){
       



         prvInitialiseTaskLists( );   //初始化就绪列表
        Task1_Handle =xTaskCreateStatic(Task1_Entry,
                                                                                 "Task1_Entry",
                           TASK1_STACK_SIZE,
                                                                                        NULL,
                                                                                        2,
                                                                                        Task1Stack,
                            &Task1TCB
                         );
        //vListInsert(&pxReadyTasksLists[1],&Task1TCB.xStateListItem);
        Task2_Handle =xTaskCreateStatic(Task2_Entry,
                                                                                 "Task2_Entry",
                           TASK2_STACK_SIZE,
                                                                                        NULL,
                                                                                        1,
                                                                                        Task2Stack,
                            &Task2TCB
                         );
        //vListInsert(&pxReadyTasksLists[2],&Task2TCB.xStateListItem);
            /* 在启动调度器前,关闭中断 */                                 
   portDISABLE_INTERRUPTS();
        vTaskStartScheduler();
while(1){
}
}

//定义一个任务函数
/* 软件延时 */
void delay (uint32_t count)
{
        for(; count!=0; count--);
}

void Task1_Entry(void *p_arg)
{for(;;)
        { flag1 = 1;
                vTaskDelay( 2 );               
                flag1 = 0;
                vTaskDelay( 2);
                //taskYIELD();
        }

}
void Task2_Entry(void *p_arg)
{for(;;)
        {flag2 = 1;
                vTaskDelay( 2 );               
        flag2 = 0;
                vTaskDelay( 2 );
               
        }

}
StackType_t IdleTaskStack[configMINIMAL_STACK_SIZE];
TCB_t IdleTaskTCB;
void vApplicationGetIdleTaskMemory( TCB_t **ppxIdleTaskTCBBuffer,
                                    StackType_t **ppxIdleTaskStackBuffer,
                                    uint32_t *pulIdleTaskStackSize )
{
                *ppxIdleTaskTCBBuffer=&IdleTaskTCB;
                *ppxIdleTaskStackBuffer=IdleTaskStack;
                *pulIdleTaskStackSize=configMINIMAL_STACK_SIZE;
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-14 08:20:45 | 显示全部楼层
以上为主函数
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-14 08:22:01 | 显示全部楼层
把task1和task2的任务优先级调换一下,程序运行又可以正常了。
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-21 23:44 , Processed in 0.030211 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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