程序创建了5个任务,创建任务后,运行完优先级最高的任务后通过OSTimeDly触发调度,在该函数中运行OS_Sched结束跳出函数的时候进入hardfault(基本参数:systick 10ms一次,时钟频率24MHZ),改小OSTimeDly中的tick数,会反复调用优先级最高任务几次后(不会调度其他任务)进入hardfault
尝试了以下方法,加大启动文件中的堆栈,增大任务栈(已经将任务除了OSTimeDly之外的都注释掉了,应该够了),还是不行,请问有没有什么办法或者思路解决
优先级最高任务:
static void CML_TaskMain (void *p_arg)
{
//(void)p_arg;
while(1)
{
//--- 主程序
//CML_ProcessMain();
//--- 数据队列发送
//CML_QueueSendMain();
//--- 更新看门狗
//UpdateWatchDogThread();
OSTimeDly(/*DlyTime_50ms*/50); //500ms
}
}
任务栈大小:
#define APP_TASK_START_STK_SIZE 512
#define APP_TASK_MAIN_STK_SIZE (1024*2)
#define APP_TASK_TIME_EVENT_STK_SIZE (1024*1)
#define APP_TASK_PACKET_PROCESS_STK_SIZE (1024*2)
#define APP_QUEUE_SEND_STK_SIZE (1024*2)
#define App_PROCESS_CMD_STK_SIZE (1024*2)
启动文件堆栈大小
Stack_Size EQU 0x3000
AREA STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem SPACE Stack_Size
__initial_sp EQU 0x20000000 + Stack_Size
Heap_Size EQU 0x3000