Страница 1 из 2
CUBEIDE глюки или...
Добавлено: Сб апр 12, 2025 20:41:17
RUNA
Доброе время суток всем.
Начал изучать STM32 и столкнулся с такой проблемой.
Установил точку останова(стр 72), но программа останавливается не в той точке а совсем в другом месте (стр 84).
Если удалить if в строке 70 то работает все как надо.
В чем может быть проблема?
Прошу сильно не пинать.
Re: CUBEIDE глюки или...
Добавлено: Сб апр 12, 2025 20:53:08
veso74
Предположение первое: вычисления между строках ничего не меняют, и оптимизатор их удалил. Варианты: удалить оптимизацию компилятора или объявить используемые переменные как volatile.
Re: CUBEIDE глюки или...
Добавлено: Сб апр 12, 2025 21:10:55
RUNA
Оптимизация 0.
Re: CUBEIDE глюки или...
Добавлено: Сб апр 12, 2025 23:45:31
jcxz
[uquote="RUNA",url="/forum/viewtopic.php?p=4704510#p4704510"]Начал изучать STM32[/uquote]Прям как Гагарин - 12-го апреля!
[uquote="RUNA",url="/forum/viewtopic.php?p=4704525#p4704525"]Оптимизация 0.[/uquote]Тогда - какое-то нарушение связывания между скомпилированным загружаемым образом и исходными файлами.
Т.е. - вы изменили исходники, но не перекомпилили образ. Обычно компилятор перед стартом отладки, определяет если исходники были изменены после последней компиляции и предлагает их пересобрать. Но иногда он по какой-то причине может не обнаруживать это. И тогда наблюдается то, что у вас.
Совет - полная пересборка проекта. С нуля. Лучше - с предварительным удалением всех предыдущих результатов компиляции. Ну или хотя-бы - через соответствующий пункт в меню компилятора.
Re: CUBEIDE глюки или...
Добавлено: Вс апр 13, 2025 07:14:03
HardWareMan
А ещё полезно иметь рядом окно с "disassembling", там сразу видно что чему соответствует.
Re: CUBEIDE глюки или...
Добавлено: Вс апр 13, 2025 08:54:43
Муркиз
Сообщение об ошибке при останове не появляется ?
Re: CUBEIDE глюки или...
Добавлено: Вс апр 13, 2025 09:41:04
tonyk
Правильно настрой оптимизацию для отладки.
https://cloud.mail.ru/public/GjPf/jncyBG7WL
Re: CUBEIDE глюки или...
Добавлено: Вс апр 13, 2025 09:57:34
RUNA
[uquote="Муркиз",url="/forum/viewtopic.php?p=4704628#p4704628"]Сообщение об ошибке при останове не появляется ?[/uquote]
Нет. Просто останавливается не в том месте.
Добавлено after 2 minutes:
[uquote="HardWareMan",url="/forum/viewtopic.php?p=4704607#p4704607"]А ещё полезно иметь рядом окно с "disassembling", там сразу видно что чему соответствует.[/uquote]
Открыто. Но, я в нем не чего не понимаю. Отличается от ассемблера в avr.
Добавлено after 2 minutes 12 seconds:
[uquote="tonyk",url="/forum/viewtopic.php?p=4704654#p4704654"]Правильно настрой оптимизацию для отладки.
https://cloud.mail.ru/public/GjPf/jncyBG7WL[/uquote]
Написал выше. Оптимизация нет.
Добавлено after 2 minutes 43 seconds:
Если убрать точку останова то программа не входит в функцию if а возвращается на начало while.
Добавлено after 3 minutes 8 seconds:
[uquote="veso74",url="/forum/viewtopic.php?p=4704518#p4704518"]как volatile.[/uquote]
Сделал. Теперь стал проверять if, но потом вываливается в начало не зависимо от результата сравнения.
Re: CUBEIDE глюки или...
Добавлено: Вс апр 13, 2025 10:14:42
tonyk
RUNA писал(а):Написал выше. Оптимизация нет.
А должна быть для отладки, иначе будут непонятные прыжки по программе.
Re: CUBEIDE глюки или...
Добавлено: Вс апр 13, 2025 10:15:20
veso74
Если путь меняется после изменения условий, то вероятно проверка становится бессмысленной (т.е. результат с ней и без нее: одинаков).
Попробуйте оптимизировать свои проверки, например: с листом бумаги и карандашом.
В общем (из AVR-щиков) до сих пор не понимаю, почему есть выражения типа: 1<<0; 0b11<<0; 0b000<<0 ...
Что-то вроде "диалекта AVR"

. Не могу к этому привыкнуть и всё тут

(+ транслейт).
Проще рассчитать и установить окончательное значение.
Re: CUBEIDE глюки или...
Добавлено: Вс апр 13, 2025 10:36:23
RUNA
[uquote="tonyk",url="/forum/viewtopic.php?p=4704666#p4704666"][
А должна быть для отладки[/uquote]
Попробую.
Re: CUBEIDE глюки или...
Добавлено: Вс апр 13, 2025 10:38:58
veso74
Если код не скрыт и не секретен (

), можете ли поделиться здесь всем архивом?
Re: CUBEIDE глюки или...
Добавлено: Вс апр 13, 2025 10:41:23
RUNA
[uquote="veso74",url="/forum/viewtopic.php?p=4704668#p4704668"]В общем (из AVR-щиков) до сих пор не понимаю, почему есть выражения типа: 1<<0; 0b11<<0; 0b000<<0 ...[/uquote]
Я то же из avr-щиков. Это просто, сдвиг в лево по маске с определенного бита.
Добавлено after 51 second:
[uquote="veso74",url="/forum/viewtopic.php?p=4704676#p4704676"]Если код не скрыт и не секретен (

), можете ли поделиться здесь всем архивом?[/uquote]
Вечером.
Re: CUBEIDE глюки или...
Добавлено: Вс апр 13, 2025 10:42:06
veso74
Сдвиг в лево по маске понятно и нормально, Сдвиг с 0 - нет.
Re: CUBEIDE глюки или...
Добавлено: Вс апр 13, 2025 11:01:58
tonyk
[uquote="RUNA",url="/forum/viewtopic.php?p=4704675#p4704675"][uquote="tonyk",url="/forum/viewtopic.php?p=4704666#p4704666"][
А должна быть для отладки[/uquote]
Попробую.[/uquote]
Ага, картинка выше.
Re: CUBEIDE глюки или...
Добавлено: Вс апр 13, 2025 11:03:28
RUNA
[uquote="veso74",url="/forum/viewtopic.php?p=4704678#p4704678"]Сдвиг в лево по маске понятно и нормально, Сдвиг с 0 - нет.[/uquote]
Сброс битов.
Re: CUBEIDE глюки или...
Добавлено: Вс апр 13, 2025 11:08:56
tonyk
[uquote="veso74",url="/forum/viewtopic.php?p=4704678#p4704678"]Сдвиг с 0 - нет.[/uquote]
Для единообразия.
Код: Выделить всё
spi -> CR1 =
( 0 << SPI_CR1_BIDIMODE_Pos ) | //
( 0 << SPI_CR1_BIDIOE_Pos ) | //
( 0 << SPI_CR1_CRCEN_Pos ) | //
( 0 << SPI_CR1_CRCNEXT_Pos ) | //
( 0 << SPI_CR1_DFF_Pos ) | //
( 0 << SPI_CR1_RXONLY_Pos ) | // Fullduplex
( 1 << SPI_CR1_SSM_Pos ) | // Software slave management disabled
( 1 << SPI_CR1_SSI_Pos ) | //
( 0 << SPI_CR1_LSBFIRST_Pos ) | // MSB передается первым
( 0 << SPI_CR1_SPE_Pos ) | // Пока _не_ включаем SPI!
( br << SPI_CR1_BR_Pos ) | // делитель шины для тактирования SPI;
( 1 << SPI_CR1_MSTR_Pos ) | // Master
( 0 << SPI_CR1_CPOL_Pos ) | // полярность тактового сигнала
( 0 << SPI_CR1_CPHA_Pos ); // Фаза тактового сигнала
Re: CUBEIDE глюки или...
Добавлено: Пн апр 14, 2025 14:34:37
RUNA
Проблему решил. Все дело в компиляторе. Он удалял эту функцию. Пришлось вместо MODIFY_REG(ControlKey,ControlKey,0b11<<0);
сделать SET_BIT(ControlKey,1<<0); А в другой функции вместо снятия бита установка бита, и тогда все заработало как надо.
veso74 вы просили прогу во вложении
Re: CUBEIDE глюки или...
Добавлено: Пн апр 14, 2025 14:57:30
veso74
Строка 60:
Код: Выделить всё
if(READ_BIT(GPIOB->IDR,GPIO_IDR_IDR12) == 0)
всегда равна 1. Проверка всегда переходит отсюда на строку 84. GPIO_IDR_IDR12 вероятно не изменяется.
(Регистр входных данных GPIO используется для чтения состояния ввода-вывода определенного контакта GPIO или порта GPIO. Здесь можем только читать этот регистр, но не записывать в него).
Спойлер

Не знаю логику создания устройства. Пересмотрите логику.
Re: CUBEIDE глюки или...
Добавлено: Пн апр 14, 2025 15:29:54
RUNA
Логика простая. При нажатии кнопки происходит вычитание Skvagnoct1 по таймеру до мин значения. Когда достигло мин значения устанавливается бит 1, что бы не заходить в эту функцию. При отпускании кнопки переходим по else и по таймеру прибавляем Skvagnoct1 до макс значения и происходит сброс всех контрольных битов.