| Форум РадиоКот 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 то работает все как надо. В чем может быть проблема? Прошу сильно не пинать.
|
|||
| Автор: | 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-го апреля! Оптимизация 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 глюки или... |
Если код не скрыт и не секретен ( ), можете ли поделиться здесь всем архивом?
|
|
| Автор: | RUNA [ Вс апр 13, 2025 10:41:23 ] |
| Заголовок сообщения: | Re: CUBEIDE глюки или... |
В общем (из AVR-щиков) до сих пор не понимаю, почему есть выражения типа: 1<<0; 0b11<<0; 0b000<<0 ... Я то же из avr-щиков. Это просто, сдвиг в лево по маске с определенного бита. Добавлено after 51 second: Если код не скрыт и не секретен ( ), можете ли поделиться здесь всем архивом?Вечером. |
|
| Автор: | 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 вы просили прогу во вложении
|
|||
| Автор: | 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/ |
|



), можете ли поделиться здесь всем архивом?