Например TDA7294

Форум РадиоКот :: Просмотр темы - CUBEIDE глюки или...
Форум РадиоКот
https://radiokot.ru/forum/

CUBEIDE глюки или...
https://radiokot.ru/forum/viewtopic.php?f=59&t=197560
Страница 1 из 2

Автор:  RUNA [ Сб апр 12, 2025 20:41:17 ]
Заголовок сообщения:  CUBEIDE глюки или...

Доброе время суток всем.
Начал изучать STM32 и столкнулся с такой проблемой.
Установил точку останова(стр 72), но программа останавливается не в той точке а совсем в другом месте (стр 84).
Если удалить if в строке 70 то работает все как надо.
В чем может быть проблема?
Прошу сильно не пинать.

Вложения:
Захват.jpg [60.79 KiB]
Скачиваний: 94

Автор:  veso74 [ Сб апр 12, 2025 20:53:08 ]
Заголовок сообщения:  Re: CUBEIDE глюки или...

Предположение первое: вычисления между строках ничего не меняют, и оптимизатор их удалил. Варианты: удалить оптимизацию компилятора или объявить используемые переменные как volatile.

Автор:  RUNA [ Сб апр 12, 2025 21:10:55 ]
Заголовок сообщения:  Re: CUBEIDE глюки или...

Оптимизация 0.

Автор:  jcxz [ Сб апр 12, 2025 23:45:31 ]
Заголовок сообщения:  Re: CUBEIDE глюки или...

Начал изучать STM32
Прям как Гагарин - 12-го апреля! :) :beer:

Оптимизация 0.
Тогда - какое-то нарушение связывания между скомпилированным загружаемым образом и исходными файлами.
Т.е. - вы изменили исходники, но не перекомпилили образ. Обычно компилятор перед стартом отладки, определяет если исходники были изменены после последней компиляции и предлагает их пересобрать. Но иногда он по какой-то причине может не обнаруживать это. И тогда наблюдается то, что у вас.

Совет - полная пересборка проекта. С нуля. Лучше - с предварительным удалением всех предыдущих результатов компиляции. Ну или хотя-бы - через соответствующий пункт в меню компилятора.

Автор:  HardWareMan [ Вс апр 13, 2025 07:14:03 ]
Заголовок сообщения:  Re: CUBEIDE глюки или...

А ещё полезно иметь рядом окно с "disassembling", там сразу видно что чему соответствует.

Автор:  Муркиз [ Вс апр 13, 2025 08:54:43 ]
Заголовок сообщения:  Re: CUBEIDE глюки или...

Сообщение об ошибке при останове не появляется ?

Автор:  tonyk [ Вс апр 13, 2025 09:41:04 ]
Заголовок сообщения:  Re: CUBEIDE глюки или...

Правильно настрой оптимизацию для отладки.
https://cloud.mail.ru/public/GjPf/jncyBG7WL

Автор:  RUNA [ Вс апр 13, 2025 09:57:34 ]
Заголовок сообщения:  Re: CUBEIDE глюки или...

Сообщение об ошибке при останове не появляется ?

Нет. Просто останавливается не в том месте.

Добавлено after 2 minutes:
А ещё полезно иметь рядом окно с "disassembling", там сразу видно что чему соответствует.

Открыто. Но, я в нем не чего не понимаю. Отличается от ассемблера в avr.

Добавлено after 2 minutes 12 seconds:
Правильно настрой оптимизацию для отладки.
https://cloud.mail.ru/public/GjPf/jncyBG7WL

Написал выше. Оптимизация нет.

Добавлено after 2 minutes 43 seconds:
Если убрать точку останова то программа не входит в функцию if а возвращается на начало while.

Добавлено after 3 minutes 8 seconds:
как volatile.

Сделал. Теперь стал проверять if, но потом вываливается в начало не зависимо от результата сравнения.

Автор:  tonyk [ Вс апр 13, 2025 10:14:42 ]
Заголовок сообщения:  Re: CUBEIDE глюки или...

RUNA писал(а):
Написал выше. Оптимизация нет.

А должна быть для отладки, иначе будут непонятные прыжки по программе.

Автор:  veso74 [ Вс апр 13, 2025 10:15:20 ]
Заголовок сообщения:  Re: CUBEIDE глюки или...

Если путь меняется после изменения условий, то вероятно проверка становится бессмысленной (т.е. результат с ней и без нее: одинаков).
Попробуйте оптимизировать свои проверки, например: с листом бумаги и карандашом.

В общем (из AVR-щиков) до сих пор не понимаю, почему есть выражения типа: 1<<0; 0b11<<0; 0b000<<0 ...
Что-то вроде "диалекта AVR" :). Не могу к этому привыкнуть и всё тут :) (+ транслейт).
Проще рассчитать и установить окончательное значение.

Автор:  RUNA [ Вс апр 13, 2025 10:36:23 ]
Заголовок сообщения:  Re: CUBEIDE глюки или...

[
А должна быть для отладки

Попробую.

Автор:  veso74 [ Вс апр 13, 2025 10:38:58 ]
Заголовок сообщения:  Re: CUBEIDE глюки или...

Если код не скрыт и не секретен ( :solder: ), можете ли поделиться здесь всем архивом?

Автор:  RUNA [ Вс апр 13, 2025 10:41:23 ]
Заголовок сообщения:  Re: CUBEIDE глюки или...

В общем (из AVR-щиков) до сих пор не понимаю, почему есть выражения типа: 1<<0; 0b11<<0; 0b000<<0 ...

Я то же из avr-щиков. Это просто, сдвиг в лево по маске с определенного бита.

Добавлено after 51 second:
Если код не скрыт и не секретен ( :solder: ), можете ли поделиться здесь всем архивом?

Вечером.

Автор:  veso74 [ Вс апр 13, 2025 10:42:06 ]
Заголовок сообщения:  Re: CUBEIDE глюки или...

Сдвиг в лево по маске понятно и нормально, Сдвиг с 0 - нет.

Автор:  tonyk [ Вс апр 13, 2025 11:01:58 ]
Заголовок сообщения:  Re: CUBEIDE глюки или...

[
А должна быть для отладки

Попробую.

Ага, картинка выше.

Автор:  RUNA [ Вс апр 13, 2025 11:03:28 ]
Заголовок сообщения:  Re: CUBEIDE глюки или...

Сдвиг в лево по маске понятно и нормально, Сдвиг с 0 - нет.

Сброс битов.

Автор:  tonyk [ Вс апр 13, 2025 11:08:56 ]
Заголовок сообщения:  Re: CUBEIDE глюки или...

Сдвиг с 0 - нет.

Для единообразия.
Код:
    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 );       //   Фаза тактового сигнала

Автор:  RUNA [ Пн апр 14, 2025 14:34:37 ]
Заголовок сообщения:  Re: CUBEIDE глюки или...

Проблему решил. Все дело в компиляторе. Он удалял эту функцию. Пришлось вместо MODIFY_REG(ControlKey,ControlKey,0b11<<0);
сделать SET_BIT(ControlKey,1<<0); А в другой функции вместо снятия бита установка бита, и тогда все заработало как надо.
veso74 вы просили прогу во вложении

Вложения:
Proba2.rar [775.49 KiB]
Скачиваний: 57

Автор:  veso74 [ Пн апр 14, 2025 14:57:30 ]
Заголовок сообщения:  Re: CUBEIDE глюки или...

Строка 60:
Код:
if(READ_BIT(GPIOB->IDR,GPIO_IDR_IDR12) == 0)

всегда равна 1. Проверка всегда переходит отсюда на строку 84. GPIO_IDR_IDR12 вероятно не изменяется.
(Регистр входных данных GPIO используется для чтения состояния ввода-вывода определенного контакта GPIO или порта GPIO. Здесь можем только читать этот регистр, но не записывать в него).
СпойлерИзображение

Не знаю логику создания устройства. Пересмотрите логику.

Автор:  RUNA [ Пн апр 14, 2025 15:29:54 ]
Заголовок сообщения:  Re: CUBEIDE глюки или...

Логика простая. При нажатии кнопки происходит вычитание Skvagnoct1 по таймеру до мин значения. Когда достигло мин значения устанавливается бит 1, что бы не заходить в эту функцию. При отпускании кнопки переходим по else и по таймеру прибавляем Skvagnoct1 до макс значения и происходит сброс всех контрольных битов.

Страница 1 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/