|
Scatter файл для Кeil., Как правильно и лучше сделать.. |
|
|
|
Jun 30 2010, 07:57
|

Участник

Группа: Участник
Сообщений: 74
Регистрация: 27-05-05
Из: г. Киев
Пользователь №: 5 468

|
В общем проблема как мир старая. Хочу часть флеши SAM7S использовать для хранения настроек. В общем выделяю в конце регион RW_IROM7 и засовываю туда все, что будет в файле flash.c (по идеи в этом файле будет еше функция для записи в флеш сегмента), а пока там есть массив констант. Штудируя форум по примерам в стандартный скаттер добавил свой регион. Код ; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; *************************************************************
LR_IROM1 0x00100000 0x00040000 { ; load region ER_IROM1 0x00100000 0x0003F800{ ; load address = execution address *.o (RESET, +First) * (+RO) } RW_IROM7 0x0013F800 0x00000800{ ; load address = execution address flash.o(+RO) } RW_IRAM1 0x00200000 0x00010000 { ; RW data * (+RW +ZI) } } В результате скомпилировал проект, смотрю мап файл. Мои константы лежат в нужном месте. Код Execution Region RW_IROM7 (Base: 0x0013f800, Size: 0x00000004, Max: 0x00000800, ABSOLUTE)
Base Addr Size Type Attr Idx E Section Name Object
0x0013f800 0x00000003 Data RO 516 .constdata flash.o
Execution Region RW_IRAM1 (Base: 0x00200000, Size: 0x00001320, Max: 0x00010000, ABSOLUTE) Загоняю в отладчик через JetLink 5 и вижу что по данному адресу во флеши лежат одни FF. Вопрос как-то можно заставить линкер чтобы по этому адресу эти константы были сразу инициализированы?
|
|
|
|
|
Jun 30 2010, 08:46
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(M@RS @ Jun 30 2010, 11:57)  В общем выделяю в конце регион RW_IROM7 и засовываю туда все, что будет в файле flash.c (по идеи в этом файле будет еше функция для записи в флеш сегмента), а пока там есть массив констант. Замечательно, только как вы собираетесь потом с этой кашей работать? ИМХО, гораздо удобнее просто скрыть от линкера участок флеш, и работать с ним через структуры и указатели. Цитата(M@RS @ Jun 30 2010, 11:57)  Загоняю в отладчик через JetLink 5 и вижу что по данному адресу во флеши лежат одни FF. Вопрос как-то можно заставить линкер чтобы по этому адресу эти константы были сразу инициализированы? А какие константы объявлены в flash.c? Судя по map-файлу, 3 байта должно быть.
|
|
|
|
|
Jun 30 2010, 08:52
|

Участник

Группа: Участник
Сообщений: 74
Регистрация: 27-05-05
Из: г. Киев
Пользователь №: 5 468

|
Можно и так, но в принципе скажем для отладки было бы неплохо чтобы константы там уже лежали... А вобще так и будет как вы писали, там вместо массива будут структуры данных. На этом примере пока учусь. В общем хотелось бы их там увидеть во флеши. Сами константы в файле flash.c. Код const unsigned char Mass[3] = {0x00, 0x01, 0x02};
Сообщение отредактировал M@RS - Jun 30 2010, 08:58
|
|
|
|
|
Jun 30 2010, 09:30
|

Участник

Группа: Участник
Сообщений: 74
Регистрация: 27-05-05
Из: г. Киев
Пользователь №: 5 468

|
Спасибо, сделал но все равно в дебагере по адресу 0x0013f88c лежат одни FF. Может дебагер врет? После пересоздания проекта константы сместились на новый адрес а линкер добавил код функции записи в флаш. Но пока это не важно. Код Execution Region RW_IROM7 (Base: 0x0013f800, Size: 0x00000090, Max: 0x00000800, ABSOLUTE, FIXED)
Base Addr Size Type Attr Idx E Section Name Object
0x0013f800 0x0000008c Code RO 516 .text flash.o 0x0013f88c 0x00000003 Data RO 517 .constdata flash.o
Сообщение отредактировал M@RS - Jun 30 2010, 09:32
|
|
|
|
|
Jun 30 2010, 11:16
|

Участник

Группа: Участник
Сообщений: 74
Регистрация: 27-05-05
Из: г. Киев
Пользователь №: 5 468

|
Вот.
Прикрепленные файлы
test2.rar ( 6.9 килобайт )
Кол-во скачиваний: 22
|
|
|
|
|
Jul 1 2010, 10:28
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(M@RS @ Jul 1 2010, 14:11)  Вопрос еще, а можно линкер заставить ложить в мой сегмент только константы, а тело функции в общий для кода и констант? Можно: Код ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; *************************************************************
LR_IROM1 0x00100000 0x00040000 {; load region ER_IROM1 0x00100000 0x0003F800{ ; load address = execution address *.o (RESET, +First) * (+RO) } RW_IROM7 0x0013F800 0x00000800{ ; load address = execution address flash.o (ro_vars) } RW_IRAM1 0x00200000 0x00010000 {; RW data * (+RW +ZI) } } Код #pragma arm section rodata = "ro_vars" const int bla_bla; #pragma arm section rodata
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|