Метценгерштейн 0 27 марта Опубликовано 27 марта · Жалоба "Load$$LR$$LR_IROM1$$Base" Есть МК ARM7, флеш на борту нету. Это Nuvoton 902. Два варианта прошивки его: - загрузка через фирменную программу по USB в ОЗУ сразу - загрузка и считывание потом прошивки с внешней флешки. Сейчас работаю по первому варианту, мне надо посчитать контрольную сумму средствами внутренней прошивки. ф-я из заголовка что дает? Возвращает 0. Прошивка и стартует с 0 адреса. Вторая такая же ф-я Load$$LR$$LR_IROM1$$Length; дает размер. Вроде сходится. Вопрос- если прошивка в ОЗУ физически находится, т.к. флеш нет встроенного, то что ф-я кейла из шапки дает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 27 марта Опубликовано 27 марта · Жалоба 11 minutes ago, Метценгерштейн said: Вопрос- если прошивка в ОЗУ физически находится, т.к. флеш нет встроенного, то что ф-я кейла из шапки дает? Адрес региона загрузки LR_IROM1. А уж ОЗУ там или что еще - откуда линкеру знать? (это не функция) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Метценгерштейн 0 27 марта Опубликовано 27 марта · Жалоба Наверное, тут я плыву. Регион загрузки из скатер файла берется. И ему без разницы, где лежит прошивка - ОЗУ или флеш? По- другому спрошу- регион загрузки- это что тогда такое? Вот нет у него флеш. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 27 марта Опубликовано 27 марта · Жалоба 40 minutes ago, Метценгерштейн said: По- другому спрошу- регион загрузки- это что тогда такое? Вот нет у него флеш. Регион загрузки - это место, откуда берутся данные (в т.ч. и код) для раскидывания по регионам исполнения перед стартом программы. Как правило, для флешового МК код остается на месте (адрес загрузки = адресу исполнения), а данные копируются/распаковываются в ОЗУ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Метценгерштейн 0 28 марта Опубликовано 28 марта · Жалоба Есть прошивка. Есть контрл. сумма, лежащая в конце ее по опред. адресу. Как ее прочитать? static int ReadHash(unsigned int hashAddr, unsigned char *hashBuf, unsigned int hashLength) { unsigned char *hashPtr; if (hashBuf == NULL || hashLength == 0) return -1; hashPtr = (unsigned char *)hashAddr; memcpy (hashBuf, hashPtr, hashLength); return 0; } такой способ не работает. Похоже, из ОЗУ читает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 28 марта Опубликовано 28 марта · Жалоба 12 minutes ago, Метценгерштейн said: такой способ не работает. Похоже, из ОЗУ читает. Тут способа не обозначено. Что передается в hashAddr? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Метценгерштейн 0 28 марта Опубликовано 28 марта · Жалоба 2 minutes ago, aaarrr said: Тут способа не обозначено. Что передается в hashAddr? 0x0001E194 это конец прошивки, и начало адреса данных, где начинается контрл сумма- с этого адреса. Мне ее надо прочитать Но вот не пойму, прошивка есть. Льем в МК, там флеш нет, если только внешнее, есть ОЗУ, где прошивка и располагается. Как непосредственно читать куски прошивки? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 28 марта Опубликовано 28 марта · Жалоба 45 minutes ago, Метценгерштейн said: Как непосредственно читать куски прошивки? Так же, как в случае с флеш - просто по указателю. 46 minutes ago, Метценгерштейн said: 0x0001E194 это конец прошивки, и начало адреса данных, где начинается контрл сумма- с этого адреса. Мне ее надо прочитать Хорошо. Как была добавлена контрольная сумма? Не получилось ли так, что линкер о ней не в курсе, и затирает её данными программы при старте? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Метценгерштейн 0 28 марта Опубликовано 28 марта · Жалоба Открыл сейчас дамп памяти МК и свою прошивку. Похоже, что да, затирает как раз. Сумма была добавлена просто в ручную к прошивке. И при старте, скорее, доходит до символов, что это конец прошивки и не грузит ее в память больше. Т.о. в ОЗУ МК нет того куска кода добавленного в ручную. Есть только до места, пока не добавляли. Читать да, можно просто по указателю памяти- соответствует ОЗУ и сам файл прошивки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 28 марта Опубликовано 28 марта · Жалоба 17 minutes ago, Метценгерштейн said: И при старте, скорее, доходит до символов, что это конец прошивки и не грузит ее в память больше. Скорее затирает после. Это легко проверить, если посмотреть содержимое map-файла. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 28 марта Опубликовано 28 марта · Жалоба Думаю, стоит подумать над перемещением размера прошивки с конца куда-нибудь в начало, в известные и неизменные адреса. Завтра прошивка стала занимать больше места и теперь заново искать адрес под размер образа - так себе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Метценгерштейн 0 28 марта Опубликовано 28 марта · Жалоба 2 hours ago, aaarrr said: Скорее затирает после. Это легко проверить, если посмотреть содержимое map-файла. Открыл мар файл. Еще раз, что там посмотреть можно? 1 hour ago, Arlleex said: Думаю, стоит подумать над перемещением размера прошивки с конца куда-нибудь в начало, в известные и неизменные адреса. Завтра прошивка стала занимать больше места и теперь заново искать адрес под размер образа - так себе. Не размера только, а ее КС. Я КС добавляю руками, уже к готовому .bin файлу прошивки. Т.о. всегда после самой прошивки Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 28 марта Опубликовано 28 марта · Жалоба 14 minutes ago, Метценгерштейн said: Еще раз, что там посмотреть можно? Не разместилось ли что аккурат по тому адресу, где ожидалась добавленная вручную КС. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 28 марта Опубликовано 28 марта · Жалоба 18 минут назад, Метценгерштейн сказал: Не размера только, а ее КС. Я КС добавляю руками, уже к готовому .bin файлу прошивки. Т.о. всегда после самой прошивки Что мешает положить её например - в один из неиспользуемых векторов таблицы векторов прерываний? И забыть о проблеме. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Метценгерштейн 0 28 марта Опубликовано 28 марта · Жалоба 3 minutes ago, aaarrr said: Не разместилось ли что аккурат по тому адресу, где ожидалась добавленная вручную КС. проверяю. 1 minute ago, jcxz said: Что мешает положить её например - в один из неиспользуемых векторов таблицы векторов прерываний? И забыть о проблеме. пока не понял как это. Тут еще проблема, чтобы при подсчете КС именно этот массив не принимал участие в подсчете. Исключить его из тела прошивки. Иначе- никогда не сосчитать будет КС Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться