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

2023-01-07,,,,

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

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

(2).os_tsk_create_user之后

规范写法:

/*
*********************************************************************************************************
* 函 数 名: main
* 功能说明: 标准c程序入口。
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
int main (void)
{ /* 初始化外设 */
bsp_Init(); /* 创建启动任务 */
os_sys_init_user (AppTaskStart, /* 任务函数 */
, /* 任务优先级 */
&AppTaskStartStk, /* 任务栈 */
sizeof(AppTaskStartStk)); /* 任务栈大小,单位字节数 */
while();
} /*
*********************************************************************************************************
* 函 数 名: AppTaskStart
* 功能说明: 启动任务,也就是最高优先级任务。
* 形 参: 无
* 返 回 值: 无
* 优 先 级: 4
*********************************************************************************************************
*/
__task void AppTaskStart(void)
{ /* 先创建任务间通信机制,防止任务先创建后,直接就可以使用 */
AppObjCreate(); AppTaskCreate(); while()
{
os_dly_wait();
}
} /*
*********************************************************************************************************
* 函 数 名: 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, /* 任务函数 */
, /* 任务优先级 */
&AppTaskModbusStk, /* 任务栈 */
sizeof(AppTaskModbusStk)); /* 任务栈大小,单位字节数 */ HandleTaskLED = os_tsk_create_user(AppTaskLED, /* 任务函数 */
, /* 任务优先级 */
&AppTaskLEDStk, /* 任务栈 */
sizeof(AppTaskLEDStk)); /* 任务栈大小,单位字节数 */ HandleTaskMsgPro = os_tsk_create_user(AppTaskMsgPro, /* 任务函数 */
, /* 任务优先级 */
&AppTaskMsgProStk, /* 任务栈 */
sizeof(AppTaskMsgProStk)); /* 任务栈大小,单位字节数 */
HandleTaskPrintTest = os_tsk_create_user(AppTaskPrintfTest, /* 任务函数 */
, /* 任务优先级 */
&AppTaskPrintfTestStk, /* 任务栈 */
sizeof(AppTaskPrintfTestStk)); /* 任务栈大小,单位字节数 */
// HandleTaskTCPTimer = os_tsk_create_user(AppTaskTCPTimer, /* 任务函数 */
// 5, /* 任务优先级 */
// &AppTaskTCPStk, /* 任务栈 */
// sizeof(AppTaskTCPStk)); /* 任务栈大小,单位字节数 */ HandleTaskReadAD7327 = os_tsk_create_user(AppTaskReadAD7327, /* 任务函数 */
, /* 任务优先级 */
&AppTaskReadAD7327Stk, /* 任务栈 */
sizeof(AppTaskReadAD7327Stk)); /* 任务栈大小,单位字节数 */ HandleTaskDeviceLink = os_tsk_create_user(AppTaskDeviceLink, /* 任务函数 */
, /* 任务优先级 */
&AppTaskDeviceLinkStk, /* 任务栈 */
sizeof(AppTaskDeviceLinkStk)); /* 任务栈大小,单位字节数 */
HandleTaskCollectSensorData = os_tsk_create_user(AppTaskCollectSensorData, /* 任务函数 */
, /* 任务优先级 */
&AppTaskCollectSensorDataStk, /* 任务栈 */
sizeof(AppTaskCollectSensorDataStk)); /* 任务栈大小,单位字节数 */ HandleTaskScreenUpdate = os_tsk_create_user(AppTaskScreenUpdate, /* 任务函数 */
, /* 任务优先级 */
&AppTaskScreenUpdateStk, /* 任务栈 */
sizeof(AppTaskScreenUpdateStk)); /* 任务栈大小,单位字节数 */ HandleTaskLockLink = os_tsk_create_user(AppTaskLockLink, /* 任务函数 */
, /* 任务优先级 */
&AppTaskLockLinkStk, /* 任务栈 */
sizeof(AppTaskLockLinkStk)); /* 任务栈大小,单位字节数 */ }

Keil RTX使用 os_mut_init 报Hard Fault 错误解决记录的相关教程结束。

《Keil RTX使用 os_mut_init 报Hard Fault 错误解决记录.doc》

下载本文的Word格式文档,以方便收藏与打印。