打印
[STM32F1]

STM32f103VC+uCOS-II 调试设置断点进入HardFault_Handler

[复制链接]
3816|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
szlchzhi|  楼主 | 2015-8-20 11:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
遇到奇怪问题:调试时设置断点,100%进入HardFault_Handler;而全速跑没问题,功能正常。
折腾了一天,头大了。
芯片用的是STM32F103VCT6,uCOS-II 的版本是V2.91。没进行移植,直接用野火uCOS-II模板。
部分源代码:
void AppTaskAppMgr(void *p_arg)
{
        INT8U err;
        APPMSG_MSG_STRUCT_Def *pmsg;
        (void)p_arg;

        BeepDrvInit();
        LampDrvInit();
        ClockDrvInit();
        AppMgrClock(OS_TRUE);

        BeepDrvBeep(1,1);
        while(OS_TRUE)
        {
                pmsg = (APPMSG_MSG_STRUCT_Def*)NULL;
                pmsg = OSQPend(gpOSEventAppMgr,OS_TICKS_PER_SEC*50/1000,&err);
                if(OS_ERR_NONE == err)
                {
                        if(APPMSG_SYMBOL_WIFI == pmsg->symbol)
                                AppMgrNetAnalyse(pmsg);
                        else if (APPMSG_SYMBOL_APPMGR == pmsg->symbol)
                                AppMgrMsgAnalyse(pmsg);
                        else if(APPMSG_SYMBOL_PERIPHERAL == pmsg->symbol)
                        {
                                if(PERIPHERAL_DEV_ADDR_SendCard == pmsg->type)
                                        AppMgrMsgSendCardAnalyse((void*)pmsg);
                                else if(PERIPHERAL_DEV_ADDR_GetCard == pmsg->type)
                                        AppMgrMsgGetCardAnalyse((void*)pmsg);                               
                                else if(PERIPHERAL_DEV_ADDR_Gate == pmsg->type)
                                        AppMgrMsgGateAnalyse((void*)pmsg);
                                else
                                        AppMsgFreeMsg((void*)pmsg);
                        }
                        else
                       
                                AppMsgFreeMsg((void*)pmsg);
                }


                BeepDrv();
                LampDrv();       
}

屏蔽掉红色的代码可随便函数内部设置断点,单步、全速运行都正常。没屏蔽设置断点后再全速跑则进入HardFault_Handler错误。单步跟在任务切换死掉。仔细检查了程序,未能发现内存溢出的可能。指针指向错误也未没发现。

OS_EVENT *gpOSEventAppMgr;

#define APPMGR_Q_NUM_MAX 20
static void *gpAppMgrQMsg[APPMGR_Q_NUM_MAX];
        //创建管理事件消息队列
        do
        {
                gpOSEventAppMgr=OSQCreate(gpAppMgrQMsg,APPMGR_Q_NUM_MAX);
        }while(NULL == gpOSEventAppMgr);
沙发
amanda_s| | 2015-8-20 15:11 | 只看该作者
你看看这个hardfault诊断的**,看看能不能找到更多的线索。
https://bbs.21ic.com/forum.php?mo ... highlight=hardfault

使用特权

评论回复
板凳
szlchzhi|  楼主 | 2015-8-20 17:40 | 只看该作者
amanda_s 发表于 2015-8-20 15:11
你看看这个hardfault诊断的**,看看能不能找到更多的线索。
https://bbs.21ic.com/forum.php?mod=viewthre ...

感谢您的热心帮助~

使用特权

评论回复
地板
szlchzhi|  楼主 | 2015-8-20 17:41 | 只看该作者
问题找到了,是J-LINK硬件版本过低(V4.35),更新成V4.90后一切正常~~

使用特权

评论回复
5
天灵灵地灵灵| | 2015-8-21 10:54 | 只看该作者
如果脱离电脑单独运行是什么样的?

使用特权

评论回复
6
天灵灵地灵灵| | 2015-8-21 10:54 | 只看该作者
如果是调试器的问题,脱离PC应该运行就正常了,所以这样不用多虑。

使用特权

评论回复
7
可可球| | 2015-8-23 21:28 | 只看该作者
J-LINK硬件版本过低

使用特权

评论回复
8
稳稳の幸福| | 2015-8-24 08:44 | 只看该作者
确实这个是跟你的调试器有关的,也可能调试器的版本低,或许可以升级一下固件解决。

使用特权

评论回复
9
Thor9| | 2015-8-24 20:56 | 只看该作者
J-LINK硬件版本过低(V4.35),更新成V4.90后一切正常,恭喜问题解决

使用特权

评论回复
10
badboyhzg| | 2015-8-31 12:05 | 只看该作者
过来看看。帮顶  有没有想法做项目 ??
诚心寻求反汇编 逆向高手长期合作 最好在广州周边的 沟通比较方便 主要帮我把程序反汇编出来 找到程序里面的算法格式 程序接口 数据库 及通讯协议 骗子勿扰 QQ 348286236 加好友时 备注 汇编 逆像

使用特权

评论回复
11
li123452| | 2016-3-23 19:38 | 只看该作者
makr下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

6

帖子

0

粉丝