OSEck中odo_vect2pcb的作用
在基于OSEck RTOS的TI DSP中,中断能够作为一个进程存在,在OSEck系统中,进程分为两类:优先级进程,中断进程。
当可屏蔽中断(INT4~15)发生后,就会运行相应的中断vector,在vector的代码中会找到注冊在该中断号上的进程,然后由OSEck负责调度,进而切换到可屏蔽中断进程。该中断进程与优先级进程类似,相同有PCB(进程控制块),而在odo_vect2pcb数组中就存储了可屏蔽中断号(INT4~15)与中断进程PCB的映射(这就是vect2pcb的含义)。odo_vect2pcb数组的索引作为中断号,索引相应的数组的值存储PCB指针。
比如,能够将TI DSP corePac的INTC模块中的eventCombiner的输出event0~3的中断服务程序创建为中断进程。如能够将event0绑定在INT5中断上,这样INT5中断发生后就会运行_vector5。然后通过以下的汇编代码odo_vect2pcb+vec_number*4找到event0相应的中断进程的PCB指针,OSEck就会切换到该进程运行。这里PCB结构中有个变量指示了进程的入口点,入口点就是event0的中断服务程序,每次中断发生后。切换到中断进程后,就会从该入口点处開始运行。
odo_vect2pcb[0~15] = {NULL,pcb1,...,pcb15};
INT0相应RESET。应该不须要设置中断进程。
.sect ".vectors"
;RESET中断的vector。 __vector0:
.nocmp
BNOP CheckFunc, 5
.align 32 ;vector1是用于NMI/Exception处理的。
__vector1:
.nocmp
;把栈指针B15的值写到GPLYB寄存器,注意,这里牺牲了GPLYB寄存器的值,来保存B15的值,B15中存储的是跳转到vector1之前的进程的栈指针,所以要保存起来。
MVC B15, GPLYB
;把事先准备好的exception的栈指针赋值给B15(栈指针,当执行某进程时。B15就指向进程的栈),这样在处理exception时,就会用特定的分配好的栈 exceptionErrorStackPtr。
MVKL exceptionErrorStackPtr, B15
MVKH exceptionErrorStackPtr, B15
LDW *B15[0], B15
;跳转到检查错误的函数运行,BNOP checkErrorFunc 5指令等同于B checkErrorFunc, NOP 5。
BNOP checkErrorFunc, 5 ;默认的vector2~15的实现。用".macro"宏来实现。 vector_macro .macro vec_num
.align 32
__vector:vec_num::
STW B11,*B15-- ;将B11的值保存在栈中(B15)。
||MVKL handlerFunc,B11 ;||表示本条指令与上一条指令是并行运行的。仅仅占一个cycle的时间。
MVKH handlerFunc,B11
;跳转到handlerFunc函数,由于B指令有5个cycle的延迟,且本BNOP指令中已包括了1个NOP,所以用户能够在剩余的4个cycle中加四条指令运行。如以下的四条指令,这些指令运行完后,将真正切换到handlerFunc函数运行。
BNOP B11,1
STW A11,*B15--
STW A10,*B15--
MVKL odo_vect2pcb+vec_number*4,A11 ;这样A11中保存了中断进程的pcb(进程控制块)指针
MVKH odo_vect2pcb+vec_number*4,A11
.endm vector_macro 2
vector_macro 3
vector_macro 4
vector_macro 5
vector_macro 6
vector_macro 7
vector_macro 8
vector_macro 9
vector_macro 10
vector_macro 11
vector_macro 12
vector_macro 13
vector_macro 14
vector_macro 15
OSEck中odo_vect2pcb的作用的更多相关文章
- web.xml中load-on-startup的作用
如下一段配置,熟悉DWR的再熟悉不过了:<servlet> <servlet-name>dwr-invoker</servlet-name> <ser ...
- C#中构造函数的作用
C#中构造函数的作用 共同点: 都是实例化对象,初始化数据的 默认构造是说所有的类都从祖先object那继承了空参的构造方法,你不写与写空参构造都存在,而有参数的构造一般是自己写的,写就有不写就没有, ...
- MySQL数据库中delimiter的作用概述
以下的文章主要是向大家描述的是MySQL数据库中delimiter的作用是什么?我们一般都认为这个命令和存储过程关系不大,到底是不是这样的呢?以下的文章将会给你相关的知识,望你会有所收获. 其实就是告 ...
- js中getBoundingClientRect的作用及兼容方案
js中getBoundingClientRect的作用及兼容方案 1.getBoundingClientRect的作用 getBoundingClientRect用于获取某个html元素相对于视窗的位 ...
- Linq中关键字的作用及用法
Linq中关键字的作用及用法 1.All:确定序列中的所有元素是否都满足条件.如果源序列中的每个元素都通过指定谓词中的测试,或者序列为空,则为 true:否则为 false. Demo: 此示例使用 ...
- JAVA中protected的作用
JAVA中protected的作用 1.public:public表明该数据成员.成员函数是对所有用户开放的,所有用户都可以直接进行调用 2.private:private表示私有,私有的意思就是 ...
- url中#号的作用
url中#号的作用就是本页面位置跳转 比如这个url地址:http://www.aaaaa.com/index.html?ad=34&m=c#red red就是index.html页面的依哥位 ...
- Java中hashCode的作用
转 http://blog.csdn.net/fenglibing/article/details/8905007 Java中hashCode的作用 2013-05-09 13:54 64351人阅 ...
- struts2 中 Actionsupport 的作用
struts2 中 Actionsupport 的作用 Action 跟 Actionsupport 的区别 当我们在写action的时候,可以实现Action接口,也可以继承Actionsu ...
随机推荐
- bzoj 2791 [Poi2012]Rendezvous 基环森林
题目大意 给定一个n个顶点的有向图,每个顶点有且仅有一条出边. 对于顶点i,记它的出边为(i, a[i]). 再给出q组询问,每组询问由两个顶点a.b组成,要求输出满足下面条件的x.y: 从顶点a沿着 ...
- 我要好offer之 链表大总结
单链表是一种递归结构,可以将单链表看作特殊的二叉树(我把它叫做一叉树) 单链表的定义: /** * Definition for singly-linked list. * struct ListNo ...
- 【NOIP2016练习】T2 花花的聚会 (树形DP,倍增)
题意: 花花住在 H 国.H 国有 n 个城市,其中 1 号城市为其首都.城市间有 n 1 条单向道路.从任意一个城市出发,都可以沿着这些单向道路一路走到首都.事实上,从任何一个城市走到首都的路径是唯 ...
- Linux 之 用户及用户组
用户及用户组 参考教程:[千峰教育] 命令: whoami: 作用:查看当前登录的用户. 格式:whoami /etc/passwd: 说明:该文件存放了系统中所有的用户,每一行的每一列如下: 用户名 ...
- JavaScript 在双引号之间引用变量
可以采用 ' + 变量 + ' .
- 小程序 之使用HMACSHA1算法加密报文
首先说说我们前端常用的加密技术, 我们常用的加密技术有:如MD5加密,base64加密 今天要说的是HMACSHA1加密技术 先介绍下什么是SHA1算法, 安全哈希算法(Secure Hash Alg ...
- Codeforces 691F Couple Cover
可以暴力预处理出每一种小于3000000的乘积有几种.询问的时候可以用总的方案减去比p小的有几种o(1)输出. #pragma comment(linker, "/STACK:1024000 ...
- [开源] FreeSql.Tools Razor 生成器
FreeSql 经过半年的开发和坚持维护,在 0.6.x 版本中完成了几大重要事件: 1.按小包拆分,每个数据库实现为单独 dll: 2.实现 .net framework 4.5 支持: 3.同时支 ...
- 项目心得——按照指定的日期/时间创建Date对象
项目心得——按照指定的日期/时间创建Date对象 有时,在做项目中,需要获得指定日期的Date对象,这个指定的日期或者时间可能不是当前的时间.下面讲解两种获取指定日期/时间的Date对象的方法: pa ...
- 【spring data jpa】使用repository进行查询,使用userRepository.getOne(id)和userRepository.findById(id)无法从数据库查询到数据
如题: 使用repository进行查询,使用CrudRepository自带的getOne()方法和findById()方法查询,数据库中有这条数据,但是并不能查到. userRepository. ...