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

 
 
> Перемещение кода в память, как указать где копия кода должна быть размещена во флеше.
Kabdim
сообщение Feb 15 2016, 10:13
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842



Есть связка: важный кусок программы(ВКП)+остальное. Среди прочего ВКП нужно скопировать в память и выполняться оттуда. Причем нужно что бы в случае если "остальное" будет стерто из флеша, то ВКП смог бы продолжать работать даже после ресета. Да, похоже на связку бут+программа, но связей между 2 кусками больше причем в обе стороны и они НЕ должны обновляться независимо. Соответственно что бы не городить разделение логически одной программы на 2 куска хочется указать линкеру что бы он часть ВКП отмапленную в память хранил в части флеша относящейся к ВКП же.

Т.е. структура флеша:
прерывания, startup&main, код и переменные ВКП который нужно загрузить в память, остальное
структура памяти:
код и переменные ВКП, память для остальной части программы

Как бы это сделать через ld? Пробовал через разные секции для разных частей кода, однако сохраненное для загрузки в память всё равно линкуется в конец бинарника. Как это сделать правильно?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Aaron
сообщение Feb 26 2016, 14:07
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 243
Регистрация: 5-10-06
Из: Зеленоград
Пользователь №: 21 007



Подождите, что значит, не работает } > RAM AT > FLASH ???
Может, у вас всё же что-то не так в скриптах?

К слову, навороченный у вас скрипт! Его ещё покурить надо, да на заметку себе взять, пригодится! wink.gif

Ставлю секцию ramfunc вперёд, выхлоп в map-файле:
Цитата
4 .ramfunc 00000538 20000000 08019a68 00020000 2**3
CONTENTS, ALLOC, LOAD, READONLY, CODE
5 .data 00000890 20000538 08019fa0 00020538 2**3
CONTENTS, ALLOC, LOAD, DATA
6 .bss 00005d54 20000dc8 0801a830 00020dc8 2**3
ALLOC


Ставлю в центр, выхлоп:
Цитата
4 .data 00000890 20000000 08019a68 00020000 2**3
CONTENTS, ALLOC, LOAD, DATA
5 .ramfunc 00000538 20000890 0801a2f8 00020890 2**3
CONTENTS, ALLOC, LOAD, READONLY, CODE
6 .bss 00005d54 20000dc8 0801a830 00020dc8 2**3
ALLOC


Хочу, ставлю даже после bss, выхлоп:
Цитата
4 .data 00000890 20000000 08019a68 00020000 2**3
CONTENTS, ALLOC, LOAD, DATA
5 .bss 00005d54 20000890 0801a2f8 00020890 2**3
ALLOC
6 .ramfunc 00000538 200065e8 0801a2f8 000265e8 2**3
CONTENTS, ALLOC, LOAD, READONLY, CODE


Далее, по поводу объектников - указываете прямо их имена в линкер-скрипте:

Цитата
.my_objects:
{
. = WDT_NEED_ADDR
path1/wdt.o
. = EEPROM_NEED_ADDR
path2/eeprom.o
} > FLASH


Что вам мешает перемещать эти объектники целиком, используя те же указатели . = WDT_NEED_ADDR?

Более того, для отладки можете смотреть из c-кода своего (ну или просто в map-файле) глобальные переменные вида:
Цитата
void * _binary_path1_wdt_c_start, _binary_path1_wdt_c_end;
void * _binary_path2_eeprom_c_start, _binary_path2_eeprom_c_end;
Go to the top of the page
 
+Quote Post
Kabdim
сообщение Feb 26 2016, 15:18
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842



Цитата(Aaron @ Feb 26 2016, 17:07) *
Подождите, что значит, не работает } > RAM AT > FLASH ???
Может, у вас всё же что-то не так в скриптах?

В вашем же примере у вас после отмапленных в память секций нет секций с кодом во флеше. Если её добавить, то размещение секций смапленных в память во флеше сдвинется, если указывать "> RAM AT > FLASH". А рецепт Антохи и позволяет произвольно тасовать секции во флеше и загрузочные куски секций, который будут скопированы в память. Аля: прерывания - код для копирования во флеш - код который остается во флеше. Тасовать секции который находятся только во флеше или только в памяти между собой порядком объявления - нет проблем. А вот всё вместе и было задачей.
Цитата(Aaron @ Feb 26 2016, 17:07) *
К слову, навороченный у вас скрипт! Его ещё покурить надо, да на заметку себе взять, пригодится! wink.gif

Вы меня зря хвалите, он отредактирован после генератора, а не ручками написан.

Сообщение отредактировал Kabdim - Feb 26 2016, 15:24
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Kabdim   Перемещение кода в память, как указать где копия кода должна быть размещена во флеше.   Feb 15 2016, 10:13
- - Aaron   1. Всё, что должно помещаться в ram, есть initiali...   Feb 15 2016, 12:46
- - scifi   Цитата(Kabdim @ Feb 15 2016, 13:13) Приче...   Feb 15 2016, 13:01
|- - dimka76   Цитата(scifi @ Feb 15 2016, 16:01) Вне за...   Feb 15 2016, 13:45
|- - Kabdim   Цитата(Aaron @ Feb 15 2016, 15:46) 1. Всё...   Feb 15 2016, 16:08
- - Kabdim   Сделал как предложил Aaron, но всё равно во флеше ...   Feb 18 2016, 09:29
|- - AHTOXA   Покажите скрипт линкера.   Feb 18 2016, 10:26
- - Kabdim   Было бы предпочтительней понять как перемещать сра...   Feb 18 2016, 16:04
|- - AHTOXA   Посмотрел у себя - то же самое. Похоже, то, что кл...   Feb 18 2016, 17:19
- - Kabdim   Размещение в памяти теперь правильное, но конфликт...   Feb 19 2016, 12:41
- - Kabdim   Прошу помочь с этим сдвигом. Мозги кипят. Пробую: ...   Feb 19 2016, 16:59
- - Kabdim   Тихо сам с собой. Похоже получилось сдвинуть секци...   Feb 20 2016, 13:10
- - Сергей Борщ   Какие-то сложные у вас решения Код .text : { ...   Feb 26 2016, 16:15
- - Kabdim   Сегодня наконец проверил. Досадно. Столько времени...   Mar 1 2016, 15:10


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

 


RSS Текстовая версия Сейчас: 31st July 2025 - 13:57
Рейтинг@Mail.ru


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