Страница 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-го апреля! :) :beer:

[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
Если код не скрыт и не секретен ( :solder: ), можете ли поделиться здесь всем архивом?

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"]Если код не скрыт и не секретен ( :solder: ), можете ли поделиться здесь всем архивом?[/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 до макс значения и происходит сброс всех контрольных битов.