Перейти к содержанию
    

Взаимодействие двух программ

Добрый день!

Решаю вопрос о взаимодействии двух программ в памяти одного микроконтроллера, а именно загрузчика и основной программы. Основная программа должна иметь возможность вызывать функции загрузчика. Реализаций тут я вижу 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, скорее всего из-за того, что эта константа выбивается из секции констант или я что-то неправильно делаю. Подскажите, что сделать, чтобы работало, т.к. этот вариант мне нравится больше всего.

 

Подскажите, как сделать наиболее грамотно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я думаю смогу помочь Вам с решением проблемы, пишите в личку, обменяемся контактами!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Думаю, что разобрался. Надо использовать space(prog) и разместить табличку где-нибудь в конце:

const int (*foo)()[] = {
  foo1,
  foo2,
  foo3
}__attribute__(space(prog), (address(0x9D000F00)));

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...