首页 > 代码库 > 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 错误解决记录
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。