• 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)); /* 任务栈大小,单位字节数 */    
    
    }
  • 相关阅读:
    雅虎军规34条 (一)
    jetty和tomcat的区别
    Jsp--9大内置对象
    java 重定向和转发的区别
    layer弹出层
    html 锚点
    css绘制三角形
    原生js下拉菜单联动
    layui省市区下拉菜单三级联动
    tp5时间格式转换
  • 原文地址:https://www.cnblogs.com/kmust/p/7112988.html
Copyright © 2020-2023  润新知