RiCGEN_ISR() 的作用与 CGEN_ISR() 相同。
从中断服务例程中生成事件的问题是,在某些操作系统(例如 VxWorks)中,不允许分配内存、删除内存或者对资源进行阻塞(例如对信标执行 lock())。因此,RiCGEN_ISR() 不分配新事件,而是使用指针指向必须提供的事件。
可以采用两种方式来使用 RiCGEN_ISR():
RiCGEN_ISR(myEventPool[theNextFreeEvent]);
必须将 CG::Event::DeleteAfterConsumption 属性设置为 False。
必须在 CG::Event 下方设置下列静态内存管理属性:
对 RiCGEN_ISR() 调用如下所示:
RiCGEN_ISR(RiC_Create_ev());
RiCGEN_ISR() 的定义如下所示:
#define RiCGEN_ISR(INSTANCE,EVENT)
RiCReactive_gen(&((INSTANCE)->ric_reactive),
(RiCEvent*)EVENT, RiCTRUE)