Перейти к содержанию
    

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

Ни у кого нет идей?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 );

 

где заканчивается прошивка. XLINK имеет переменную ROMEND

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так как же все-таки определить конец прошивки?
При помощи .xcl разместите свой сегмент следом за прошивкой. И указанным zltigo способом получайте адрес его начала.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Но суть вопроса вы поняли..

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

zltigo, спокойнее надо быть. Если бы все всё знали, не задавали бы вопросов и не было бы форума.

Изменено пользователем mungo

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

zltigo, спокойнее надо быть. Если бы все всё знали, не задавали бы вопросов и не было бы форума.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подскажите пожалуйста, возможно ли из кода узнать, в какой сессии компилирует компилятор?

Поясняющая картинка, что я подразумеваю под сессией, прилагается.

post-29246-1245420637_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поясняющая картинка, что я подразумеваю под сессией, прилагается.
У них это называется Target. Да, можно. Project->Options->Compiler->Preprocessor->Predefined symbols для каждого Target вписать туда свой символ, например DEBUG, RELEASE. Дальше в тексте

#if defined (DEBUG)
....
#elif defined(RELEASE)
....
#else
   #error Unknown target
#endif

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У них это называется Target. Да, можно. Project->Options->Compiler->Preprocessor->Predefined symbols для каждого Target вписать туда свой символ, например DEBUG, RELEASE. Дальше в тексте

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть две функции:

section_start_address = __segment_begin("ROMEND");
section_end_address = __segment_end("ROMEND");

Одна на начало, другая на конец. Думаю размер сам определишь? :)

А в обще это в EWARM_DevelopmentGuide.pdf на пальцах обедняется.

Изменено пользователем Sanya_kv

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...