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

 
 
> IAR ARM, Как коду узнать, где ROMEND?
mungo
сообщение May 18 2009, 06:24
Сообщение #1


Участник
*

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



Вот проблемка. Захотел сделать автопроверяльщик целостности флеш. Вот тока никак не могу заставить компилятор знать, где заканчивается прошивка. XLINK имеет переменную ROMEND, но она не передается компилятору си, ессно...
Ни у кого нет идей?


--------------------
Сомневаюсь, и вам советую!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 10)
zltigo
сообщение May 18 2009, 06:57
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 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

Прошивка заканчивеется РАНЬШЕ smile.gif ROMEND и обычно много много раньше.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
mungo
сообщение May 18 2009, 10:12
Сообщение #3


Участник
*

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



Ну хорошо, значит, я не понял, какая переменная. Но суть вопроса вы поняли и она не меняется. Так как же все-таки определить конец прошивки?
Причина редактирования: Бездумное цитирование


--------------------
Сомневаюсь, и вам советую!
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 18 2009, 11:28
Сообщение #4


Гуру
******

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



Цитата(mungo @ May 18 2009, 13:12) *
Так как же все-таки определить конец прошивки?
При помощи .xcl разместите свой сегмент следом за прошивкой. И указанным zltigo способом получайте адрес его начала.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 18 2009, 12:55
Сообщение #5


Гуру
******

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



Цитата(mungo @ May 18 2009, 13:12) *
Но суть вопроса вы поняли..

Постите, но это Вы СОВСЕМ ничего не поняли. И даже не дали себе труда попробовать понять sad.gif и даже прочитать кусок исходника. Только совершенно бездумно и бессмысленно его зачем-то отцитировали. Думайте и поймете.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
mungo
сообщение May 18 2009, 13:13
Сообщение #6


Участник
*

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



Последним идет сегмент CODE_ID. И размер по нему считается действительно хорошо. Спасибо за подсказки.
zltigo, спокойнее надо быть. Если бы все всё знали, не задавали бы вопросов и не было бы форума.

Сообщение отредактировал mungo - May 18 2009, 13:15


--------------------
Сомневаюсь, и вам советую!
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 18 2009, 14:46
Сообщение #7


Гуру
******

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



Цитата(mungo @ May 18 2009, 16:13) *
zltigo, спокойнее надо быть. Если бы все всё знали, не задавали бы вопросов и не было бы форума.

Не стоит наводить тень на плетень - ответ Вам был дан спокойно и подробно. А вот то, что в ответ Вы решили рубануть с плеча и вместо уточняющих вопросов укорить в непонимании сути вещей, это зря. Постарайтесь быть спокойнее. Пока можете подумать о сегменте "CHECKSUMM" и ознакомиться о возможностях линкера по генерации контрольных сумм.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Vitaliy_ARM
сообщение Jun 19 2009, 14:10
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246



Подскажите пожалуйста, возможно ли из кода узнать, в какой сессии компилирует компилятор?
Поясняющая картинка, что я подразумеваю под сессией, прилагается.
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 19 2009, 14:16
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
Vitaliy_ARM
сообщение Jun 19 2009, 14:20
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246



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


Спасибо Сергей! Уже в который раз даете короткий и понятный ответ.


--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
Go to the top of the page
 
+Quote Post
Sanya_kv
сообщение Jun 23 2009, 06:37
Сообщение #11


Частый гость
**

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



Есть две функции:
Код
section_start_address = __segment_begin("ROMEND");
section_end_address = __segment_end("ROMEND");

Одна на начало, другая на конец. Думаю размер сам определишь? smile.gif
А в обще это в EWARM_DevelopmentGuide.pdf на пальцах обедняется.

Сообщение отредактировал Sanya_kv - Jun 23 2009, 06:45
Go to the top of the page
 
+Quote Post

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

 


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


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