theBMV 0 16 января, 2015 Опубликовано 16 января, 2015 · Жалоба Добрый день! Решаю вопрос о взаимодействии двух программ в памяти одного микроконтроллера, а именно загрузчика и основной программы. Основная программа должна иметь возможность вызывать функции загрузчика. Реализаций тут я вижу 3: 1. Явное указание адресов функций в загрузчике __attribute__((address(0x9D000000))) int foo() { ... } Но при таком методе нужно следить за размерами функций, если их больше одной. Чтобы не налезали друг на друга и чтобы между ними не было неиспользуемых участков памяти. А это двойная компиляция (1-й раз определить размер, 2-й раз подогнать адреса) и исправления в проекте основной программы. Либо просто, без явного указания адресов функций, компиляция с последующим определением адресов функций и исправлением в проекте основной программы. 2. То же, что и 1-й вариант, но будет всего одна функция, 1-ым параметром которой будет индекс нужной функции из какого-нибудь списка. 3. Явное указание адреса массива указателей на функции __attribute__((address(0x9D000000))) const int (*foo)()[] = { foo1, foo2, foo3 }; int foo1() { ... } int foo2() { ... } int foo3() { ... } но так у меня почему-то программа выпадает в exception, скорее всего из-за того, что эта константа выбивается из секции констант или я что-то неправильно делаю. Подскажите, что сделать, чтобы работало, т.к. этот вариант мне нравится больше всего. Подскажите, как сделать наиболее грамотно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
becopt 0 16 января, 2015 Опубликовано 16 января, 2015 · Жалоба Я думаю смогу помочь Вам с решением проблемы, пишите в личку, обменяемся контактами! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
theBMV 0 16 января, 2015 Опубликовано 16 января, 2015 · Жалоба Думаю, что разобрался. Надо использовать space(prog) и разместить табличку где-нибудь в конце: const int (*foo)()[] = { foo1, foo2, foo3 }__attribute__(space(prog), (address(0x9D000F00))); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться