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

ADI公司的dsp开发工具VISUALDSP++ 一段关于宏定义的有关问题

2012-02-27 
ADI公司的dsp开发工具VISUALDSP++一段关于宏定义的问题typedefvoid(*ex_handler_fn)(int,int,int)#define

ADI公司的dsp开发工具VISUALDSP++ 一段关于宏定义的问题
typedef   void   (*ex_handler_fn)(int,   int,   int);

#define   EX_HANDLER(KIND,NAME)   \
_Pragma(#KIND)   \
void   NAME   (   int   _r0x,   int   _r1x,   int   _r2x   )

#define   EX_HANDLER_PROTO(KIND,   NAME)   EX_HANDLER(KIND,   NAME)

#define   EX_INTERRUPT_HANDLER(NAME)EX_HANDLER(interrupt,NAME)
#define   EX_EXCEPTION_HANDLER(NAME)EX_HANDLER(exception,NAME)
#define   EX_NMI_HANDLER(NAME)EX_HANDLER(nmi,NAME)
#define   EX_REENTRANT_HANDLER(NAME)   \
_Pragma( "interrupt_reentrant ")   \
EX_HANDLER(interrupt,NAME)


看不懂,谢谢了

[解决办法]
你哪里看不懂啊?

碰巧,我对ADI的环境比较熟悉。如果你在芯片上或VISUAL DSP++上有问题可以提问。

实际上,EX_INTERRUPT_HANDLER(myisr)就相当于:
#pragma interrupt
void myisr(int _r0x, int _r1x, int _r2x)

因为:_Pragma( "expr ")相当于:

#pragma interrupt
上面,表示将myisr作为中断服务程序。因此程序入口处,编译器会增加额外的上下文保护。

如果你用了EX_REENTRANT_HANDLER,说明你说定义的中断服务例程将是可重入的。即在入口处会将RETI压栈,使IPEND4清0,并且允许可屏蔽中断,而且同时允许与该中断服务例程所处优先级相同的中断优先级触发并打断当前的执行,即打断后从该入口重新执行新的中断服务。

热点排行