Ответ:
(«Телесистемы»: «Конференция «Микроконтроллеры и их применение»»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Romario 29 апреля 2003 г. 16:40
В ответ на: Процеура переписи отправлено AlexTor 29 апреля 2003 г. 16:07

это должен делать загрузчик, т.е. маленькая п/п которая не меняется и
управление которой передается при включение процессора.
Основная программа вообще ничего не должна знать о том что
ее копируют и куда копируют и как. Единственное, что возможно,
ей придется узнать что она будет работать не из ПЗУ но это надо
будет прописать в линкере (т.е. разрулить адресное пр-во)

>>И как определить с какого адреса начинается моя программа во
>>внешней Flash и где заканчивается

опять же, в завимости от крутости линкера это надо будет делать в нем,
а именно в начале программы сделать некий заголовок где будет прописано
начало/конец программного кода или начало/размер (параметры
для функции memcpy которая будет копировать Вашу программу)
а также, если нужно, начало/размер секции BSS и других или
еще какую служебную информацию. Т.е. в FLash будет сидеть следующее:

0x00000 - 0x20000 - область загрузчика
0x40000 - 0x40010 - Нeader
0x40010 - 0xA0000 - область программы

цифры адресов от "балды".

Структура Header напрмер такая (допустим под ячейку хидера 4 байта):
0x40000 - начало бинарника программы (хотя если уже жестко все начинается с 0x40010 то можно это поле опустить)
0x40004 - размер бинарника
0x40008 - точка входа в функцию startup
0x4000С - начальное значение указателя стека (это поле на любителя)

загрузчик выполнив всю инициализацию процессора
осуществляет чтение заголовка. И, определив что он верный
вызывает следущую последовательность
void *pFunc(*void);
memcpy(SRAM_DST,*(0x40000),*(0x40008));
pFunc = *(0x40008);
pFunc();

Составить ответ ||| Конференция ||| Архив

Ответы



Перейти к списку ответов ||| Конференция ||| Архив ||| Главная страница ||| Содержание

E-mail: info@telesys.ru