|
Размещение функций из подключамого файла, Как? |
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 16)
|
Apr 24 2007, 09:54
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(arttab @ Apr 24 2007, 08:01)  Уточню проблему: есть основная программа на устройство. Так же должен быть bootloader (пока нет, но будет общим на серию разных приборов. подключаться к проекту в виде образа). Так сделайте в этом образе фиксированные точки входа в эти функции или разместите эти функции в зарезервированных сегментах при компиляции образа, а в приложении объявите их как внешние: Код Bootloader, .s90: RSEG SYNTH_INIT : CODE:ROOT(1) PUBLIC SynthInit EXTERN SynthInitHandler SynthInit // SynthInit entry point RJMP SynthInitHandler
// **************************************************************** RSEG GET_SERIAL : CODE:ROOT(1) PUBLIC SerialNo SerialNo LDI R16,0xFF // will be overwritten by AVReAl LDI R17,0xFF RET Bootloader, .xcl: -Z(CODE)GET_SERIAL=1826-1FFF -Z(CODE)SYNTH_INIT=1826-1FFF BootLoader, .map: SYNTH_INIT Relative segment, address: CODE 0000182E - 0000182F (0x2 bytes), align: 1 Segment part 1. ROOT. ENTRY ADDRESS REF BY ===== ======= ====== SynthInit 0000182E main (Application) ------------------------------------------------------------------------- GET_SERIAL Relative segment, address: CODE 00001826 - 0000182B (0x6 bytes), align: 1 Segment part 2. ROOT. ENTRY ADDRESS REF BY ===== ======= ====== SerialNo 00001826 main (Application)
Application, .h: extern void SynthInit (uint16_t FrequencyCoeff); extern uint16_t SerialNo(void);
Application, .xcl: -DSerialNo=0x1826 -DSynthInit=0x182E PS IgorKossak: Дуплетом бьем
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Apr 24 2007, 09:58
|

Шаман
     
Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221

|
1. Общий проект бутлоадера и приложения. В командном файле линкера определите сегмент и задайте его расположение в верхней части flash (опция -Z). Расположите в этом сегменте Ваши функции (См. Function placement into named segments в EWAVR_CompilerReference.pdf). 2. Раздельные проекты бутлоадера и приложения. В проекте бутлоадера выделите сегмент для таблицы команд безусловного перехода на Ваши функции. В проекте приложения осуществляйте вызов этих функций через таблицу переходов, заданную явными адресами. PS Сергей Борщ оказался проворнее PPS Если бы arttab был бы стазу столь понятен как в его третьем посте - не пришлось бы так долго ждать.
|
|
|
|
|
Apr 26 2007, 12:14
|

Профессионал
    
Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371

|
Эти дни я буду вспоминать долго - до следующей запарки. С глюком inside я поборолся - забыл снять перемычку со сброса. программировать и считывать с мк она не мешала. В результате работы с бубном заставил переписывать страницу в симуляторе - AVRSTUDIO. в реале не хочет. Пробовал на 2-х приборах. из фузов зашиты ( в ноль) И SPEINB EESAVE. код откомпилированный в файле. может кто чего увидит.
--------------------
OrCAD, Altium,IAR, AVR....
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|