Поиск бага
24.08.2017, 09:16
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 12.02.2013
Адрес: На болотах
Сообщений: 1,163
Сказал спасибо: 46
Сказали Спасибо 315 раз(а) в 244 сообщении(ях)
|
Re: Поиск бага
Сообщение от bass1981
|
|
И зависать она может глубоко CMSIS и с какого места вызвана данная функция поди разберись...
|
Это только ваши догадки . CMSIS написана профессиональными программистами и код там самый правильный. ИМХО логирование вам мало поможет - т. к. зависание может быть вызвано некорректными таймингами при работе с периферией - а логированием (добавлением инструкций) вы их можете сделать правильными
Можно попробовать поднять SYSCLK до 72МГц и всё остальное вслед за ним и посмотреть как программа будет выполнятся.
|
|
|
|
24.08.2017, 12:57
|
|
|
Гражданин KAZUS.RUN
Регистрация: 01.09.2007
Сообщений: 897
Сказал спасибо: 278
Сказали Спасибо 57 раз(а) в 54 сообщении(ях)
|
Re: Поиск бага
Сообщение от dgrishin
|
Это только ваши догадки . CMSIS написана профессиональными программистами и код там самый правильный. ИМХО логирование вам мало поможет - т. к. зависание может быть вызвано некорректными таймингами при работе с периферией - а логированием (добавлением инструкций) вы их можете сделать правильными
Можно попробовать поднять SYSCLK до 72МГц и всё остальное вслед за ним и посмотреть как программа будет выполнятся.
|
Улыбнули...
Windows тоже не дураки писали, насколько помниться на какой то из презентаций был синий экран... )))
Если вы утверждаете что в вашем софте нет багов - то вы не правы , они просто еще не найдены...
Мне приходилось править CMSIS , все заработало . Через месяц открываю проект, говорит что обновленная версия данного пакета есть скачать ?
Сделал копию , скачал бага нет...
Про тайминги писал выше и вы правы...
И попробуйте скормить CMSIS указатель на не существующий буфер ....
Посмотрите на эфект...
А хотите проектик под 415 накидаю всего HID и USART... И вот если не сделать задержку между приемом по USART и отправкой в USB - exeption... Код работает в 4ой версии на 415 и в 5ой на 103ем ...
Последний раз редактировалось bass1981; 24.08.2017 в 13:12.
|
|
|
|
24.08.2017, 13:58
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 12.02.2013
Адрес: На болотах
Сообщений: 1,163
Сказал спасибо: 46
Сказали Спасибо 315 раз(а) в 244 сообщении(ях)
|
Re: Поиск бага
Сообщение от bass1981
|
|
И попробуйте скормить CMSIS указатель на не существующий буфер ....
|
Это как в анекдоте про японскую бензопилу и суровых русских мужиков.
"...И положили они под пилу рельс..."
|
|
|
|
24.08.2017, 14:05
|
|
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО/МО
Сообщений: 12,293
Сказал спасибо: 11,862
Сказали Спасибо 4,160 раз(а) в 3,178 сообщении(ях)
|
Re: Поиск бага
bass1981, адрес на I2C имеет вид 0bxxxxxxxy, xxxxxxx - 7 бит адреса, y - направление передачи (0 - write slave, 1 - read slave). Каждый продукт для I2C имеет свой адрес/набор адресов. В последнем случае есть дополнительные ноги для его модификации с двоичной/троичной/иной кодировкой (смотрим по DS). Адрес передаётся в первом байте посылки. Экзотический широковещательный режим естественно не рассматриваем  . Расширитель портов в нашем случаье формально и есть регистровая 8 бит память, состояние которой изменяется командами записи от master. Состояние при включении будет на ввод и данные 0xFF. Этот код не стоит использовать  . Ну и его чтение говорит о первой итерации после POR.
dgrishin, если такое логгирование изменит ситуацию - то так ему и быть, лишний килобайт кода "не спасёт отца русской революции"(c). А висящий индикатор поможет таки отследить ситуацию при снижении ее частоты до недель/месяцев.
Если алгоритм инициализации I2C немного наделить интеллектом, то вполне можно будет и дальше пойти. Тогда придётся немного больше таких мелкосхем использовать (до 8 штук). И при инициализации считывать весь набор адресов для определения состояния такого стека регистров с записью сохранённого в очередной свободный.
Вот тут под рукой оказалась ардуинка с STM, попробовал с ней ночью - на 4 корпусах регистров нормально отработало сохранение кода (по кнопке reset, вместо WDT  ).
Итого можно будет использовать 253 контрольные точки (0x00 и 0xFF стоит пропустить).
Значение кода на светодиодах будет инверсным (через балластный к питанию).
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
|
|
|
|
24.08.2017, 14:56
|
|
|
Гражданин KAZUS.RUN
Регистрация: 01.09.2007
Сообщений: 897
Сказал спасибо: 278
Сказали Спасибо 57 раз(а) в 54 сообщении(ях)
|
Re: Поиск бага
Сообщение от mike-y-k
|
bass1981, адрес на I2C имеет вид 0bxxxxxxxy, xxxxxxx - 7 бит адреса, y - направление передачи (0 - write slave, 1 - read slave). Каждый продукт для I2C имеет свой адрес/набор адресов. В последнем случае есть дополнительные ноги для его модификации с двоичной/троичной/иной кодировкой (смотрим по DS). Адрес передаётся в первом байте посылки. Экзотический широковещательный режим естественно не рассматриваем . Расширитель портов в нашем случаье формально и есть регистровая 8 бит память, состояние которой изменяется командами записи от master. Состояние при включении будет на ввод и данные 0xFF. Этот код не стоит использовать . Ну и его чтение говорит о первой итерации после POR.
|
Чуть чуть про нюанс забыли со скоростью... Под рукой исходников нету... Надо для начала посмотреть на какой скорости там все работает...
А зачем 8 то .... ??? Две поставить 65000 комбинаций... Правда пр и логировании будет времени тратиться на запись в два адреса...
Последний раз редактировалось bass1981; 24.08.2017 в 15:01.
|
|
|
|
24.08.2017, 15:57
|
|
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО/МО
Сообщений: 12,293
Сказал спасибо: 11,862
Сказали Спасибо 4,160 раз(а) в 3,178 сообщении(ях)
|
Re: Поиск бага
bass1981, предложенный чип на 100kHz работает и на шине у каждой пары собственная скорость (SCL). Время на одну операцию на шине 20 тактов на 100kHz ~ 5ms.
И я не предлагаю писать в 2 сразу, а только при инициализации проверять и перезаписывать текущий в свободный. Появление индикации на втором и последующих будет показывать последнюю КТ в предыдущем до WDT/reset состоянии.
А 0xFF в рабочем признак запуска в первый раз.
Можно и более быстрые чипы посмотреть, я исходил из своего наличия  .
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
|
|
|
|
24.08.2017, 16:36
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 12.02.2013
Адрес: На болотах
Сообщений: 1,163
Сказал спасибо: 46
Сказали Спасибо 315 раз(а) в 244 сообщении(ях)
|
Re: Поиск бага
Ещё один способ навскидку - написать свои обработчики (HardFault_Handler, BusFault_Handler и UsageFault_Handler) в которых сохранять в NVRAM е или в SRAMe адрес, с которого они были вызваны. А потом проанализировать код по этому адресу.
|
|
|
|
24.08.2017, 16:44
|
|
|
Гражданин KAZUS.RUN
Регистрация: 01.09.2007
Сообщений: 897
Сказал спасибо: 278
Сказали Спасибо 57 раз(а) в 54 сообщении(ях)
|
Re: Поиск бага
Все таки нашел еще одно решение....
Не разу как раз не работал, и опыт получу и код останется..
Надо только глянуть завтра будет схемотехнику на Vbat разведен плюс...
backup домен !!!
Сейчас занят, вечером читать буду что там с записью и т.д ...
Оставляем вач ...
Сброс по питанию очищаем всю память... (например в 00)..
0 не используем...
Происходит сброс по ватчу , смотрим первый байт занят начинаем писать во второй и т.д..
Запускаем устройство... Через неделю приходим снимаем журнал через усб....
Только надо глянуть на скорость записи туда и нет ли ограничений по кол-ву записей....
|
|
|
|
24.08.2017, 16:47
|
|
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО/МО
Сообщений: 12,293
Сказал спасибо: 11,862
Сказали Спасибо 4,160 раз(а) в 3,178 сообщении(ях)
|
Re: Поиск бага
dgrishin, а как быть с WDT? И ошибка может быть просто в бесконечном цикле, а исчерпание WDT даст просто сброс.
Алгоритм должен быть в итоге минимально зависим, воспроизводим,…
Вариант по принципу POST в итоге оптимальнее.
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
|
|
|
|
24.08.2017, 16:59
|
|
|
Гражданин KAZUS.RUN
Регистрация: 01.09.2007
Сообщений: 897
Сказал спасибо: 278
Сказали Спасибо 57 раз(а) в 54 сообщении(ях)
|
Re: Поиск бага
Сообщение от dgrishin
|
|
Ещё один способ навскидку - написать свои обработчики (HardFault_Handler, BusFault_Handler и UsageFault_Handler) в которых сохранять в NVRAM е или в SRAMe адрес, с которого они были вызваны. А потом проанализировать код по этому адресу.
|
По подробнее если не сложно...
|
Код:
|
void os_error (uint32_t error_code) {
/* This function is called when a runtime error is detected. */
/* Parameter 'error_code' holds the runtime error code. */
/* HERE: include optional code to be executed on runtime error. */
switch (error_code) {
case OS_ERROR_STACK_OVF:
/* Stack overflow detected for the currently running task. */
/* Thread can be identified by calling svcThreadGetId(). */
break;
case OS_ERROR_FIFO_OVF:
/* ISR FIFO Queue buffer overflow detected. */
break;
case OS_ERROR_MBX_OVF:
/* Mailbox overflow detected. */
break;
}
for (;;);
} |
А за наводку спасибо, сюда можно вставить также логирование....
Так вы имели ввиду ???
Но ошибка может вообще банально быть в прерывании .... Например взят и не сброшен некий флаг при вызове прерывания и прерывание начинает вызваться постоянно ... Соответственно главный цикл перестает свое выполнение....
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 11:03.
|
|