ucoii运行第一个任务后运行OS_Sched结束后进入hardfault

程序创建了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

经过调试,发现不是调度问题,我把创建任务之前的所有函数注释掉,一个一个再取消注释,调试,发现问题在其中一个函数,在我们部门大佬帮助下继续调试发现问题出在snprintf函数,我使用该函数将一个浮点数复制成字符串放进数组中,只要不传递浮点数就正常,网上查这个问题挺多的,但是增大数组(从24增大到1000),增大任务栈(8K到16K),增大启动文件栈(4K到20K),将数组从局部变量声明为全局变量,都不行,最后屈服了,用%d.%d的方式来复制