Я хочу, чтобы один и тот же набор инструкций выполнялся из другого места в памяти. Используя атрибут и файл компоновщика, я могу указать раздел адреса / памяти, в котором должно находиться определение функции:
void TaskFxn_0(UArg a0, UArg a1) __attribute__((section(".task_0")));
Одно из решений грубой силы - иметь несколько копий одной и той же функции и помещать их в разные места в памяти:
void TaskFxn_0(UArg a0, UArg a1) __attribute__((section(".task_0")));
void TaskFxn_1(UArg a0, UArg a1) __attribute__((section(".task_1")));
void TaskFxn_2(UArg a0, UArg a1) __attribute__((section(".task_2")));
void TaskFxn_3(UArg a0, UArg a1) __attribute__((section(".task_3")));
void TaskFxn_4(UArg a0, UArg a1) __attribute__((section(".task_4")));
void TaskFxn_5(UArg a0, UArg a1) __attribute__((section(".task_5")));
Но в этом случае мне нужно иметь несколько копий одного и того же определения функции, и внесение изменений в одно из них потребует от меня изменения всех из них, чтобы код выглядел некрасиво.
Есть ли лучший способ сделать это?
@AnttiHaapala Допустим, мне нужно запускать код с вытеснением кеша инструкций при каждом переключении задач, и циклическое выполнение этих задач позволило бы мне делать это на постоянной основе. Я размещаю функции в тех местах памяти, которые соответствуют одной и той же записи в кэше. Ручное вытеснение кеша невозможно.
Вы всегда можете использовать для этого макрос X.





У вопроса отсутствует надлежащая мотивация - каков вариант использования?