首先確定你的軟體是在互斥訊號初始化的位置,在以下幾個位置,將會報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)); /* 任務棧大小,單位位元組數 */ }