13.1.6 访问数据空间
访问数据空间不需要对要访问的单元预先声明,访问是通过指针的方法实现的。
/***********************************************************/unsigned intorg,cnt,block,offset,tmp,i;org = *(unsigned int*) 0x8000;cnt= *(unsigned int*) 0x8001;block = *(unsigned int*) 0x8002;offset = *(unsigned int*) 0x8003;for (i=0; i tmp= *(unsigned int*) (org + i);*(unsigned int*) (org + offset +i) = tmp;} /***********************************************************/ 13.1.7 中断处理(1)中断处理方法?查询法 程序通过查询中断标志位来判断是否有中断发生,并进行相应的处理。 优点:流程易于控制,不会发生中断嵌套的问题,一 般也不会发生丢失中断的问题。缺点:中断实时性差。 ?回调法 为中断指定一个回调函数,即中断服务程序。将中断服务程序的入口地址放在中断向量处。优点:中断实时性好,程序结构简洁,类似于 windows操作系统下事件驱动的编程方式。 缺点:处理不好容易造成中断嵌套或丢失中断。 (2)回调法处理中断的一般性问题 ??中断服务函数可以和一般函数一样访问全局变量、分配局部变量和调用其它函数等。 ??进入中断服务函数,编译器将自动产生程序保护所有必要的寄存器,并在中断服务函数结束时恢复运行环境。??c_int0是保留的复位中断处理函数,不会被调用,也不需要保护任何寄存器。 ??要将中断服务函数入口地址放在中断向量处以使中断服务函数可以被正确调用。 ??中断服务函数要尽量短小,避免中断嵌套等问题。 (3)用C编写中断服务函数 有两种方式定义中断服务函数:a)任何具有名为c_intd 的函数(d为0到9的数),都被假定为一个中断程序,c_int0函数留作系统复位中断用。b)利用中断关键词interrupt进行定义。举例如下: /***********************************************************/void c_int1 (){ ......} /***********************************************************/interrupt void isr(){ ......} /***********************************************************/