关闭
关闭
首页 > 嵌入式软件 > vxworks

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

本文引用地址: http://embed.21ic.com/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.

换一批

延伸阅读

[疯狂史] 当年骗取上亿经费的汉芯造假事件

当年骗取上亿经费的汉芯造假事件

2003年上海交大芯片与系统研究中心主任陈进以一己之力研制出了“汉芯一号”处理芯片。......

关键字:大学 上海交通大学 清华大学 法律

[猎聘集] 高薪都被谁拿走了?中国电子工程师薪酬调查大揭秘

高薪都被谁拿走了?中国电子工程师薪酬调查大揭秘

但是有趣的是,北京和深圳的平均年薪都是在去年的基础上略有涨幅,而上海的平均年薪却涨了接近一万元!此外,上海月薪上万的人数占去参与调查者总人数的35%,北京和深圳其次,占去19.6%和19.2%。......

关键字:电子工程师

[新鲜事] 助力量子通信发展 我国研制出百毫秒级高效量子存储器

助力量子通信发展 我国研制出百毫秒级高效量子存储器

中国科学技术大学教授潘建伟和包小辉等采用冷原子系综,在国际上首次研制出百毫秒级高效量子存储器,为远距离量子中继系统的构建奠定了坚实基础。该成果日前发表在国际权威学术期刊《自然·光子学》上。这为我国量子通信进一步发展提供助力,量子通信发展有望......

关键字:量子通信 量子存储器

[新鲜事] 融资250万美元,Viro推出为企业服务的移动VR开发工具

融资250万美元,Viro推出为企业服务的移动VR开发工具

今天, Viro Media 宣布推出一个简单的移动 VR 开发平台,同时宣布获得 250 万美元融资,投资方有 Softbank/SBNY、Eniac Ventures 和 Lowercase Capital。......

关键字:VR 开发工具 Viro Media

[疯狂史] 互联网史上最贵的域名排名榜

互联网史上最贵的域名排名榜

小编为你盘点互联网史上最贵的域名排名榜。......

关键字:互联网 域名

[新鲜事] 服务器固件出现安全问题,苹果终止与供应商合作!

服务器固件出现安全问题,苹果终止与供应商合作!

据报告,美超微电脑股份有限公司(SuperMicro)技术高级副总裁 Tau Leng 表示,2016年中期,公司发布的服务器固件升级导致苹果内部开发环境出现了安全问题,正因为如此,苹果直接选择了终止与美超微的合作,并退回了已经订购的设备。......

关键字:苹果 服务器

[新鲜事] Intel无人机亮相NBA全明星:不来航拍而是玩扣篮

Intel无人机亮相NBA全明星:不来航拍而是玩扣篮

这年头无人机除了航拍以外,还衍生出了送快递、送鸡拜年、载人飞行等玩法,在前段时间美国职业橄榄球总决赛超级碗中,Intel无人机帮Lady Gaga伴舞,现在更有NBA球员在近日的全明星扣篮大赛中,利用Intel的无人机来配合扣篮表演,让体育......

关键字:Intel 无人机 扣篮
条评论

我 要 评 论

网友评论

大家都爱看

  • 兆易创新研发14nm嵌入式异构AI芯片

    昨日,兆易创新发表公告,重申了收购上海思立微的目的。兆易创新表示,这次产业并购,旨在整合境内优质的芯片设计领域资产,获取智能人机交互领域的核心技术,拓展并丰富公司产品线,在整体上形…

    2018-01-31
  • 华为的优势,就是自家的各种自研芯片

    CPU即中央处理器,是一块超大规模的集成电路,是一台计算机的运算核心和控制核心。它的功能主要是解释计算机指令以及处理计算机软件中的数据。

    2017-08-16
  • 你不知道Ryzen芯片有多火?来看看AMD的股票吧

    据外媒报道,美银美林认为,AMD最新的Ryzen芯片可能会引发一波销售浪潮,进而推动该股继续上涨。它认为AMD股票还有40%以上的上涨空间。

    2017-08-16
  • 国产芯片:厚积薄发,强势崛起

    关于国产芯片,是近几年才有崛起的势头,可是在几年之前,国产芯片还处于“沉睡”的状态,尤其是手机芯片,几乎大部分都依赖进口,而且国外的市场几乎被高通和联发科所垄断,也就展讯还在市场边…

    2017-08-16
  • 为了数据安全 大疆无人机增加隐私飞行功能

    大疆周一表示,在美国陆军因为“网络缺陷”而要求其成员停用大疆无人机后,这家中国无人机制造商将加强无人机的数据安全性。 大疆政策和法务副总裁布伦丹&middot…

    2017-08-15