mungo 0 18 мая, 2009 Опубликовано 18 мая, 2009 · Жалоба Вот проблемка. Захотел сделать автопроверяльщик целостности флеш. Вот тока никак не могу заставить компилятор знать, где заканчивается прошивка. XLINK имеет переменную ROMEND, но она не передается компилятору си, ессно... Ни у кого нет идей? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 18 мая, 2009 Опубликовано 18 мая, 2009 · Жалоба 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 и обычно много много раньше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mungo 0 18 мая, 2009 Опубликовано 18 мая, 2009 · Жалоба Ну хорошо, значит, я не понял, какая переменная. Но суть вопроса вы поняли и она не меняется. Так как же все-таки определить конец прошивки? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 18 мая, 2009 Опубликовано 18 мая, 2009 · Жалоба Так как же все-таки определить конец прошивки?При помощи .xcl разместите свой сегмент следом за прошивкой. И указанным zltigo способом получайте адрес его начала. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 18 мая, 2009 Опубликовано 18 мая, 2009 · Жалоба Но суть вопроса вы поняли.. Постите, но это Вы СОВСЕМ ничего не поняли. И даже не дали себе труда попробовать понять :( и даже прочитать кусок исходника. Только совершенно бездумно и бессмысленно его зачем-то отцитировали. Думайте и поймете. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mungo 0 18 мая, 2009 Опубликовано 18 мая, 2009 (изменено) · Жалоба Последним идет сегмент CODE_ID. И размер по нему считается действительно хорошо. Спасибо за подсказки. zltigo, спокойнее надо быть. Если бы все всё знали, не задавали бы вопросов и не было бы форума. Изменено 18 мая, 2009 пользователем mungo Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 18 мая, 2009 Опубликовано 18 мая, 2009 · Жалоба zltigo, спокойнее надо быть. Если бы все всё знали, не задавали бы вопросов и не было бы форума. Не стоит наводить тень на плетень - ответ Вам был дан спокойно и подробно. А вот то, что в ответ Вы решили рубануть с плеча и вместо уточняющих вопросов укорить в непонимании сути вещей, это зря. Постарайтесь быть спокойнее. Пока можете подумать о сегменте "CHECKSUMM" и ознакомиться о возможностях линкера по генерации контрольных сумм. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vitaliy_ARM 0 19 июня, 2009 Опубликовано 19 июня, 2009 · Жалоба Подскажите пожалуйста, возможно ли из кода узнать, в какой сессии компилирует компилятор? Поясняющая картинка, что я подразумеваю под сессией, прилагается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 19 июня, 2009 Опубликовано 19 июня, 2009 · Жалоба Поясняющая картинка, что я подразумеваю под сессией, прилагается.У них это называется Target. Да, можно. Project->Options->Compiler->Preprocessor->Predefined symbols для каждого Target вписать туда свой символ, например DEBUG, RELEASE. Дальше в тексте #if defined (DEBUG) .... #elif defined(RELEASE) .... #else #error Unknown target #endif Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vitaliy_ARM 0 19 июня, 2009 Опубликовано 19 июня, 2009 · Жалоба У них это называется Target. Да, можно. Project->Options->Compiler->Preprocessor->Predefined symbols для каждого Target вписать туда свой символ, например DEBUG, RELEASE. Дальше в тексте Спасибо Сергей! Уже в который раз даете короткий и понятный ответ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sanya_kv 0 23 июня, 2009 Опубликовано 23 июня, 2009 (изменено) · Жалоба Есть две функции: section_start_address = __segment_begin("ROMEND"); section_end_address = __segment_end("ROMEND"); Одна на начало, другая на конец. Думаю размер сам определишь? :) А в обще это в EWARM_DevelopmentGuide.pdf на пальцах обедняется. Изменено 23 июня, 2009 пользователем Sanya_kv Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться