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

Подсчет контрольной суммы прошивки stm32f103 средствами линкера в IAR

3 минуты назад, l_fin_l сказал:

в документации так и написано:

Интересная какая-то документация - по факту знаковая, а как внешняя переменная беззнаковая и не ругается... Или в понимании ИАРа - "int" он и знаковый и без - все равно...

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

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


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

2 минуты назад, mantech сказал:

Интересная какая-то документация - по факту знаковая, а как внешняя переменная беззнаковая и не ругается...

пример из аппноута

image.thumb.png.103932f16953656acfa58bf869cf9160.png

 

есть какие-то предположения?

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

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


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

3 минуты назад, l_fin_l сказал:

Сейчас отключил оптимизацию, вроде работает все верно, но я все-равно понять не могу почему __checksum типа int:

А какая разница? Для сравнений на равенство - нет никакой разницы.

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


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

1 минуту назад, l_fin_l сказал:

пример из аппноута

он с оптимизацией тоже не работает?

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


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

Только что, mantech сказал:

он с оптимизацией тоже не работает?

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

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


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

Только что, l_fin_l сказал:

а мне лень...

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

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


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

Что-то вы проблему из ничего создаёте. Отлаживая оптимизированный код надо быть готовым к разного рода приколам. Сравниваем ваши два числа и, казалось бы, сейчас получим false1.png.a2ec795ebc775e504e24221eb833ec1c.png

Однако, природу не обманешь. Равны они.

2.png.f91624180a52b6cc18d2c99110eb1aa2.png

 

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


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

3 минуты назад, VladislavS сказал:

Сравниваем ваши два числа и, казалось бы, сейчас получим false

Да вроде уже пришли к тому, что не в знаках дело, а в оптимизации...

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


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

Да, уже нашли, благодаря форуму, что проблема была в оптимизации. Всем спасибо за помощь!

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


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

 

3 минуты назад, VladislavS сказал:

Надеюсь, вы её не отключили?

Пока отключил

Включил оптимизацию, все стало норм...отладчик просто при включенной оптимизации показывает чудные вещи.

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


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

3 hours ago, l_fin_l said:

Включил оптимизацию, все стало норм...отладчик просто при включенной оптимизации показывает чудные вещи.

Похоже отладчик IAR символ __checksum считает знаковым поскольку это не переменная, а некий place holder
Тут никакими типизациями не поможешь и оптимизация  ни при чем. 
Даже в версии 9.10  без оптимизации этот символ выводится так:
image.png.94b9226062e4cb9e62f13d0e84b5aef5.png

Может даже все символы приходящие из  линкера знаковые.
Факт забавный, но не более. 

 

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


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

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


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

При включении расчёта CRC размер прошивки увеличивается в 10+ раз. 

Даже если я указываю в конфиге

define symbol __ICFEDIT_region_ROM_end__   = 0x0803FFFF;

IAR всё равно размещает CRC в конце памяти контроллера заполняя всю остальную область нолями.

Как пофиксить?

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


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

1 hour ago, Jon777 said:

Как пофиксить?

Какие настройки линкера на вкладке "Checksum", Именно они задают настройки расчёта и размещения контрольной суммы, если конечно Вы не вызываете инструментарий из командной строки.

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


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

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

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

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

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

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

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

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

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

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