Chinaunix首页 | 论坛 | 博客
  • 博客访问: 985056
  • 博文数量: 327
  • 博客积分: 9995
  • 博客等级: 中将
  • 技术积分: 4319
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-25 11:21
文章存档

2011年(31)

2010年(139)

2009年(157)

我的朋友

分类: C/C++

2010-12-26 19:41:43

一:OS_CPU.H
1、定义与编译器无光的数据类型
只是按照不同的编译器编写对应的数据类型的typedef 对应于ARM7的数据类型的编写如下

2 与处理器相关的代码
先定义中断的实现方式,预先设定的中断方式有三种,在ARM7中设置为方式 2

#define OS_CRITICAL_METHOD 2/*选择开,关中断的方式 */

接下来的一段是我暂时还没有完全搞懂的一部分,只知道是设定了12个软件中断的函数,当调用这
些函数之前都会执行对应中断号的事情。具体的看到后面应该能完全搞懂软件中断的实现方式,
该段代码在后面的文件中会有具体的解释,这里暂时不看
定义堆栈的生长方式,ARM7内核支持两种生长方式,但是ADS的C语言编译器只支持从上往下的生
长方式,因此:
#define OS_STK_GROWTH 1 /* 堆栈是从上往下长的,0-从下往上的生长方式 */
最后几行分别定义了用户模式01和系统模式1f以及IRQ中断禁止的指令80三个立即数,方便调用.
还有两个预定义往后看应该知道作用,暂不考虑,不是很重要.

软中断:
中断不返回形式:
void _swi(swi_num) swi_name(arguments);
返回一个结果到R0中
int _swi(swi_num) swi_name(arguments);
最多可以返回四个结果R0-R3到一个结构struct type{ int a,b,c,d}中
type(返回类型) _value_in_regs(返回多个结果的修饰符) _swi(swi_num) swi_name(arguments);
在ARM中实现软中断的方法我在blog里面搜了很多文章也没有看到讲的通俗一点的,还是自己看ARM的移植代码吧首先定义了一堆软中断的中断号,其中0和1的中断服务子程序是用汇编编写的,其他的都是在c语言编写的中断服务子程序SWI_Exception中。

在线浏览地址:
 
阅读(2207) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~