|
|
  |
помещение объекта в конец секции RO |
|
|
|
Aug 23 2011, 12:51
|

Гуру
     
Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514

|
Что-то никак не могу положить константу в конец всего кода во флеш (RO секция) Код const unsigned long test_ending __attribute__ ((section("ENDOF"))) = 0x12345678; и скаттер Код ; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; *************************************************************
LR_IROM1 0x20000000 0x00080000 { ; load region size_region ER_IROM1 0x20000000 0x00080000 {; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) *.o (ENDOF, +Last) } RW_IRAM1 0x80000000 UNINIT 0x0000E000 {; RW data .ANY (+RW +ZI) } } вот конец описания того, что легло во флеш Код 0x20000fc8 0x0000000c Code RO 257 .text c_5.l(libspace.o) 0x20000fd4 0x0000000c Code RO 316 .text c_5.l(rt_fp_status_addr_intlibspace.o) 0x20000fe0 0x0000000c Code RO 320 .text c_5.l(sys_exit.o) 0x20000fec 0x00000000 Code RO 333 .text c_5.l(indicate_semi.o) 0x20000fec 0x00000014 Code RO 303 x$fpl$fpinit fz_5s.l(fpinit.o) 0x20001000 0x00001000 Data RO 52 .constdata fx2lp.o 0x20002000 0x00000010 Data RO 385 Region$$Table anon$$obj.o 0x20002010 0x00000004 Data RO 117 ENDOF boot.o
Execution Region RW_IRAM1 (Base: 0x80000000, Size: 0x0000dff4, Max: 0x0000e000, ABSOLUTE, UNINIT)
Base Addr Size Type Attr Idx E Section Name Object родная секция ENDOF в аккурат в конце. Ура! Но не тут-то было Почему fromelf, создавая BIN, кладет после этой константы еще 5 int (20 байт)? Понял, но не знаю, как поправить - эти 20 байт есть RW Data
|
|
|
|
|
Aug 23 2011, 14:22
|
Гуру
     
Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295

|
Цитата(toweroff @ Aug 23 2011, 15:51)  Что-то никак не могу положить константу в конец всего кода во флеш (RO секция) Код const unsigned long test_ending __attribute__ ((section("ENDOF"))) = 0x12345678; Keil ? Я пользуюсь вот такой конструкцией, работает железно ... Код const unsigned int csr_dword __attribute__((at(0x000001fc))) = 0x87654321; Вы же все равно знаете начальный и конечный адреса секции, вот и задайте адрес явно ...
Сообщение отредактировал kovigor - Aug 23 2011, 14:23
|
|
|
|
|
Aug 23 2011, 15:29
|

Гуру
     
Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514

|
Цитата(kovigor @ Aug 23 2011, 19:22)  Клал описанным мной способом CRC в бинарник, правда, не в конец, а в произвольные места внутри бинарника. Проблем не было. В исходнике писал указанную выше строку. Компилятор генерировал .hex, а затем я его преобразовывал в .bin утилитой H-Converter из состава H-JTAG. Странно, какие там могут быть проблемы ? да еще раз с атрибутом __attribute__ ((at(CONST))) я всегда имею атрибут __attribute__ ((got_problem("NO"))) речь идет о _постоянном_, вне зависимости от того, что еще напихалось в код, получать размещение секции "ENDOF" ровно (!) в конце бинарника
|
|
|
|
|
Aug 23 2011, 15:48
|
Гуру
     
Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295

|
Цитата(toweroff @ Aug 23 2011, 18:29)  вне зависимости от того, что еще напихалось в код, получать размещение секции "ENDOF" ровно (!) в конце бинарника Ладно. Попробуем иначе. Скаттер вам в этом деле не нужен. Создаем "Memory Area": Project -> Options for Target xxx -> заполняем поля IROM1 и IROM2 (в IROM2 указываете адрес и размер вашего блока CRC): http://zalil.ru/31597069[/url] Затем создает отдельный .с - файл, помещаете в него вашу константу (атрибуты писать не надо, только саму константу) и в меню проекта? щелкнув по этому файлу правой кнопкой, указываете, в какую именно область (т.е., в IROM2) положить RO - данные этого файла: http://zalil.ru/31597080[/url] Подходит ?
Сообщение отредактировал kovigor - Aug 23 2011, 15:49
Эскизы прикрепленных изображений
|
|
|
|
|
Aug 23 2011, 16:49
|

Гуру
     
Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514

|
kovigor, спасибо за желание помочь Но галка "Use memory Layout from Target dialog" у меня отключена, и давно Я прошу помощи в одном - как, задавая размещение конкретных блоков в конкретной ОБЛАСТИ, заставить линкер поместить эту ОБЛАСТЬ в самый хвост прошивки Цитата(toweroff @ Aug 23 2011, 16:51)  Понял, но не знаю, как поправить - эти 20 байт есть RW Data нет не понял повыбрасывал определения глобальных переменных вида int var = 0; передал все инициализации в соответствующие функции, RW секция изменилась, но все равно в конце злосчастные 20 байт нулей  Прям как в черновике  Все-таки добавляемая область == RW Data точно повставлял в fromelf все ключи, какие можно, для анализа где что находится Никак не могу найти, что же помещается в RW секцию по адресам > секции ENDOF
|
|
|
|
|
Aug 25 2011, 08:56
|

Гуру
     
Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514

|
Цитата(kovigor @ Aug 25 2011, 12:11)  СRC двоичного файла прошивки подсчитывалась по всему файлу и укладывалась в конец этого же файла моей программкой на Delphi. А потом я этот двоичный файл шил в МК. А уже он проверял, получается ли нулевое значение CRC при расчете CRC по всей прошивке, или не получается. Или я вопроса не понял ? все верно, для этого я и пытался зарезервировать место в конце файла просто смутило Ваше же заявление: Цитата(kovigor) Клал описанным мной способом CRC в бинарник, правда, не в конец, а в произвольные места внутри бинарника.
|
|
|
|
|
Aug 29 2011, 12:21
|

Местный
  
Группа: Validating
Сообщений: 207
Регистрация: 14-01-09
Из: Днепропетровск
Пользователь №: 43 367

|
Никак не могу разобраться до конца со скаттер-файлом. Дабы не плодить похожих тем решил спросить здесь. Поясните, пожалуйста, значение этой строки: Цитата *(InRoot$$Sections) В Keil'овском хелпе пишут, что это "section selector" и он нужен, чтобы: "to place all sections that must be in a root region, i.e. _main.o, _scatter.o...". Но если закомментировать эту строку - ничего не меняется - секция main.0 и scatter.o располагаются по тем же адресам, что и в случае, если эту строчку оставить незакомментированной. В чем подвох? Что я неправильно понимаю?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|