1. 程式人生 > >Keil RTX使用 os_mut_init 報Hard Fault 錯誤解決記錄

Keil RTX使用 os_mut_init 報Hard Fault 錯誤解決記錄

mod ptime 之前 sta pda style tasks main print

首先確定你的軟件是在互斥信號初始化的位置,在以下幾個位置,將會報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 錯誤解決記錄