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

Считывание кейлом старт прошивки и ее длину

"Load$$LR$$LR_IROM1$$Base"

Есть МК ARM7, флеш на борту нету. Это Nuvoton 902. Два варианта прошивки его:
- загрузка через фирменную программу по USB в ОЗУ сразу
- загрузка и считывание потом прошивки с внешней флешки.

Сейчас работаю по первому варианту, мне надо посчитать контрольную сумму средствами внутренней прошивки. 
ф-я из заголовка что дает? Возвращает 0. Прошивка и стартует с 0 адреса. Вторая такая же ф-я

Load$$LR$$LR_IROM1$$Length;

дает размер. Вроде сходится. 
Вопрос- если прошивка в ОЗУ физически находится, т.к. флеш нет встроенного, то что ф-я кейла из шапки дает? 

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


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

11 minutes ago, Метценгерштейн said:

Вопрос- если прошивка в ОЗУ физически находится, т.к. флеш нет встроенного, то что ф-я кейла из шапки дает?

Адрес региона загрузки LR_IROM1. А уж ОЗУ там или что еще - откуда линкеру знать? (это не функция)

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


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

Наверное, тут я плыву.
Регион загрузки из скатер файла берется. И ему без разницы, где лежит прошивка - ОЗУ или флеш?
По- другому спрошу- регион загрузки- это что тогда такое? Вот нет у него флеш.

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


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

40 minutes ago, Метценгерштейн said:

По- другому спрошу- регион загрузки- это что тогда такое? Вот нет у него флеш.

Регион загрузки - это место, откуда берутся данные (в т.ч. и код) для раскидывания по регионам исполнения перед стартом программы.

Как правило, для флешового МК код остается на месте (адрес загрузки = адресу исполнения), а данные копируются/распаковываются в ОЗУ.

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


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

Есть прошивка. Есть контрл. сумма, лежащая в конце ее по опред. адресу. Как ее прочитать?
 

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

такой способ не работает. Похоже, из ОЗУ читает. 

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


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

12 minutes ago, Метценгерштейн said:

такой способ не работает. Похоже, из ОЗУ читает. 

Тут способа не обозначено. Что передается в hashAddr?

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


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

2 minutes ago, aaarrr said:

Тут способа не обозначено. Что передается в hashAddr?

0x0001E194
это конец прошивки, и начало адреса данных, где начинается контрл сумма- с этого адреса. Мне ее надо прочитать

Но вот не пойму, прошивка есть. Льем в МК, там флеш нет, если только внешнее, есть ОЗУ, где прошивка и располагается. Как непосредственно читать куски прошивки?

 

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


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

45 minutes ago, Метценгерштейн said:

Как непосредственно читать куски прошивки?

Так же, как в случае с флеш - просто по указателю.

 

46 minutes ago, Метценгерштейн said:

0x0001E194
это конец прошивки, и начало адреса данных, где начинается контрл сумма- с этого адреса. Мне ее надо прочитать

Хорошо. Как была добавлена контрольная сумма? Не получилось ли так, что линкер о ней не в курсе, и затирает её данными программы при старте?

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


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

Открыл сейчас дамп памяти МК и свою прошивку. Похоже, что да, затирает как раз. Сумма была добавлена просто в ручную к прошивке. И при старте, скорее, доходит до символов, что это конец прошивки и не грузит ее  в память больше. Т.о. в ОЗУ МК нет того куска кода добавленного в ручную. Есть только до места, пока не добавляли.
Читать да, можно просто по указателю памяти- соответствует ОЗУ и сам файл прошивки. 

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


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

17 minutes ago, Метценгерштейн said:

И при старте, скорее, доходит до символов, что это конец прошивки и не грузит ее  в память больше.

Скорее затирает после. Это легко проверить, если посмотреть содержимое map-файла.

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


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

Думаю, стоит подумать над перемещением размера прошивки с конца куда-нибудь в начало, в известные и неизменные адреса.

Завтра прошивка стала занимать больше места и теперь заново искать адрес под размер образа - так себе.

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


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

2 hours ago, aaarrr said:

Скорее затирает после. Это легко проверить, если посмотреть содержимое map-файла.

Открыл мар файл. Еще раз, что там посмотреть можно?

1 hour ago, Arlleex said:

Думаю, стоит подумать над перемещением размера прошивки с конца куда-нибудь в начало, в известные и неизменные адреса.

Завтра прошивка стала занимать больше места и теперь заново искать адрес под размер образа - так себе.

Не размера только, а ее КС. Я КС добавляю руками, уже к готовому .bin файлу прошивки. Т.о. всегда после самой прошивки

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


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

14 minutes ago, Метценгерштейн said:

Еще раз, что там посмотреть можно?

Не разместилось ли что аккурат по тому адресу, где ожидалась добавленная вручную КС.

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


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

18 минут назад, Метценгерштейн сказал:

Не размера только, а ее КС. Я КС добавляю руками, уже к готовому .bin файлу прошивки. Т.о. всегда после самой прошивки

Что мешает положить её например - в один из неиспользуемых векторов таблицы векторов прерываний? И забыть о проблеме.

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


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

3 minutes ago, aaarrr said:

Не разместилось ли что аккурат по тому адресу, где ожидалась добавленная вручную КС.

проверяю.

1 minute ago, jcxz said:

Что мешает положить её например - в один из неиспользуемых векторов таблицы векторов прерываний? И забыть о проблеме.

пока не понял как это. Тут еще проблема, чтобы при подсчете КС именно этот массив не принимал участие в подсчете. Исключить его из тела прошивки. Иначе- никогда не сосчитать будет КС 

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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