今天继续学习 ,昨天 µC/OS-II UCOSII学习笔记2 ,今天继续,发现应该如此:
PC_TickISR = PC_VectGet(VECT_TICK); /* Get MS-DOS's tick vector */ pvect = (INT16U *)MK_FP(0x0000, vect * 4); /* Point into IVT at desired vector location */ 这样的话,0X08表示 PC系统 定时器中断,MK_FP是获得中断向量表。www.shengfang.org 计算机内存的前1024个字节(偏移量00000H到003FFH)保存着256个中断向量,每个中断向量占4个字节,前两个字节保存着中断服务程序的入口地址偏移量,后两个字节保存着中断程序的入口段地址,使用时,只要将它们分别调入寄存器IP及CS中,就可以转入中断服务程序实现中断调用。每当中断发生时,CPU将中断号乘以4,在中断向量表中得到该中断向量地址,进而获得IP及CS值,从而转到中断服务程序的入口地址,调用中断。这就是中断服务程序通过中断号调用的基本过程。在计算机启动的时候,BIOS将基本的中断填入中断向量表,当DOS得到系统控制权后,它又要将一些中断向量填入表中,还要修改一部分BIOS的中断向量。有一部分中断向量是系统为用户保留的,如60H到67H号中断,用户可以将自己的中断服务程序写入这些中断向量中。不仅如此,用户还可以自己更改和完善系统已有的中断向量。 系统级C语言程序设计 20H 8H 8 每1/18.2秒定时器发出的中断 void interrupt newint() /*设置新的中断程序*/ void intenable() /*设置中断向量表,启动新的中断程序*/ void intrestore() /*恢复中断向量*/ 应该类似如此吧: disable()屏蔽中断的宏 enable()开硬件中断的宏www.shengfang.org #define disable( ) __emit__( (char )( 0xfa ) ) __emit__ 函数一般极少用到。其用法如下:www.shengfang.org void _ _emit_ _(argument, . . .);www.shengfang.org 该函数为C++Builder 的一个内部函数,调用的参数为机器语言指令。它在编译的时侯,将机器语言指令直接嵌入目标码中,不必借助于汇编语言和汇编编译程序。 void enable(void) { STI 置中断允许位. PUSHF 标志入栈. #if OS_CRITICAL_METHOD == 1 #if OS_CRITICAL_METHOD == 2 字体:大 中 小 |
![]() | 永久地址 http://www.shengfang.org/blog/p/ucosii3xx.php |
![]() | 引用地址 http://www.shengfang.org/blog/tb.php?tb_id=1122541347 |
2005年7月28日17:02星期四 [Dev开发]






