当前位置: 代码迷 >> 驱动开发 >> 中断有关问题
  详细解决方案

中断有关问题

热度:33   发布时间:2016-04-28 10:56:35.0
中断问题
#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 *)的格式,然后在取*。
  相关解决方案