Jump to content

    
Digi

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

Recommended Posts

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

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

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

Share this post


Link to post
Share on other sites
5 часов назад, haker_fox сказал:

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

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

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

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

 

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

Share this post


Link to post
Share on other sites
43 minutes ago, jcxz said:

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

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

44 minutes ago, jcxz said:

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

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

Share this post


Link to post
Share on other sites
1 час назад, haker_fox сказал:

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

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

 

Share this post


Link to post
Share on other sites
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
13 hours ago, Digi said:

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

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

9 hours ago, Digi said:

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

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

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.