首页 > 嵌入式软件 > vxworks

异常和中断处理过程是每个体系结构和OS都要面对的重要问题,本文从硬件角度以及软件角度来分析PowerPc这个过程,文字水平有限,将就着看。

本文引用地址: http://www.21ic.com/embed/software/vxworks/201801/50286.html

PowerPC定义了十几种异常,其中常见的如DataTLB miss, Instruction TLB miss, external input....每一个都有固定的地址(ivorn),从物理地址0x100开始.0x500是中断入口,0xe00是DTLBmiss,0xf00是itlbmiss入口.首先整体了解一下中断发生时硬件/软件处理流程,硬件会做什么,OS软件要做什么。

PowerPC 中断的硬件处理流程:(ePAPR第四章)

1. 把正在执行的指令序列下一条指令地址保存到中断寄存器SRR0(Save/RestoreRegiser 0)。

2. 把当前 MSR 的内容保存到 SRR1。

3. 把 MSR 某些比特置为 0,如MSR[SPE,WE,EE,PR,FP,FE0,FE1,IS,DS]are 0 by all interrupts.

【注】:PowerPC有两种执行模式,分别为用户模式(UserMode) 和特权模式(SupervisorMode), MSR[PR]=0 表示特权模式。Linux内核运行在特权模式,而普通程序运行在用户模式。vxWorks全部运行在特权模式。

1. 在新的 MSR 状态下,从中断向量偏移处开始指令读取和执行。

2. 外部中断处理结束时,必须通过 rfi 指令返回。

3. rfi 的执行,会把 SRR1 的内容恢复到 MSR, 并从 SRR0 所保存的地址处继续执行。

PowerPC Linux (软件)中断处理程序

异常向量ExternalInput处的处理程序主要分为以下几个步骤:

1. NORMAL_EXCEPTION_PROLOG宏

建立用户中断处理程序的栈帧,并把一些寄存器的值保存在栈帧中,它们在栈帧中布局由structpt_regs 定义。

2. 执行 do_IRQ

在irq_enter()函数中更新preempt_count。 读MPIC的IACK寄存器,通知MPIC开始处理该中断,同时获取MPIC中断号,映射为软件中断号,找到并运行注册在该软件中断号上的用户中断处理程序,最后写MPIC的EOI寄存器,通知MPIC中断处理结束。

在irq_exit()中更新preempt_count,调用invoke_softirq()处理pending的软中断。

3. ret_from_except

某些条件满足时,进行进程调度和信号处理,最后调用rfi指令返回。

PowerPC vxWorks(软件)中断处理程序

VxWorks的处理流程大体上与linux一样,只是在代码实现细节上存在些区别。

代码的调用路径:usrInit ->excVecInit ->excVecConnectCommon

代码实现过程:

把一段机器码excConnectCode[]拷贝到每个异常vector的入口地址处(excVecConnectCommon里实现),再重新计算异常处理函数的地址并覆盖通用处理函数地址。

[cpp] view plain copyLOCAL INSTR excConnectCode[]=

{

/* data word byte opcode operands */

0x7c7343a6, /* 0 0x00 mtspr SPRG3, p0 */

0x7c6000a6, /* 1 0x04 mfmsr p0 */

0x546303da, /* 2 0x08 rlwinm p0,p0,0,15,13 clear MSR[CE] */

0x7c600124, /* 3 0x0c mtmsr p0 */

0x60000000, /* 4 0x10 nop */

/* If either ofthe above, add 4 words/0x10bytes to following offsets */

0x7c6802a6, /* 1 0x04 mflr p0 */

0x48000001, /* 2(6) 0x08/18 bl xxxEnt */

0x38610000, /* 3 0x0c addi r3, sp, 0 */

0x9421fff0, /* 4 0x10 stwu sp, -FRAMEBASESZ(sp) */

0x48000001, /* 5(9) 0x14/24 bl xxxHandler */

0x38210010, /* 6 0x18 addi sp, sp, FRAMEBASESZ */

0x48000001 /* 7(11) 0x1c/2c bl xxxExit */

};

整个过程中最关键的就是这段机器码数组,一共12条指令。

[cpp] view plain copy0x7c7343a6, /* 0 0x00 mtspr SPRG3, p0 */

0x7c6000a6, /* 1 0x04 mfmsr p0 */

0x546303da, /* 2 0x08 rlwinm p0,p0,0,15,13 clear MSR[CE] */

0x7c600124, /* 3 0x0c mtmsr p0 */

0x60000000, /* 4 0x10 nop

首先清MSR[CE],防止在保存中断context时被CE中断打断

[cpp] view plain copy0x7c6802a6, /* 1 0x04 mflr p0 */

0x48000001, /* 2(6) 0x08/18 bl xxxEnt */

0x38610000, /* 3 0x0c addi r3, sp, 0 */

0x9421fff0, /* 4 0x10 stwu sp, -FRAMEBASESZ(sp) */

0x48000001, /* 5(9) 0x14/24 bl xxxHandler */

0x38210010, /* 6 0x18 addi sp, sp, FRAMEBASESZ */

0x48000001 /* 7(11) 0x1c/2c bl xxxExit */

xxxEnt是intEntorexcEnt.

xxxHandler是 excIntHandle or excExcHandle

xxxExit是intExitor excExit.

其中intEnt/intExit,excEnt/excExit是通用中断/异常入口和出口函数,中断进前者,异常进后者,主要作用是保存context以及恢复context,设置中断栈,保存易失的寄存器变量。。。。。

excIntHandle/excExcHandle也是通用处理函数,主要作用是打印下异常信息,对于关键异常或者中断的话,都有自己单独的处理函数,会在接下来的初始化过程中逐个把xxxHandler换成专用的处理函数,实现的方法是直接修改机器码后16bit。

