ucOS III进入硬件错误中断的问题研究

原创 2018年04月16日 11:37:45

硬件平台

STM32F407ZGT6,J-LINK仿真器


软件平台

MDK5.2


问题描述

博主在进行ucOS III的移植过程中,出现任务无法正常切换的现象。于是用J-LINK进行仿真,发现其进入了硬件错误中断,从而进入死循环导致无法正常切换任务。


解决过程

我们知道发生异常时可首先查看LR寄存器中的值,确定当前使用栈指针为MSP还是PSP,当LR的值为0xFFFFFFFD时,使用的堆栈是PSP,为0xFFFFFFE9时,使用的是MSP堆栈。如图R14(LR)的值为0xFFFFFFFD,所以查看PSP指针为0x20002350。
这里写图片描述


由于异常发生时,内核将R0~R3、R12、LR、PC、XPRS 寄存器依次入栈,其中LR即为发生异常前PC将要执行的下一条指令地址。注意STM32寄存器均是32位,且是小端模式。故打开Memory Windows输入地址0x20002350后,看到的第21-24字节即为该指令地址,该地址为0x08001015。
这里写图片描述


在Disassembly窗口里任意位置右键打开Show Disassembly At Address,输入刚刚得到的指令地址0x08001015,跳转过去。
这里写图片描述


定位到CPU_INT_EN();这条语句,故导致硬件错误的是其上面的代码-OS_TASK_SW();出现硬件错误的原因大多是数组越界和堆栈溢出,仔细查看下发现任务并未使用数组,加大堆栈也并没有解决问题。故排除任务本身造成的原因。
这里写图片描述


经过多方查资料,偶然间查看到这么一句话:官方移植的 port 文件里面没有做 FPU 的支持,瞬间想到,MDK应该要关闭使用FPU,点击Option for Target,将红圈标注的地方改成Not Used,问题成功解决!
这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ly666888555/article/details/79958549

uCOS-III开关中断进出临界区的三个宏

* 1. 临界区解释: * 代码的临界短也称为临界区,指处理时不可分割的代码。一旦这部分代码开始执行,则不允许 * 任何中断打入。为确保临界段代码的执行不被中断,在进入临界段之前必须关中断,而临界...
  • gtkknd
  • gtkknd
  • 2016-08-21 16:42:33
  • 2199

ucosIII 中断、临界区与时间管理

本文内容简介 一共分为三部分:>第一部分:任务调度,讲述了任务级和中断级的任务调度和调度点>第二部分:任务切换>第三部分:系统初始化部分。重点在于第三部分代码讲解 ucosIII中断中断:应内部...
  • feather_wch
  • feather_wch
  • 2015-12-18 12:29:19
  • 3925

UCOSIII操作系统的中断和时间管理

在使用UCOS操作系统的时候我们对于中断服务程序的处理就要做一点修改,这个和我们不是用操作系统的时候是不同的。 我们在对某些任务做延时的时候会使用到一些延时函数,中断管理和时间管理 中断管理 ...
  • u012507643
  • u012507643
  • 2016-10-09 08:48:18
  • 2160

UCOSIII 中断

1.UCOSIII 中断处理过程 UCOSIII 是支持中断嵌套的, 既高优先级的中断可以打断低优先级的中断,在 UCOSIII 中使用 OSIntNestingCtr 来记录中断嵌套...
  • u013216061
  • u013216061
  • 2016-12-28 23:26:20
  • 1401

3.uCOSIII中断管理

这是学习中断管理时Onenote的笔记: 概述: 关中断后中断控制器会锁存中断请求,重新开中断后CPU会响应中断;实时系统中应尽可能减少关中断的时间;   中断服务函数的一般操作: 中...
  • chuchaoqundevin
  • chuchaoqundevin
  • 2016-05-24 20:07:18
  • 1588

启动ucosii之三PC_VectSet(uCOS,OSCtxSw)

原型来自PC.C PC_VectSet(uCOS,OSCtxSw); //vect向量号,一个内部中断(软中断)向量号 //参数2-中断处理函数.即中断号为0x80的中断处理函数 void P...
  • aimarpp
  • aimarpp
  • 2013-05-24 14:18:05
  • 3030

UCOSIII中断和时间管理

在使用UCOS操作系统的时候我们对于中断服务程序的处理就要做一点修改,这个和我们不是用操作系统的时候是不同的。我们在对某些任务做延时的时候会使用到一些延时函数,中断管理和时间管理。中断管理UCOSII...
  • z312811966
  • z312811966
  • 2016-08-04 16:59:26
  • 2488

uCOS2中的中断处理过程

 简要目录: 一、uCOS2中的中断处理过程。 二、在一指的情况下,要注意的问题。 三、在一指的情况下,代码可能的执行路径。 四、贴一些网上还好的关于ucos中断处理的帖子。   (...
  • ruan_6
  • ruan_6
  • 2014-03-28 19:57:48
  • 2188

stm32f407 官方ucos-iii 不支持FPU 导致haltfault错误的处理办法

由于官方提供的μCOS-III移植工程中对于浮点寄存器的入栈和出栈处理是错误的,所以网上就流传了 各种修正版本。但是这些修正的代码只能在 MDK4.7 以下版本中可以正常的运行,MDK4.7 及其以上...
  • byteman_wang
  • byteman_wang
  • 2014-06-03 14:11:26
  • 3550

ucOS_III定时器的使用

例子:使用定时器实现按键长安后启动电机转动 OS_TMR START_TMR; //定义定时器变量 Void startTmrCallback(OS_TMR *p_tmr, void *p_a...
  • eryueniao1989
  • eryueniao1989
  • 2017-09-19 11:20:10
  • 416
收藏助手
不良信息举报
您举报文章:ucOS III进入硬件错误中断的问题研究
举报原因:
原因补充:

(最多只允许输入30个字)