arm中断学习及变量长度
在VICVectCntl 寄存器中禁止一个向量IRQ slot 不会禁止中断本身,中断只是变为非向量的形式。
bit 5 1:向量IRQ 使能,当分配的中断请求或软件中断使能,被分配为IRQ 并声明时,可产生一个唯一的ISR 地址对应位的中断请求使能并分配为FIQ并且声明。
bit 4:0 分配给此向量IRQ slot 的中断请求或软件中断的编号。作为一个良好的编程习惯,不要将把相同的中断编号分配给多于一个使能的向量IRQ slot。但如果这样做了,当中断请求或软件中断使能,被分配为IRQ 并声明时,会使用最低编号的slot。
VIC 将所有向量和非向量IRQ“相或”向ARM 处理器产生IRQ 信号。IRQ 服务程序可通过读取VIC 的一个寄存器立即启动并跳转到相应地址。如果有任意一个向量IRQ 发出请求,VIC 则提供最高优先级请求IRQ 服务程序的地址,否则提供所默认程序的地址。该默认程序由所有非向量IRQ 共用。默认程序可读取另一个VIC 寄存器以确定哪个IRQ被激活。
笔者正在学习uCOS-II,移植到ARM时考虑到数据类型的定义,但对于Keil MDK编译器的数据类型定义还是很模糊,主要就是区分不了short int、int、long 和long int占用多少字节。为了得到一个权威的答案,改用编译器自身得出。
一、先定义几个变量,用于存放各数据类型的字节数。
//#include
#include
unsigned char a,b,c,d,e,f,g;
main()
{
a=sizeof(char);
b=sizeof(short int);
c=sizeof(int);
d=sizeof(long);
e=sizeof(long int);
f=sizeof(float);
g=sizeof(double);
while(1);
}
二、查看各变量的存放地址。View---Symbols Window。
三、查看各地址存放的值。View---memory Window。
由上图可知得出:
char占用1个字节
short int占用2字节
int占用4字节
long占用4字节
long int占用4字节
float占用4字节
double占用8字节
我们即可这样定义宏:
typedef unsigned char uint8; // 无符号8位整型变量
typedef signed char int8; // 有符号8位整型变量
typedef unsigned short uint16; // 无符号16位整型变量
typedef signed short int16; // 有符号16位整型变量
typedef unsigned int uint32; // 无符号32位整型变量
typedef signed int int32; // 有符号32位整型变量
typedef float fp32; // 单精度浮点数(32位长度)
typedef double fp64; // 双精度浮点数(64位长度)
arm中断学习变量长 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)