Jump to content

    

Переезд с STM32F1xx на STM32F4xx Проблемы...

Recommended Posts

Arlleex
1 минуту назад, Xenia сказал:

Потому, что сама структура GPIO_InitTypeDef ... определена в пакете CubeMX...

GPIO_InitTypeDef - штука изначально пришедшая из SPL. Так что, возможно, ТС использует именно его.

Share this post


Link to post
Share on other sites

jcxz
5 часов назад, haker_fox сказал:

Да вы что? А луна-то круглая) То, чем инициализируются переменные, описано в соответствующих книгах. Иначе бы программировать на этом языке было бы невозможно.

В некоторых случаях: зависит именно от компилятора. Например VC может делать заполнение автоматических переменных некоторой константой (0xC0 вроде). Это делается пролог-кодом функции. А также для переменных, создаваемых динамически, на куче (кодом malloc()-а и new).

Обычно эта опция включена при DEBUG-компиляции и выключена при RELEASE. (поэтому там у начинающих часто в DEBUG работает, а в RELEASE - глючит :wink: )

В embedded-компиляторах я такого не видел, но возможно - тоже где-то имеется.

 

PS: А программировать надо так, чтобы работоспособность программы не зависела от включенности/выключенности такой опции (если она есть).

Share this post


Link to post
Share on other sites

haker_fox
43 minutes ago, jcxz said:

В некоторых случаях: зависит именно от компилятора.

Я понимаю, что компиляторы могут предоставлять фишечки пользователю. Но в данном случае поведение определено стандартом.

44 minutes ago, jcxz said:

PS: А программировать надо так, чтобы работоспособность программы не зависела от включенности/выключенности такой опции (если она есть).

О, это 100%!!!! Иначе переносимость кода стремится к нолю.

Share this post


Link to post
Share on other sites

SSerge
1 час назад, haker_fox сказал:

Но в данном случае поведение определено стандартом.

стандартом определено что не определено. :)

 

Share this post


Link to post
Share on other sites

Digi
On 6/9/2021 at 10:45 PM, Arlleex said:

В PC попал каким-то чудом адрес модуля GPIO (0x40003800)... Я про таблицу векторов не просто так написал. Может у вас там активируется вектор, которого в новом контроллере нет, и попадает он на вектор обработчика WWDG. Но начать надо, все-таки, с чистки мест от кода, который полагается на какие-то значения, которые в локальных автоматических переменных априори могут получить любое содержимое. Либо проект целиком сюда выложить, авось там не так все страшно. Но если страшно, то нет, конечно, не выкладывайте.

Чистку провёл, теперь все переменные, объявляемые при создании функции, теперь имеют начальные значения.

Проект представляет из себя письмо Дяди Фёдора домой )))). Код просто ужасен.... Поэтому не  этично будет выкладывать этот кошмар большого объёма )

Cube_MX не использую. Использую SPL. 

FreeRTOS пробовал изменять размер стека, поведение меняется. Но есть ещё отладочная информация, которая сообщает свободный размер, запас

On 6/10/2021 at 8:33 AM, haker_fox said:

#define configCHECK_FOR_STACK_OVERFLOW 2

Попробую включить. . 

Share this post


Link to post
Share on other sites

Digi

Буду очень надеяться, что косяк я всё-же нашел. И как обычно нашлась не проинициализированная переменная.  

Всем спасибо.

Share this post


Link to post
Share on other sites

haker_fox
13 hours ago, Digi said:

Попробую включить. . 

Но имейте в виду, что механизм программный. А значит детектирует переполнение стэка в зависимости от настроения состояния своих же переменных.

9 hours ago, Digi said:

И как обычно нашлась не проинициализированная переменная. 

Локальная? Ибо глобальные точно инициализированы за некоторым исключением.

Share this post


Link to post
Share on other sites

Ruslan1

Я как-то тож перетаскивал с F0 на L4, вот тут немного про это:

https://electronix.ru/forum/index.php?app=forums&module=forums&controller=topic&id=155963

При этом использовал конвертер от STM, он сделал львиную долю работы, потом медленно и печально довел новый сгенерированный им код до ума.

Общие правила просты: проверить все ли переменные используемой структуры установлены куда надо. Перед этим вызвать инициализацию структуры, в библиотеках и это есть- причем оно не в {0} ставит, а в валидные дефолтовые значения.

 

Share this post


Link to post
Share on other sites

std
09.06.2021 в 11:59, Digi сказал:

Пытаюсь перетащить код с STM32F1 на F4 и тут у меня возникают проблемы с работоспособностью кода

AN4904
Application note
Migration of microcontroller applications from STM32F1 Series to STM32F4 Access lines
 

https://www.st.com/resource/en/application_note/dm00325582-migration-of-microcontroller-applications-from-stm32f1-series-to-stm32f4-access-lines-stmicroelectronics.pdf

Edited by std

Share this post


Link to post
Share on other sites

Digi

Конечно же читал. Просто код очень кривой.  Даже сейчас , удалось заставить его работать нормально. Но как только я его запускаю из bootloadera,  так начинается веселье.  Порога или нормально стартует и работает,  или виснет где то. От чего зависит,  не понятно.... Что ещё хуже

 

Share this post


Link to post
Share on other sites

std
01.07.2021 в 00:55, Digi сказал:

Конечно же читал. Просто код очень кривой.  Даже сейчас , удалось заставить его работать нормально. Но как только я его запускаю из bootloadera,  так начинается веселье.  Порога или нормально стартует и работает,  или виснет где то. От чего зависит,  не понятно.... Что ещё хуже

 

Возможно подключение JLink / STLink без сброса микроконтроллера.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.