搜索
bottom↓
回复: 9

stm32移植日志之四

[复制链接]

出0入0汤圆

发表于 2009-9-1 10:49:41 | 显示全部楼层 |阅读模式
阅读
本文请参考《都江堰操作系统与嵌入式系统设计》第15章,该书可在www.djyos.com下载。


    本篇先讲一下cm3移植版本中断系统的总体设计,代码还在调试中,等调试完了再帖。
    回忆一下《stm32移植日志之一》,那里说道,djyos移植有一个重要的工作就是中断系统的决策,djyos允许在中断服务中执行系统调用,可能会使比被中断线程更高优先级的线程就绪,中断返回时将直接返回到高优先级的线程,这就需要有一个被中断线程的栈、高优先级线程栈、中断栈直接的数据交换过程,因此,中断系统的决策往往跟设计线程上下文栈同时进行。
1、 中断和线程上下文的栈设计

    我们知道,djyos把中断分为异步信号和实时中断,实时中断是不允许调用可能导致发生调度的api的,其栈结构与线程调度无关,可以自由设计,这里要讲的是异步信号的栈。我们先看看在中断里面使最高优先级的事件发生变化的执行过程:
a)         正在执行低优先级事件A,该事件由线程A处理,发生中断。
b)        把xpsr、pc、lr、r12,r3~r0依次压入线程A的栈,硬件执行。
c)         取中断向量,并切换成使用msp做栈指针。
d)        ISR执行过程中,使高优先级的事件B就绪,该事件由线程B处理。
e)         中断返回线程状态,因线程B的优先级高,直接返回线程B。
    大家注意到了,被中断的是线程A,返回的是线程B,一般来说,中断是从哪里中断,ISR执行后,就返回哪里继续执行。要实现返回线程B,我们要在中断函数返回前做两个工作:
a)         要保存线程A的完整上下文,中断自动入栈的只有8个寄存器,但线程上下文要求保存全部寄存器。
b)        制造被中断线程是线程B的假象,欺骗CPU,使中断返回的时候,把线程B上下文中的由硬件自动执行xpsr、pc、lr、r12,r3~r0恢复到对应的寄存器中外,还要手工恢复如4~r7。
栈结构设计如图 1所示

(原文件名:stm32移植之四图1.jpg)

图 1 中断和线程统一的上下文设计

    djyos for cm3的上下文栈结构与arm的不同,cm3中,因为中断有自动入栈操作,线程上下文模拟中断上下文,使两者寄存器排列做成一致的话,可以使中断里的上下文切换操作变得非常简单,保存线程A的上下文,实际上只需要把当前psp值保存到线程上下文中即可;模拟线程B被中断的假象,也只需要把线程B的当前栈指针从上下文中copy到psp寄存器中。但这样做的代价是,非中断的上下文切换将变得复杂得多。而在arm7中,线程上下文完全按照寄存器编号由高到低排列,保存上下文只要一条stmfd指令,恢复上下文只要一条ldmfd指令。当然,cm3中还要微调上下文中的PC值,调整方法尚在验证中,暂且不表。
2、 系统中断结构设计

    图 2来自《都江堰操作系统与嵌入式系统设计》,是djyos中断系统的总图,所有djyos移植都要实现这个图,也就是使硬件平台的中断管理功能与图中结构匹配。

(原文件名:stm32移植之四图2.jpg)

图 2 中断结构总图


    先把图中各开关和cm3的硬件对好入座吧:
    中断线使能开关:用NVIC寄存器中的SETENA和CLRENA寄存器组。
    异步信号使能开关:所有异步信号的优先级均被设置为最低优先级,因此只要把BASEPRI寄存器值设为255,就相当于禁止了所有异步信号中断,设为0则允许所有异步信号(因总中断有单独开关,无须担心)。
    总中断使能开关:置位PRIMASK则禁止所有中断,包括实时中断和异步信号。大家注意,PRIMASK寄存器禁止的,除了中断以外,系统异常也被禁止了,只留下NMI和硬fault。这是合理的,系统中,还有什么比实时中断还紧急的事情吗?没有了,既然连实时中断都禁止了,系统异常自然不能捣乱,是必须禁止的。
    中断类型选择器:这是一个软开关,设置一个中断为实时中断还是异步信号,并没有改变该中断相关的硬件寄存器,仅仅该了一下内存中的标志为,以及中断向量表中的指针。
头像被屏蔽

出0入0汤圆

发表于 2009-9-1 10:55:39 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2009-9-9 15:23:48 | 显示全部楼层

出0入0汤圆

发表于 2010-2-10 19:37:21 | 显示全部楼层
这种移植和uCOS的移植是不是有相同之处?

出0入0汤圆

 楼主| 发表于 2010-2-10 19:46:37 | 显示全部楼层
我没有移植过ucosii,所以不知道是否有相同之处。
stm32的移植日志共有6篇,都在本坛的下载帖处提供下载,有兴趣的话,您可以阅读后自己比较一下。

出0入0汤圆

发表于 2010-12-10 22:20:53 | 显示全部楼层
我顶!!!!

出0入0汤圆

发表于 2011-11-6 21:09:35 | 显示全部楼层
关注
头像被屏蔽

出0入0汤圆

发表于 2011-11-6 22:23:18 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2011-12-29 10:49:04 | 显示全部楼层
顶起
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 17:11

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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