MMU初始化的时候替换excExcHandle为mmuPpcDataTlbMissHandler/mmuPpcInstTlbMissHandler

MPIC初始化的时候会用vxbMpicIntHandler替换excIntHandle来调用ISR

WD/Timer初始化的时候也会替换成自己的Handler

至此,真正中断/异常来的时候会执行intEnt->vxbMpicIntHandler->intExit

下面的代码实现是intEnt,可以看看里面都做了哪些事情

[cpp] view plain copy864 /*

865 *ThePowerPC Family doesn't support the notion of an interrupt

866 * stackinhardware. To avoid having to allowspacefor interrupt

867 *handlingin each task stack, this stub switches from the task

868 * stacktothe interrupt stack by changing the value of the SP(R1).

869 * Iftheinterrupt is nested, we don't need to switch stacks but

870 * wedoneed to check for overflow.

换一批

延伸阅读

[趣科技] 接近绝对零度:世界上最冷的电子芯片

接近绝对零度:世界上最冷的电子芯片

不过,科学家从未停止尝试。巴塞尔大学的物理学家曾经提出,利用磁冷却使纳米电子设备的温度降到接近绝对零度,这种方法能够实现破纪录的低温。磁冷却的原理是这样的:在绝热条件下,当外加磁场逐渐减小时,系统会渐渐冷却。在减小磁场前,磁化产生的热量需要......

关键字:电子芯片 绝对零度

[疯狂史] PCB设计软件大解析,哪一款才是你的菜?

PCB设计软件大解析,哪一款才是你的菜?

PCB(Printed Circuit Board)设计软件经过多年的发展、不断地修改和完善,或优存劣汰、或收购兼并、或强强联合,现在只剩下Cadence和Mentor两家公司独大。“......

关键字:PCB设计软件

[趣科技] 让普通物体秒变智能!加州大学展示一款基于 WiFi的便携贴产品

让普通物体秒变智能!加州大学展示一款基于 WiFi的便携贴产品

“智能”联网设备可以让日常生活变得更加轻松,但它们通常需要搭配电池来使用。好消息是,加州大学圣迭戈分校的研究团队,刚刚展示了一款基于 WiFi、名叫 LiveTag 的解决方案。其采用低成本的标签打印方......

关键字:智能设备 WIFI

[真心话] 工程师中大热的的“技术型复合人才”究竟是什么?

工程师中大热的的“技术型复合人才”究竟是什么?

经过半年的工作和学习,突然想到以前在哪里听说,技术型复合人才比较抢手。单从技术角度看,我认为在任何科技领域,除了能够出色完成自己手中的工作外,还能帮助两个、多个研发人员甚至整个团队解决从理论、方案到工程实现中所面临各种难题,这样的人才应该能......

关键字:工程师

[新鲜事] 这家被指抄袭谷歌的红芯浏览器承认基于开源架构,仍称“有创新”

这家被指抄袭谷歌的红芯浏览器承认基于开源架构,仍称“有创新”

深陷“造假”风波的国产浏览器品牌红芯,再度发声。8月16日晚,红芯时代(北京)科技有限公司发布声明称:红芯浏览器内核是基于通用的浏览器内核架构(即Chromium开源项目,但不是Chrome浏览器)的基础上进行......

关键字:浏览器 谷歌 红芯浏览器

[真心话] 为什么说语文和英语是硬件工程师的天敌?

为什么说语文和英语是硬件工程师的天敌?

因为我文科学的不好,所以我才去学理工科的。语文课和英语课,是工程师的天敌。很多人以此为借口,找理由证明自己语言天赋太差,但反观学霸,文科成绩都也不错。古代科举制度下,对文学的极端重视,也反应了文字能力,是个人逻辑性和创造性的的重要展现。连自......

关键字:硬件工程师 语文 英语
条评论

我 要 评 论

网友评论

大家都爱看

  • 扇出型晶圆级封装的优势和挑战!

    我们有能力创造一些能保持前代性能并且更好更小的电子设备,例如今天的可穿戴设备、智能手机或平板电脑,这是由于很多因素超过摩尔定律而快速发展,从而能够从底层的嵌入组件发展到今天把它们封…

    2018-03-29
  • Xilinx推出革命性的新型自适应计算产品

    自适应和智能计算的全球领先企业赛灵思公司(Xilinx, Inc.,(NASDAQ:XLNX)),近日宣布推出一款超越FPGA功能的突破性新型产品,名为ACAP(Adaptive Compute Acceleration Platform,自适应计算加速…

    2018-03-20
  • 赛普拉斯为树莓派3 B+ IoT单板计算机提供强大稳定的无

    先进嵌入式系统解决方案的领导者赛普拉斯(纳斯达克代码:CY)近日宣布其Wi-Fi®和蓝牙®combo解决方案为全新的树莓派 3 B+(Raspberry Pi 3Model B+)IoT单板计算机提供强大稳定的无线连接…

    2018-03-20
  • 观看直播领红包,SEED-A10加速卡助力人工智能

    随着云服务器、云计算的发展,大家对硬件加速的需求越来越多,但是随着设备功耗的上升、性能需求越来越高,常规加速设备以及开始不能满足需求,因此FPGA逐渐在硬件加速中找到了自己的位置,而艾…

    2018-03-19
  • 特朗普:博通不得以任何形式收购高通

    白宫周一(3月12日)晚发出声明,川普(特朗普)总统出于“国家安全”考量、禁止新加坡博通公司(Broadcom)收购美国高通公司(Qualcomm)。

    2018-03-14