TOG 0 14 августа, 2019 Опубликовано 14 августа, 2019 (изменено) · Жалоба Друзья, столкнулся с непонятным глюком отладчика Keil MDK 5.24.2 при изучении примера SPI на отладочной плате STM32F746-Discovery: При попытке пошагово пройти программу отладчик совершает невероятные прыжки то вверх по коду то на много команд вперед, потом снова назад, хотя программа линейная. Если просто запустить без отладки, то программа один раз выполняется правильно, но при попытке ее зациклить с помощью "goto" она намертво где-то виснет. Что посоветуете ? Та же программа на отладочной плате STM32VL-Discovery (STM32F100) работает прекрасно и отладчик ведет себя хорошо. Изменено 14 августа, 2019 пользователем TOG Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 217 14 августа, 2019 Опубликовано 14 августа, 2019 · Жалоба 9 минут назад, TOG сказал: Что посоветуете ? Выключить оптимизацию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HardEgor 71 14 августа, 2019 Опубликовано 14 августа, 2019 · Жалоба 1. Компиляция с оптимизация меняет порядок и оптимизирует несколько строк си в один блок ассемблерных команд. Поэтому если шагать в си коде курсов будет прыгать. 2. Кэши включены Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 34 14 августа, 2019 Опубликовано 14 августа, 2019 · Жалоба Что посоветуете ? На ассемблере эту тестуху написать (практически не шучу) - кроме вашего кода не будет ничего... Вопросов подобных просто не возникнет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TOG 0 15 августа, 2019 Опубликовано 15 августа, 2019 (изменено) · Жалоба Спасибо друзья. Выключил оптимизацию и отладчик заработал как надо. Выключил кэши и программа заработала как надо. Одно не пойму. Это ведь пример из Cube F7, и там эти кэши включены были. Почему мне пришлось их выключить чтобы пример заработал ? Изменено 15 августа, 2019 пользователем TOG Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 15 августа, 2019 Опубликовано 15 августа, 2019 · Жалоба 15 minutes ago, TOG said: Почему мне пришлось их выключить чтобы пример заработал ? Как бэ буду капитаном, но... найдите темы про куб на форуме... и придите в квыводу, что его выбросить надо, и надо начать с чтение документации)))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_dark_ 0 30 января, 2020 Опубликовано 30 января, 2020 (изменено) · Жалоба Столкнулся с такой проблемой на Keil (5.29) Для проекта на STM32F427 не работает SPL,... ну как "не работает"... Например настройка clock и PLL проходит, SystemCoreClock равный 180000000 устанавливается, но стоит вызвать SystemCoreClockUpdate(), как она сбрасывается в 0. "возвращаю" SystemCoreClock = 180000000;, камень запустился; Дебажу SystemCoreClockUpdate(), внутри все временные переменные не отрабатываются, всегда 0. Аналогично при и инициализации UART USART_StructInit(&USART_InitStructure); USART_InitStructure.USART_BaudRate = 9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_Even; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART_1RS485, &USART_InitStructure); BRR = 0, т.е. настройки порта не устанавливаются а флаги разрешения прерывания ставятся нормально NVIC_InitStructure.NVIC_IRQChannel = USART_1RS485_IRQn; // UART7_IRQn NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); USART_ITConfig(USART_1RS485, USART_IT_RXNE, ENABLE); NVIC_EnableIRQ (USART_1RS485_IRQn); USART_ClearITPendingBit(USART_1RS485, USART_IT_RXNE); USART_ClearITPendingBit(USART_1RS485, USART_IT_TXE); USART_ClearITPendingBit(USART_1RS485, USART_IT_TC); USART_ClearITPendingBit(USART_1RS485, USART_IT_ORE_RX); USART_Cmd(USART_1RS485, ENABLE); Но прерывания по приему не возникает ... -------- Прерывание от SysTim работает нормально, при инициализации uint8_t SysTim_Init(uint16_t Tick) { uint8_t result = 0; if ((Tick>4) && (Tick<=1000)){ _iSysTick_Counter = 0; _iSysTick_Step = 1000 / Tick; if (_iSysTick_Step != 0){ if (SysTick_Config(SystemCoreClock / Tick) == 0){ result = 1; } } } return result; } Такой же примерно проект (SysTim, GPIO, прерывания от TIMn, UART, ADC, DMA), но на STM32L151xxx работает и дебажится нормально... Настройки проектов аналогичны, кроме особенностей камня. SPL и CMSYS пробовал разных релизов подключать, сейчас стоят последние скачанные с ST и Keil... Если кто сталкивался с таким или есть мысли куда рыть, буду благодарен за пинок в нужном направлении... Впечатление, такое, что что-то "не включил" в настройках, но чего не хватает не пойму ... Изменено 30 января, 2020 пользователем _dark_ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_dark_ 0 30 января, 2020 Опубликовано 30 января, 2020 (изменено) · Жалоба Кажется сработал принцип "пока объяснял в чем проблема до самого дошло" )) Пересобрал проект с "чистой" директории, скопировав все исходники, SPL, startup и CMSYS. После добавки всего этого в конфигурацию и минимальных настроек самого проекта, все завелось, после добавления пары инклюдов в свои исходники Вопрос закрыт. зы После пересборки стало выдавать несколько элементарных ошибок, хотя до этого хотя и чистил проект, но сборка была без них (с полной перекомпиляцией). Изменено 30 января, 2020 пользователем _dark_ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться