Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Вообще-то была где-то тема про одновременную компиляцию и основной программы (+)

Отправлено ReAl 14 мая 2008 г. 09:33
В ответ на: Господа GCC-шники, не соблаговолите-ли подсказать, как изящно вызвать функцию по абсолютному адресу и корректно описать ее в хидере? отправлено Гудвин 14 мая 2008 г. 08:32

Функции загрузчика в отдельной секции, потом эта секция из .elf выдирается в отдельный .hex и зашивается отдельно.

Ну а по основному вопросу
Пусть функция принимает два char и возвращает int
typedef int (*some_func_t)(char,char);

/* вынимание-вынимание! у WinAVR тут адрес слова! */
#define loader_some_func ((some_func_t)0xF000)

...
i = loader_some_func(3,4);
// и вот скомпилированное
ldi r22,lo8(4)
ldi r24,lo8(3)
ldi r30,lo8(-4096)
ldi r31,hi8(-4096)
icall
sts (i)+1,r25
sts i,r24

Причём это не win-avr-ские штучки и даже не gcc-шные вообще, это чисто С-шное, любой более-менее вменяемый компилятор обязан это правильно скомпилировать.
Вот что сделал старичок Borland 5.02
	push      4
push 3
mov eax,61440
call eax
add esp,8
mov dword ptr [_i],eax



Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 56:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru