Страница 1 из 1

Код компилируется не полностью

Добавлено: Вс ноя 01, 2020 16:26:14
TripleKill
Всем привет. Пытаюсь подключить дисплей к STM32F407 по FSMC. Припаял, накопал библиотеку, скомпилировал. Дисплей не реагирует. Проверил все подключения и напряжения - все в норме.
А когда полез копаться в отладке, увидел такое (IDE Keil):
Изображение

По сути это значит, что код, не отмеченный темно-серым слева, не исполняется.
Взял инициализацию и перекопировал из файла библиотеки в main() - дисплей завелся! Вернул обратно - снова такая же петрушка.
В чем прикол? Я пробовал заменять HAL_Delay на самопальные задержки с __NOP();, но эффекта это не дало. Также как и изменение уровня оптимизации кода.

Добавлено after 7 hours 49 minutes 32 seconds:
Может, кому-то поможет.
Видимо, компилятор считает прямую запись по адресу просто ячейкой памяти, и т.к. далее отправленное число нигде не используется, вырезает все промежуточные обращения к такому адресу (адресам), оставляя только первые/последние.
В качестве костыля я создал переменную, в которую вначале попадает отправляемое значение, и только затем пишется по адресу FSMC. Теперь работает все.
Пока не знаю, как по-другому можно это обойти.

Re: Код компилируется не полностью

Добавлено: Вс ноя 01, 2020 17:11:10
BlackKilkennyCat
кусок кода в виде картинки ни о чём не говорит, ничего не посоветовать.

Re: Код компилируется не полностью

Добавлено: Вс ноя 01, 2020 17:14:12
mickbell
[uquote="TripleKill",url="/forum/viewtopic.php?p=3916770#p3916770"]Пока не знаю, как по-другому можно это обойти.[/uquote]1. Сказать компилятору -o0. Это должно отключить оптимизацию, компилятор должен компилить as is, без выкрутасов.
2. Переменным, чьё имя здесь не используется и потому выгрызается при оптимизации, при объявлении приписать модификатор volatile, это должно запретить оптимизацию таких переменных.
Попробуйте то и другое.