Метценгерштейн 0 4 апреля Опубликовано 4 апреля · Жалоба #include <stdio.h> const volatile unsigned char fw_hash[32]; static unsigned char const volatile fw_hash[32] __attribute__((section("hash_section"), used)) = {94,94,94,94,95,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94}; от сюда убрать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 136 4 апреля Опубликовано 4 апреля · Жалоба 1 час назад, Метценгерштейн сказал: #include <stdio.h> const volatile unsigned char fw_hash[32]; static unsigned char const volatile fw_hash[32] __attribute__((section("hash_section"), used)) = {94,94,94,94,95,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94}; Это вообще что? Какой компилятор такое компилит? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 4 апреля Опубликовано 4 апреля · Жалоба Да, отсюда. Просто const unsigned char Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Метценгерштейн 0 5 апреля Опубликовано 5 апреля · Жалоба 14 hours ago, Arlleex said: Это вообще что? Какой компилятор такое компилит? Непосредственно компилятор ArmCompiler5Last. Да, не самая простая запись для понимания. Но и задача у меня из ряда вон. Идеи приветствую. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 136 5 апреля Опубликовано 5 апреля · Жалоба Только что, Метценгерштейн сказал: Непосредственно компилятор ArmCompiler5Last. Да, не самая простая запись для понимания. Но и задача у меня из ряда вон. Идеи приветствую. Я к тому, что эта конструкция должна приводить к ошибке компиляции. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Метценгерштейн 0 5 апреля Опубликовано 5 апреля · Жалоба ошибки нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Метценгерштейн 0 5 апреля Опубликовано 5 апреля · Жалоба extern const unsigned char fw_hash[32]; int check_hash(unsigned char *hashBuf, unsigned int hashLength,const volatile unsigned char *hash) { for (int i =0; i < hashLength; i++) { hashBuf[i] = hash[i]; } } static int ReadHash(unsigned int hashAddr, unsigned char *hashBuf, unsigned int hashLength) { check_hash(hashBuf, hashLength, fw_hash); return 0; } 15 hours ago, aaarrr said: Я бы убрал volatile из объявления, но оставил бы при обращении: единственное, const пришлось оставить в аргументах- без него не компилится. Результат тот же. Массив показывается, но при изменении снаружи файла прошивки, не реагирует на изменения. Показывает старые значения. Если за сегодня идей нам не придет, то надо будет внешнюю епром использовать, считывать от туда значение эталонного хеша. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 136 5 апреля Опубликовано 5 апреля · Жалоба Вы что, под дебаггером смотрите либо? Так он подгружает из сгенерированного elf, а не из вашего измененного бинарника. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 5 апреля Опубликовано 5 апреля · Жалоба 48 minutes ago, Метценгерштейн said: Да, не самая простая запись для понимания Так к чему это нагромождение? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Метценгерштейн 0 5 апреля Опубликовано 5 апреля · Жалоба 41 minutes ago, Arlleex said: Вы что, под дебаггером смотрите либо? Так он подгружает из сгенерированного elf, а не из вашего измененного бинарника. под дебаггером. Хотите сказать, что все работает, не так проверяю? 38 minutes ago, aaarrr said: Так к чему это нагромождение? мы вместе ее и составили. Чтобы этот массив ушел в конец флеш прошивки. Или я не понимаю? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 5 апреля Опубликовано 5 апреля · Жалоба 7 minutes ago, Метценгерштейн said: мы вместе ее и составили. Чтобы этот массив ушел в конец флеш прошивки. Или я не понимаю? Должно быть: const unsigned char fw_hash[32] __attribute__((section("hash_section"), used)) = {94,94,94,94,95,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94}; и всё. 9 minutes ago, Метценгерштейн said: Хотите сказать, что все работает, не так проверяю? Не так: дебаггер бинарник не грузит, и знать о нем ничего не знает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Метценгерштейн 0 5 апреля Опубликовано 5 апреля · Жалоба 7 minutes ago, aaarrr said: Должно быть: const unsigned char fw_hash[32] __attribute__((section("hash_section"), used)) = {94,94,94,94,95,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94}; и всё. инициализацию в файле сделал так. Убрал лишнее объявление. Результат тот же- не вижу измененный снаружи массив. Скорее, надо внешней памятью пользоваться Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 5 апреля Опубликовано 5 апреля · Жалоба 6 minutes ago, Метценгерштейн said: Результат тот же- не вижу измененный снаружи массив. Теперь без дебаггера? Как минимум, нужно убедиться, что данные снова стали RO, Load Addr = Exec. Addr 6 minutes ago, Метценгерштейн said: Скорее, надо внешней памятью пользоваться Не получается в конце - разместите в начале (в секции NUC_INIT). Все проще, чем огород городить с внешней памятью. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Метценгерштейн 0 5 апреля Опубликовано 5 апреля · Жалоба 3 minutes ago, aaarrr said: Теперь без дебаггера? Как минимум, нужно убедиться, что данные снова стали RO, Load Addr = Exec. Addr давайте по шагам. Что тут надо сделать? Просто не очень понял Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 5 апреля Опубликовано 5 апреля · Жалоба Посмотреть map-файл, посмотреть конец бинарника. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться