我在 C 中实现“服务例程的向量”时遇到了一些问题。
现在我实现了 I2C 接口的 IRQ-Handler,如下所示:
void I2C0_IRQHandler(void)
{
statusCode = LPC_I2C->STAT;
switch ( statusCode ) { (...) }
}
对于许多状态代码,这很慢,因为必须访问所有案例。
LPC12xx 微控制器的用户手册给出了提示:
如果状态码用作服务例程的向量,则例程会被八个地址位置所取代。8 个字节的代码对于大多数服务例程来说已经足够了
所以我应该编写一些代码大小正好为 8 字节的处理函数,并将它们放在正确的内存位置:
0xABCDEF00: handler_for_code_0x00
0xABCDEF08: handler_for_code_0x08
(...)
0xABCDEF90: handler_for_code_0x90
在中断处理程序中我
- 将状态码添加到内存偏移量(此处为 0xABCDEF00)
- 将此地址转换为函数指针
- 并调用该函数。
我有这个权利吗?我怎么能在C中实现这个?