Сегодня поправил одну из мало примечательных ошибок в функции startup() для примеров stm32f4discovery.
Как известно существуют два вида переменных - инициализированные и инициализировавшие. Так вот в моем коде не было копирование и тех и других переменных из области данных в прошивке в область оперативной памяти, что приводило к весьма забавным глюкам по типу - сколько не нажимай сброс а счетчик все продолжает считать с того места на котором он остановился до сброса.
Я взял стандартную инициализацию из примеров для стм:
На этом все.
Как известно существуют два вида переменных - инициализированные и инициализировавшие. Так вот в моем коде не было копирование и тех и других переменных из области данных в прошивке в область оперативной памяти, что приводило к весьма забавным глюкам по типу - сколько не нажимай сброс а счетчик все продолжает считать с того места на котором он остановился до сброса.
Я взял стандартную инициализацию из примеров для стм:
unsigned long *src;
unsigned long *dest;
src = &__text_end;
dest = &__data_start;
if (src != dest)
while(dest < &__data_end)
*(dest++) = *(src++);
dest = &__bss_start;
while(dest < &__bss_end)
*(dest++) = 0;
После чего те примеры в которые я добавил этот код инициализации заработали как надо.
На этом все.
Комментариев нет:
Отправить комментарий