|
IAR ARM, Как коду узнать, где ROMEND? |
|
|
|
May 18 2009, 06:24
|
Участник

Группа: Участник
Сообщений: 63
Регистрация: 21-09-07
Из: СССР
Пользователь №: 30 719

|
Вот проблемка. Захотел сделать автопроверяльщик целостности флеш. Вот тока никак не могу заставить компилятор знать, где заканчивается прошивка. XLINK имеет переменную ROMEND, но она не передается компилятору си, ессно... Ни у кого нет идей?
--------------------
Сомневаюсь, и вам советую!
|
|
|
|
|
 |
Ответов
(1 - 10)
|
May 18 2009, 06:57
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(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 Прошивка заканчивеется РАНЬШЕ  ROMEND и обычно много много раньше.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
May 18 2009, 10:12
|
Участник

Группа: Участник
Сообщений: 63
Регистрация: 21-09-07
Из: СССР
Пользователь №: 30 719

|
Ну хорошо, значит, я не понял, какая переменная. Но суть вопроса вы поняли и она не меняется. Так как же все-таки определить конец прошивки?
Причина редактирования: Бездумное цитирование
--------------------
Сомневаюсь, и вам советую!
|
|
|
|
|
May 18 2009, 13:13
|
Участник

Группа: Участник
Сообщений: 63
Регистрация: 21-09-07
Из: СССР
Пользователь №: 30 719

|
Последним идет сегмент CODE_ID. И размер по нему считается действительно хорошо. Спасибо за подсказки. zltigo, спокойнее надо быть. Если бы все всё знали, не задавали бы вопросов и не было бы форума.
Сообщение отредактировал mungo - May 18 2009, 13:15
--------------------
Сомневаюсь, и вам советую!
|
|
|
|
|
Jun 19 2009, 14:10
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Подскажите пожалуйста, возможно ли из кода узнать, в какой сессии компилирует компилятор? Поясняющая картинка, что я подразумеваю под сессией, прилагается.
Эскизы прикрепленных изображений
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
|
Jun 19 2009, 14:16
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(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
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jun 19 2009, 14:20
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Цитата(Сергей Борщ @ Jun 19 2009, 18:16)  У них это называется Target. Да, можно. Project->Options->Compiler->Preprocessor->Predefined symbols для каждого Target вписать туда свой символ, например DEBUG, RELEASE. Дальше в тексте Спасибо Сергей! Уже в который раз даете короткий и понятный ответ.
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
|
Jun 23 2009, 06:37
|

Частый гость
 
Группа: Свой
Сообщений: 185
Регистрация: 25-02-09
Из: Россия
Пользователь №: 45 369

|
Есть две функции: Код section_start_address = __segment_begin("ROMEND"); section_end_address = __segment_end("ROMEND"); Одна на начало, другая на конец. Думаю размер сам определишь? А в обще это в EWARM_DevelopmentGuide.pdf на пальцах обедняется.
Сообщение отредактировал Sanya_kv - Jun 23 2009, 06:45
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|