Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Изменяется содержимое массива...
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
ЮКОР
STM32F4. Keil.
Есть массив, в который складываются данные от UARTа.
Случайно заметил, что его содержимое, если даже UART disabled, меняется.
Я в программе анализирую один из элементов этого массива и поджигаю светодиод. Он стал случайным образом подмигивать.
Кто или что может писать в массив, портить данные? Динамических массивов я не создаю.
Используется DMA передача данных. Но адреса источников и приёмников не совпадает с адресом массива UARTa.

Подскажите, что нужно сделать чтобы не было произвола?
Заранее спасибо.



Kabdim
А почему бы просто не воспользоваться watchpoint?
kovigor
Цитата(ЮКОР @ Aug 21 2015, 15:17) *
Кто или что может писать в массив, портить данные?

Стек переполняется ?
zltigo
QUOTE (ЮКОР @ Aug 21 2015, 15:17) *
Подскажите, что нужно сделать чтобы не было произвола?

Учиться, учиться, учится и думать. После чего сможете задать вопрос правильно. А правильно заданный вопрос содержит не мнее 90% необходимого для ответа.

jcxz
Цитата(ЮКОР @ Aug 21 2015, 18:17) *
Кто или что может писать в массив, портить данные? Динамических массивов я не создаю.

Так как UART собственной воли не имеет и не может сам что-то куда-то писать, то очевидно портит данные ваш код.

Цитата(ЮКОР @ Aug 21 2015, 18:17) *
Подскажите, что нужно сделать чтобы не было произвола?

Закрыть браузер, подключить эмулятор, открыть исходник и искать, искать.....
Golikov A.
Для того чтобы устранить ошибку надо:
1. найти ошибку
2. устранить
Вы что серьезно думаете это поможет человеку, который такое спрашивает?


По сути вопроса. Данные могут испортиться когда кто-то что-то пишет. Потому по всей вашей программе найдите присвоения (особенно где вы что-то копируете по указателям или блоками в массив), в этих местах и ищите где вы что-то скопировали мимо адреса. Сразу попробуйте увеличить стэк проекту, может быть он кончился и данные полезли на ваши сверху. Еще раз точно проверьте что у вас все каналы ДМА выключены, проверьте прямо регистры.
jcxz
Цитата(Golikov A. @ Aug 24 2015, 12:34) *
Еще раз точно проверьте что у вас все каналы ДМА выключены, проверьте прямо регистры.

Вы что серьёзно думаете, что человек, который такое спрашивает, может использовать DMA? :-D
Golikov A.
Цитата
Вы что серьёзно думаете, что человек, который такое спрашивает, может использовать DMA? :-D


я не думаю, я знаю,

Цитата
Используется DMA передача данных. Но адреса источников и приёмников не совпадает с адресом массива UARTa.


вот его бы я отключил на время проверки....
А в целом шутка принимается
DrGluck
"... что нужно сделать чтобы не было произвола? ..." © sm.gif

Для начала - "исходник в студию" ...
mantech
Цитата(jcxz @ Aug 24 2015, 19:44) *
Вы что серьёзно думаете, что человек, который такое спрашивает, может использовать DMA? :-D


Использовать-то может, другой вопрос - как? wacko.gif

А если по сути, то проверять надо поэтапно:
1) "внимательное всматривание" в код программы и понимание того, что она делает
2) отключение "ненужных" процедур
3) дебаг-отчеты в терминалку
а остальное - по обстоятельствам
scifi
Цитата(mantech @ Aug 24 2015, 20:31) *
... программы и понимание того, что она делает

Фигасе! Так ведь все вопросы отпадут. В форуме станет пусто аки в пустыне laughing.gif
Нет, на это мы пойтить не можем biggrin.gif
mantech
Цитата(scifi @ Aug 24 2015, 21:00) *
Фигасе! Так ведь все вопросы отпадут.


А вот и нефигасе! Когда ТС начнет вдумываться в то, что наваял, тут столько вопросов будет, для чего то и это, что отвечать не успеем biggrin.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.