Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: IAR ARM
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
mungo
Вот проблемка. Захотел сделать автопроверяльщик целостности флеш. Вот тока никак не могу заставить компилятор знать, где заканчивается прошивка. XLINK имеет переменную ROMEND, но она не передается компилятору си, ессно...
Ни у кого нет идей?
zltigo
Цитата(mungo @ May 18 2009, 09:24) *
XLINK имеет переменную ROMEND, но она не передается компилятору си, ессно...

1. ROMEND совсм не "переменная"
2. Но тем не менее, подобная информация доступна компилятору ввиде АДРЕСОВ
3. Например:
Код
extern ulong RAMEND;
extern ulong RAMSTART;
extern ulong CHECKSUM;
extern ulong ROMSTART;
#pragma segment="HEAP_RTOS"
#pragma segment="CHECKSUM"
#pragma segment="ROMSTART"
    printf( "\tROM:%lu RAM use:%lu Heap:%8X Size:%lu\r",
                                (ulong)(__segment_begin( "CHECKSUM"  ))-(ulong)&ROMSTART,
                                 (ulong)(__segment_begin( "HEAP_RTOS" ))-(ulong)&RAMSTART,
                                 __segment_begin( "HEAP_RTOS" ),
                                (ulong)&RAMEND - (ulong)(__segment_begin( "HEAP_RTOS" )) + 1 );


Цитата(mungo @ May 18 2009, 09:24) *
где заканчивается прошивка. XLINK имеет переменную ROMEND

Прошивка заканчивеется РАНЬШЕ smile.gif ROMEND и обычно много много раньше.
mungo
Ну хорошо, значит, я не понял, какая переменная. Но суть вопроса вы поняли и она не меняется. Так как же все-таки определить конец прошивки?
Сергей Борщ
Цитата(mungo @ May 18 2009, 13:12) *
Так как же все-таки определить конец прошивки?
При помощи .xcl разместите свой сегмент следом за прошивкой. И указанным zltigo способом получайте адрес его начала.
zltigo
Цитата(mungo @ May 18 2009, 13:12) *
Но суть вопроса вы поняли..

Постите, но это Вы СОВСЕМ ничего не поняли. И даже не дали себе труда попробовать понять sad.gif и даже прочитать кусок исходника. Только совершенно бездумно и бессмысленно его зачем-то отцитировали. Думайте и поймете.
mungo
Последним идет сегмент CODE_ID. И размер по нему считается действительно хорошо. Спасибо за подсказки.
zltigo, спокойнее надо быть. Если бы все всё знали, не задавали бы вопросов и не было бы форума.
zltigo
Цитата(mungo @ May 18 2009, 16:13) *
zltigo, спокойнее надо быть. Если бы все всё знали, не задавали бы вопросов и не было бы форума.

Не стоит наводить тень на плетень - ответ Вам был дан спокойно и подробно. А вот то, что в ответ Вы решили рубануть с плеча и вместо уточняющих вопросов укорить в непонимании сути вещей, это зря. Постарайтесь быть спокойнее. Пока можете подумать о сегменте "CHECKSUMM" и ознакомиться о возможностях линкера по генерации контрольных сумм.
Vitaliy_ARM
Подскажите пожалуйста, возможно ли из кода узнать, в какой сессии компилирует компилятор?
Поясняющая картинка, что я подразумеваю под сессией, прилагается.
Сергей Борщ
Цитата(Vitaliy_ARM @ Jun 19 2009, 17:10) *
Поясняющая картинка, что я подразумеваю под сессией, прилагается.
У них это называется Target. Да, можно. Project->Options->Compiler->Preprocessor->Predefined symbols для каждого Target вписать туда свой символ, например DEBUG, RELEASE. Дальше в тексте
Код
#if defined (DEBUG)
....
#elif defined(RELEASE)
....
#else
   #error Unknown target
#endif
Vitaliy_ARM
Цитата(Сергей Борщ @ Jun 19 2009, 18:16) *
У них это называется Target. Да, можно. Project->Options->Compiler->Preprocessor->Predefined symbols для каждого Target вписать туда свой символ, например DEBUG, RELEASE. Дальше в тексте


Спасибо Сергей! Уже в который раз даете короткий и понятный ответ.
Sanya_kv
Есть две функции:
Код
section_start_address = __segment_begin("ROMEND");
section_end_address = __segment_end("ROMEND");

Одна на начало, другая на конец. Думаю размер сам определишь? smile.gif
А в обще это в EWARM_DevelopmentGuide.pdf на пальцах обедняется.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.