UCOSII进入HardFault_Handler()

最近在使用UCOSII的时候,程序会跑飞,停在HardFault_Handler函数里的死循环while(1)中,百度了一下通常有一下原因:

1.数组越界

2.内存溢出,访问越界

3.堆栈溢出,程序跑飞

4.中断处理错误

经反复核对,依然没有发现问题,后来又百度到UCOSII有的版本确实有bug,本人使用的v2.86版本确实有问题

os_core.c文件中的任务调度函数OS_Sched(),一下是修改后的正确代码

void  OS_Sched (void)
{
#if OS_CRITICAL_METHOD == 3u                           /* Allocate storage for CPU status register     */
    OS_CPU_SR  cpu_sr = 0u;
#endif    OS_ENTER_CRITICAL();
    if (OSIntNesting == 0u) {                          /* Schedule only if all ISRs done and ...       */
        if (OSLockNesting == 0u) {                     /* ... scheduler is not locked                  */
            OS_SchedNew();
            OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];
            if (OSPrioHighRdy != OSPrioCur) {          /* No Ctx Sw if current task is highest rdy     */
#if OS_TASK_PROFILE_EN > 0u
                OSTCBHighRdy->OSTCBCtxSwCtr++;         /* Inc. # of context switches to this task      */

#endif
                OSCtxSwCtr++;                          /* Increment context switch counter             */
                OS_TASK_SW();                          /* Perform a context switch                     */
            }
        }
    }
    OS_EXIT_CRITICAL();
}

虽然修改成功了,但是问题还是没有解决,程序依然在任务调度函数OS_Sched()中的 OS_TASK_SW()进入HardFault_Handler(),最后经测试,本人在中断函数中使用了delay延时函数,delay延时函数使用的是SysTick定时器,把中断中的延时函数delay注释掉就不会进入HardFault_Handler()了。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值