реклама на сайте
подробности

 
 
> Взаимодействие двух программ, XC32
theBMV
сообщение Jan 16 2015, 10:50
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 131
Регистрация: 14-10-08
Из: г. Королев
Пользователь №: 40 940



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

Подскажите, как сделать наиболее грамотно?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 2)
Valentine Logino...
сообщение Jan 16 2015, 12:55
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 78
Регистрация: 7-04-10
Из: Пушкино
Пользователь №: 56 462



Я думаю смогу помочь Вам с решением проблемы, пишите в личку, обменяемся контактами!
Go to the top of the page
 
+Quote Post
theBMV
сообщение Jan 16 2015, 13:20
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 131
Регистрация: 14-10-08
Из: г. Королев
Пользователь №: 40 940



Думаю, что разобрался. Надо использовать space(prog) и разместить табличку где-нибудь в конце:
Код
const int (*foo)()[] = {
  foo1,
  foo2,
  foo3
}__attribute__(space(prog), (address(0x9D000F00)));
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 19:06
Рейтинг@Mail.ru


Страница сгенерированна за 0.01354 секунд с 7
ELECTRONIX ©2004-2016