首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 驱动开发 >

中断有关问题

2012-05-01 
中断问题#define pISR_IRQ (*(unsigned *)(_ISR_STARTADDRESS + 0x18))#define pISR_FRQ (*(unsigned *)(_

中断问题
#define pISR_IRQ (*(unsigned *)(_ISR_STARTADDRESS + 0x18)) 
#define pISR_FRQ (*(unsigned *)(_ISR_STARTADDRESS + 0x1c))

#define pISR_TIMER0 (*(unsigned *)(_ISR_STARTADDRESS + 0x48))

请问一下,这几个宏是表示什么意思,,???


_ISR_STARTADDRESS 是什么意思?
+ 0x48是什么意思??
(*(unsigned *) 是什么意思
pISR_TIMER0表示一个地址,,怎么又*(unsigned *) 呢,。,??

[解决办法]
_ISR_STARTADDRESS 一般是一个地址 比如可能是0x08ff003C,一般是一组寄存器的基地址
+0x48 就是特定寄存器的地址
然后把这个地址通过(unsigned *) 强制转化为一个指针
再通过 * 把这个指针的值取出来 其实就是去取出这个寄存器的值 

所以pISR_IRQ 就是取出 _ISR_STARTADDRESS + 0x18 这个地址所对应寄存器内的值

其他两个也同理
[解决办法]
对指针概念理解不透,C语言功底不够哦

探讨
#define pISR_IRQ (*(unsigned *)(_ISR_STARTADDRESS + 0x18))
#define pISR_FRQ (*(unsigned *)(_ISR_STARTADDRESS + 0x1c))

#define pISR_TIMER0 (*(unsigned *)(_ISR_STARTADDRESS + 0x48))

请问一下,这几个宏是表示……

[解决办法]
感觉lz理解错了应该是先看(unsiged *)(_ISR_STARTADDRESS +0X18),就是把后面的内容强转成(unsiged *)的格式,然后在取*。

热点排行