Вызов функции по адресу из файла карты другого проекта

Привет всем, здесь моя проблема.

У меня есть два отличных проекта, во-первых, файл компоновщика отображается следующим образом:

MEMORY
{
    rom (rx)  : ORIGIN = 0x08000000, LENGTH = 0x0000C400 
    ram (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000
}

Второй файл компоновщика, как показано ниже:

MEMORY
{
    rom (rx)  : ORIGIN = 0x0800C400, LENGTH = 0x00019CFC 
    ram (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000
}

Оба проекта работают на одном MCU и записываются во флэш-памяти отдельно. Во втором проекте я хотел бы отобразить указатели на функции, объявленные в первом проекте. Я попробовал приведенный ниже код, но он не работает, при выполнении отладчик сообщает, что символ не может быть найден, но в соответствии с файлом.map первого проекта адрес (0x0800458C) сопоставлен с функцией, которую я хочу использовать,

uint32_t (*Myfunction)(void);

int main(void)
{
    Myfunction = ((uint32_t(*) (void)) 0x0800458C); // address in the first project
    Myfunction();
} 

Кто-нибудь испытывал это? Спасибо!!

РЕДАКТИРОВАТЬ: Кажется, работает с Keil IDE, когда непосредственно включить файл.symbols в проект. Но с CoIDE (на основе затмения) это не работает. Я все еще пытаюсь выяснить эту проблему.

1 ответ

Решение

Вы пробовали это: скрипт компоновщика: вставьте абсолютный адрес функции в сгенерированный код

Я думаю, что последний ответ может быть тем, что вы ищете.

Другие вопросы по тегам