OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2338|回复: 2

求助:F103+UCOSII出现hardfault

[复制链接]

1

主题

4

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2019-8-27
在线时间
2 小时
发表于 2019-8-30 10:47:42 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 itdong 于 2019-8-30 10:56 编辑

F103+UCOSII出现hardfault
用的是psp
<1>00-08 05:44:15[23] lr                0xFFFFFFFD
<1>00-08 05:44:15[23] psp                0x2000B4CC
<1>00-08 05:44:15[23] msp                0x20002E40
<1>00-08 05:44:15[23] stk                0x2000B4CC


<1>00-08 05:44:15[23] r0        0x00000000
<1>00-08 05:44:15[23] r1        0x00000017
<1>00-08 05:44:15[23] r2        0x0801F520
<1>00-08 05:44:15[23] r3        0x2000F1B0
<1>00-08 05:44:15[23] r12        0x0000000A
<1>00-08 05:44:15[23] lr        0x0800925B
<1>00-08 05:44:15[23] pc        0x08008F1E
<1>00-08 05:44:15[23] xPSR        0x41000000
<1>00-08 05:44:15[23] CFSR=0x00010000
<1>00-08 05:44:15[23] HFSR=0x40000000
<1>00-08 05:44:15[23] DFSR=0x0000000b
<1>00-08 05:44:15[23] AFSR=0x00000000
<2>00-08 05:44:15[23] Reset: HardFault


查了下是  UsageFault  的最低位
[0] UNDEFINSTR Undefined instruction UsageFault:
0 = no undefined instruction UsageFault
1 = the processor has attempted to execute an undefined instruction.
When this bit is set to 1, the PC value stacked for the exception return points to the undefined instruction.
An undefined instruction is an instruction that the processor cannot decode.


0x08008F1E地址对应的代码是:
    0x8008f04: 0xf240 0x431a  MOVW      R3, #1050               ; 0x41a
    0x8008f08: 0xf8df 0x24e8  LDR.W     R2, [PC, #0x4e8]        ; OS_EventTaskRdy::__FUNCTION__
    0x8008f0c: 0xf8df 0x14f0  LDR.W     R1, [PC, #0x4f0]        ; 0x8022bc8 (134360008)
    0x8008f10: 0x2000         MOVS      R0, #0
    0x8008f12: 0xf7fa 0xf8f7  BL        com_prt                 ; 0x8003104
--->prio = (INT8U)((y << 3u) + x);                      /* Find priority of task getting the msg       */
    0x8008f16: 0xfa5f 0xf888  UXTB.W    R8, R8
    0x8008f1a: 0xea5f 0x00c8  LSLS.W    R0, R8, #3
    0x8008f1e: 0xfa50 0xf989  UXTAB.W   R9, R0, R9
    ptcb                  =  OSTCBPrioTbl[prio];        /* Point to this task's OS_TCB                 */
    0x8008f22: 0xf8df 0x04a8  LDR.W     R0, [PC, #0x4a8]        ; OSTCBPrioTbl
    0x8008f26: 0xfa5f 0xf989  UXTB.W    R9, R9
    0x8008f2a: 0xf850 0xa029  LDR.W     R10, [R0, R9, LSL #2]
    ptcb->OSTCBDly        =  0u;                        /* Prevent OSTimeTick() from readying task     */
    0x8008f2e: 0x2000         MOVS      R0, #0
    0x8008f30: 0xf8ca 0x0030  STR.W     R0, [R10, #0x30]
    ptcb->OSTCBMsg        =  pmsg;                      /* Send message directly to waiting task       */
    0x8008f34: 0xf8ca 0x5024  STR.W     R5, [R10, #0x24]
    ptcb->OSTCBStat      &= (INT8U)~msk;                /* Clear bit associated with event type        */

对应函数
INT8U  OS_EventTaskRdy (OS_EVENT  *pevent,
                        void      *pmsg,
                        INT8U      msk,
                        INT8U      pend_stat)
{

..........

#if OS_LOWEST_PRIO <= 63u
sys_ptk("%d", pevent->OSEventGrp);
    y    = OSUnMapTbl[pevent->OSEventGrp];              /* Find HPT waiting for message                */
    x    = OSUnMapTbl[pevent->OSEventTbl[y]];
sys_ptk("%d,%d,%d,%d", pevent->OSEventGrp, pevent->OSEventTbl[y], x, y);
    prio = (INT8U)((y << 3u) + x);                      /* Find priority of task getting the msg       */           ----> 出错位置

....

    ptcb                  =  OSTCBPrioTbl[prio];        /* Point to this task's OS_TCB                 */
    ptcb->OSTCBDly        =  0u;                        /* Prevent OSTimeTick() from readying task     */
#if ((OS_Q_EN > 0u) && (OS_MAX_QS > 0u)) || (OS_MBOX_EN > 0u)
    ptcb->OSTCBMsg        =  pmsg;                      /* Send message directly to waiting task       */
#else
    pmsg                  =  pmsg;                      /* Prevent compiler warning if not used        */
#endif


单步调试每次也都是到这个位置就飞了,没有下步头绪了,看着都不像会飞的地方,也跟UsageFault对不起来
单步调试执行完0x8008f1e这句之后就直接触发  hardfault  异常中断了

求助



最佳答案

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2019-8-27
在线时间
2 小时
 楼主| 发表于 2019-8-30 10:47:43 | 显示全部楼层
本帖最后由 itdong 于 2019-8-30 16:16 编辑

已解决
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2019-8-27
在线时间
2 小时
 楼主| 发表于 2019-8-30 14:13:06 | 显示全部楼层
本帖最后由 itdong 于 2019-8-30 15:47 编辑

有没有大神给个方向建议   感谢啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-10 04:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表