Я пишу загрузчик для процессора ARM Cortex-M0. Мне нужно перенаправить IRQ в целевое приложение, к сожалению, вектор IRQ в этом CPU имеет фиксированный адрес, и я не могу его переместить, поэтому мне нужно немного обмануть.Двойная функция косвенности в C
Я знаю адрес, в котором хранятся адреса IRQ целевого приложения. Так скажем, по адресу 0x5008 есть адрес ничтожной x_IRQHandler (ничтожной) (целевое приложение)
То, что я хочу сделать, это:
- при запуске сохранить адреса всех x_IRQHandler() (так что он не рассчитывается во время выполнения);
- всякий раз, когда вызов IRQ принимается загрузчиком, вызовите связанную функцию IRQ в целевом приложении со своего адреса.
Это то, что я сделал в загрузчике, я не могу найти правильный синтаксис для него.
//pointers to x_IRQHandler() functions
void(* x_IRQ_addr)(void);
x_IRQ_addr = (void(*)(void))(0x5008);
//here I should call the function pointed by x_IRQ_addr; but this syntax is not valid
void x_IRQ_Handler(void)
{
*x_IRQ_addr();
}
Я пробовал разные подходы без успеха, как я могу это исправить?
Поместите указатель косвенность в скобках: '(* x_IRQ_addr)()' –
It'ld быть хорошей идеей, чтобы немного ознакомиться с языком перед тем, как войти в загрузчики и все эти низкоуровневые вещи ... – 3442
Может ли этот контроллер не переназначить векторы в ОЗУ? –