首页 > 代码库 > Keil RTX使用 os_mut_init 报Hard Fault 错误解决记录

Keil RTX使用 os_mut_init 报Hard Fault 错误解决记录

首先确定你的软件是在互斥信号初始化的位置,在以下几个位置,将会报Hard Fault 错误:

(1).os_sys_init_user 用户线程创建之前

(2).os_tsk_create_user之后

规范写法:

/***********************************************************************************************************    函 数 名: main*    功能说明: 标准c程序入口。*    形    参: 无*    返 回 值: 无**********************************************************************************************************/int main (void) {                /* 初始化外设 */    bsp_Init();        /* 创建启动任务 */     os_sys_init_user (AppTaskStart,             /* 任务函数 */                      4,                        /* 任务优先级 */                      &AppTaskStartStk,         /* 任务栈 */                      sizeof(AppTaskStartStk)); /* 任务栈大小,单位字节数 */    while(1);}/***********************************************************************************************************    函 数 名: AppTaskStart*    功能说明: 启动任务,也就是最高优先级任务。*    形    参: 无*    返 回 值: 无*   优 先 级: 4  **********************************************************************************************************/__task void AppTaskStart(void){        /* 先创建任务间通信机制,防止任务先创建后,直接就可以使用 */    AppObjCreate();        AppTaskCreate();        while(1)    {        os_dly_wait(1000);    }}/***********************************************************************************************************    函 数 名: AppObjCreate*    功能说明: 创建任务通信机制*    形    参: 无*    返 回 值: 无**********************************************************************************************************/static void AppObjCreate (void){//    /* 创建信号量计数值是0, 用于任务同步 *///    os_sem_init (&semaphore, 0);//    //     /* 创建消息邮箱 *///    os_mbx_init (&mailbox, sizeof(mailbox));        link_mul_init();    }/***********************************************************************************************************    函 数 名: AppTaskCreate*    功能说明: 创建应用任务*    形    参: 无*    返 回 值: 无**********************************************************************************************************/static void AppTaskCreate (void){    HandleTaskModbus = os_tsk_create_user(AppTaskModbus,             /* 任务函数 */                                           1,                         /* 任务优先级 */                                           &AppTaskModbusStk,         /* 任务栈 */                                          sizeof(AppTaskModbusStk)); /* 任务栈大小,单位字节数 */                    HandleTaskLED = os_tsk_create_user(AppTaskLED,              /* 任务函数 */                                        2,                       /* 任务优先级 */                                        &AppTaskLEDStk,          /* 任务栈 */                                       sizeof(AppTaskLEDStk));  /* 任务栈大小,单位字节数 */        HandleTaskMsgPro = os_tsk_create_user(AppTaskMsgPro,             /* 任务函数 */                                           3,                         /* 任务优先级 */                                           &AppTaskMsgProStk,         /* 任务栈 */                                          sizeof(AppTaskMsgProStk)); /* 任务栈大小,单位字节数 */    HandleTaskPrintTest = os_tsk_create_user(AppTaskPrintfTest,             /* 任务函数 */                                           4,                         /* 任务优先级 */                                           &AppTaskPrintfTestStk,         /* 任务栈 */                                          sizeof(AppTaskPrintfTestStk)); /* 任务栈大小,单位字节数 *///    HandleTaskTCPTimer = os_tsk_create_user(AppTaskTCPTimer,        /* 任务函数 */ //                                            5,                      /* 任务优先级 */ //                                            &AppTaskTCPStk,         /* 任务栈 *///                                            sizeof(AppTaskTCPStk)); /* 任务栈大小,单位字节数 */        HandleTaskReadAD7327 = os_tsk_create_user(AppTaskReadAD7327,             /* 任务函数 */                                           5,                         /* 任务优先级 */                                           &AppTaskReadAD7327Stk,         /* 任务栈 */                                          sizeof(AppTaskReadAD7327Stk)); /* 任务栈大小,单位字节数 */                                                                                        HandleTaskDeviceLink = os_tsk_create_user(AppTaskDeviceLink,             /* 任务函数 */                                           6,                         /* 任务优先级 */                                           &AppTaskDeviceLinkStk,         /* 任务栈 */                                          sizeof(AppTaskDeviceLinkStk)); /* 任务栈大小,单位字节数 */                                                                                            HandleTaskCollectSensorData = os_tsk_create_user(AppTaskCollectSensorData,             /* 任务函数 */                                           7,                         /* 任务优先级 */                                           &AppTaskCollectSensorDataStk,         /* 任务栈 */                                          sizeof(AppTaskCollectSensorDataStk)); /* 任务栈大小,单位字节数 */                                                                                            HandleTaskScreenUpdate = os_tsk_create_user(AppTaskScreenUpdate,             /* 任务函数 */                                           8,                         /* 任务优先级 */                                           &AppTaskScreenUpdateStk,         /* 任务栈 */                                          sizeof(AppTaskScreenUpdateStk)); /* 任务栈大小,单位字节数 */        HandleTaskLockLink = os_tsk_create_user(AppTaskLockLink,             /* 任务函数 */                                           9,                         /* 任务优先级 */                                           &AppTaskLockLinkStk,         /* 任务栈 */                                          sizeof(AppTaskLockLinkStk)); /* 任务栈大小,单位字节数 */    }

 

Keil RTX使用 os_mut_init 报Hard Fault 错误解决记录