Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: дивайс нв STM32F407
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
nanorobot
Дивайс под отладчиком (STLink V2) работает "неправильно" без него "правильно". Один образец lbdfqcf отдан работодателю на тестирование. Он рассказывает, что изредка случается некая хрень, которая, по его описанию, похожа на ту, что имееи место под отладчиком. Разобраться почему не работает под отладчиком не могу нескюлько дней. Суть "хрени" изложить затруднительно, очень привязана к специфике дивайса. Известны ли уважаемым коллегам некие общие принципы различия работы камня под отладчиком, и без него, м.б. что то с времянками?



внутри "хрень" можно описать так volatile переменная может модифицироваться в разных местах, и под отладчиком она получает значение, которое не должна иметь по логике работы
ViKo
Предлагаю не зацикливатся на работе под отладчиком / не под отладчиком, а искать ошибку. У Кейла, к примеру, есть возможность ставить точки останова с условиями. Например, при записи в переменную.
scifi
Цитата(nanorobot @ May 20 2016, 22:00) *
Известны ли уважаемым коллегам некие общие принципы различия работы камня под отладчиком, и без него, м.б. что то с времянками?

К примеру, под отладчиком можно просматривать регистры периферии, не останавливая программу. Некоторая периферия меняет своё состояние при чтении её регистров отладчиком.
Другой вариант: алгоритм работает в связке "периферия - прерывания". Если программу остановить отладчиком, периферия может продолжать работать (таймеры, АЦП, ПДП), а прерывания не обрабатываются. Алгоритм ломается.
В общем, бывают нюансы.
nanorobot
Цитата(scifi @ May 21 2016, 13:57) *
К примеру, под отладчиком можно просматривать регистры периферии, не останавливая программу. Некоторая периферия меняет своё состояние при чтении её регистров отладчиком.
Другой вариант: алгоритм работает в связке "периферия - прерывания". Если программу остановить отладчиком, периферия может продолжать работать (таймеры, АЦП, ПДП), а прерывания не обрабатываются. Алгоритм ломается.
В общем, бывают нюансы.


"хрень" возникает без какой либо остановки. Live watch тоже не использется по причине его отсутствия (Ubunru | Eclipse | arm-none-eabi-gcc 5.3)
RadiatoR
Цитата(ViKo @ May 21 2016, 08:47) *
У Кейла, к примеру, есть возможность ставить точки останова с условиями. Например, при записи в переменную.


Уважаемый! Подскажите как включить такую фичу?
ViKo
Цитата(ЯadiatoR @ May 21 2016, 14:11) *
Уважаемый! Подскажите как включить такую фичу?

Я сейчас не при Кейле. Там у него в помощи расписано. Типа, brakepoint with condition.
misyachniy
Я такое встречал.
Нужно при работе с отладчиком включить аппаратный сброс перед загрузкой программы.
Если дефект пропадет - значит проблема в инициализации.
Где то не сброса настроек регистров периферии или тактирования перед инициализацией.

Если в программе есть ватчдог, то он и может приводить к редким проявлениям дефекта.
pitt
Может это и другая проблема и я пока отложил ее в сторону...
Плата работает под дебаггером и по power reset, но не работает по сбросу. Идеи?
ViKo
Цитата(ViKo @ May 21 2016, 14:52) *
Я сейчас не при Кейле. Там у него в помощи расписано. Типа, brakepoint with condition.

http://www.keil.com/support/man/docs/uv4/u...g_breakpnts.htm
jcxz
Цитата(pitt @ May 24 2016, 00:15) *
Плата работает под дебаггером и по power reset, но не работает по сбросу. Идеи?

Например: неправильно инициализируется какая-то периферия (вне МК), которая сбрасывается power reset-ом, но не сбрасывается сбросом.
Например - внешняя SPI-FLASH. В процессе работы даёте ей команду SLEEP, после вкл. питания она не находится в SLEEP и отвечает на команды и Ваш стартовый код её нормально обнаруживает и инициализирует, а после сброса МК, чип FLASH не сбрасывается и может быть в SLEEP, тогда он не будет отвечать ни на какие команды кода инициализации.
SasaVitebsk
Цитата(ЯadiatoR @ May 21 2016, 14:11) *
Уважаемый! Подскажите как включить такую фичу?

Такое есть и в IAR и в QT встречал.и даже на крупных контроллерах AVR.
pitt
Цитата(jcxz @ May 24 2016, 01:13) *
Например: неправильно инициализируется какая-то периферия (вне МК), которая сбрасывается power reset-ом, но не сбрасывается сбросом.
Например - внешняя SPI-FLASH. В процессе работы даёте ей команду SLEEP, после вкл. питания она не находится в SLEEP и отвечает на команды и Ваш стартовый код её нормально обнаруживает и инициализирует, а после сброса МК, чип FLASH не сбрасывается и может быть в SLEEP, тогда он не будет отвечать ни на какие команды кода инициализации.

Спасибо за совет. А чем тогда jtag помогает? Всего "внешнего" ethernet phy, никаких слипов.
SasaVitebsk
Цитата(pitt @ May 23 2016, 21:15) *
Плата работает под дебаггером и по power reset, но не работает по сбросу. Идеи?

Перемычка бута не установлена ... )) Под jtag по любому будет работать... ))
А вообще бывали такие случаи, но в каждом конкретном случае свои проблемы были ... Не запомнилось ни разу ... ))
johnshadow
Что у вас на ноге NRST висит (подтяжки, емкость)?

UPD: отбой - не внимательно прочитал первый пост. извините.
pitt
Цитата(SasaVitebsk @ May 25 2016, 02:14) *
Перемычка бута не установлена ... )) Под jtag по любому будет работать... ))
А вообще бывали такие случаи, но в каждом конкретном случае свои проблемы были ... Не запомнилось ни разу ... ))

Железо в попрядке - это отладочная плата от Кайла. Я ее использую для работы с OV7691/OV5640
demiurg_spb
В коде используется что-нибудь из отладочного блока, например DWT таймер?

Если да, то добавьте следующую строку в инициализацию - должно помочь.
Код
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.