исключения ниоткуда

33 views
Skip to first unread message

Александр Литягин

unread,
Sep 6, 2016, 9:28:17 AM9/6/16
to uOS embedded
Всем кто слышит.
отлаживаю проект под МИПС32 - елвис ВМ10Я на их демо-плате.
запускаю программу интенсивно обрабатывающую запросы с ТСПклиента, и дающего дебажный журнал в консоль. в течение 5мин работы вылетает исключение 
примерно такого вида 
*** 0x80045338: exception 'Address Save'
*** last isr      : addr=$80052650, ret=$8004d3c8
*** last exception: addr=$80052650, ret=$8004d3c8
***               : addr=$80052650, ret=$8004d3c8
*** cause=0x00808414, badvaddr=0x30001c02, config=0x80060183, errEPC=0x223cf1
                t0 = 980005b0   s0 = 80081360   t8 =        0   lo =      834
at = 275a05a4   t1 = 980110a4   s1 = 98011064   t9 =        0   hi =      578
v0 =    2f5d0   t2 =     1388   s2 = 98011038               status = 30001c03
v1 =     1388   t3 = 800800f8   s3 =        0                  epc = 80045338
a0 = 30001c00   t4 = 98010000   s4 =        0   gp = 98000000
a1 = 800800f8   t5 =        0   s5 =        0   sp = 80081310
a2 =        0   t6 =        0   s6 =        0   fp = 80081380
a3 = 980104a8   t7 =        0   s7 =        0   ra = 80045224

ошибка может быть 'Address Save' 'Address Load' 'Illgal Instruction'
badvaddr=0x30001c02 - чаще всего, а может быть и 800002xx
когда лезу в место ошибки по адресу epc - там вполне валидный код, с совершенно нормально вровнеными адресами.

Помогите докопаться до источника траблы.
заметил что при выключении кеша - поймать это не удается, все тормозит но пашет стабильно.

Alex

unread,
Sep 6, 2016, 12:12:37 PM9/6/16
to uOS embedded
Попробовать поэкспериментировать: Снизить тактовую частоту процессора, скомпоновать проект во внутреннем ОЗУ и т. п. Больше в голову ничего не приходит.

Serge V.

unread,
Sep 6, 2016, 5:24:06 PM9/6/16
to uOS embedded
Возможно, где-то чередуются кешированные и некешированные обращения к одной и той же памяти. При этом можно получить старые неправильные данные. 

Еще одна гипотеза: переполняется стек. При включенном кэше тайминг обработки прерываний сильно меняется. Соответственно, нужная глубина стека будет другая.

Александр Литягин

unread,
Sep 7, 2016, 5:11:40 AM9/7/16
to uOS embedded
Со стеком игрался с самого начала. сейчас еще по 4к выделил запас. тайминг с кешем насколько мне казалось сильно облегчается, без кеша должно как раз кешу быть сложнее.

вот сейчас выдал исключение Adress save на инструкции lw, напрашивается мысль что исключение возникает в коде с уже установленым флагом исключения EXL.

видимо надо попробовать ставить ловушки на этот флаг, но как и куда?


среда, 7 сентября 2016 г., 0:24:06 UTC+3 пользователь Serge V. написал:

Александр Литягин

unread,
Sep 7, 2016, 6:23:17 AM9/7/16
to uOS embedded
пробовал с 200 и 250МГц, на 200 вроде подольше держится, но всеже выпало в обморок.


вторник, 6 сентября 2016 г., 19:12:37 UTC+3 пользователь Alex написал:

Alex

unread,
Sep 8, 2016, 11:37:45 AM9/8/16
to uOS embedded
На самом деле возможны ошибки в самом процессоре.  В MC12 подобные ошибки были и есть, но это совсем другая история.

Попробуйте включить только кэш CODE, а кэш DATA не включать (он особо ускорения не дает).

Александр Литягин

unread,
Sep 9, 2016, 5:01:10 PM9/9/16
to uOS embedded
я словил один раз процессор по адресу 0 - повезло. стек при этом оказался частично порушеным. так что напрашивается уже высказаное ранее - искать потерю указателей.
как это делать непонятно. сейчас занят построением валидатора стека - типа будет контролировать целостность фреймов, или вообще отлавливать изменения в стеке. 
может ктото дела чтото такое? есть какието наработки?


четверг, 8 сентября 2016 г., 17:37:45 UTC+2 пользователь Alex написал:

Serge V.

unread,
Sep 9, 2016, 5:41:58 PM9/9/16
to uOS embedded
Лучше всего помогает хороший симулятор с трассировкой всех машинных инструкций, изменений системных регистров и обращений к памяти. Но разработка и поддержание такого симулятор сама по себе большая работа. Для pic32 есть доработанный QEMU (https://github.com/sergev/qemu/wiki), а как дела обстоят с элвисовскими процессорами, я не в курсе.

Александр Литягин

unread,
Sep 10, 2016, 5:04:07 AM9/10/16
to uOS embedded
у меня гдето дыры в ТСП стеке или в нитке его использующей. часть специфическая мипс - полагаю не от нее проблемы. интересно былоб запустить мою прогу на венде из MSVC с профилированием памяти.
по форуму ниже я увидел что успешно решается запуск уоси с общением по КОМу. 
с сетевым стеком уже менее понятно - насколько я понял для линя сделан некий TAP который является симулятором сетевухи. может ктото объяснить чтоэто такое?
есть ли готовые примеры запуска симуляции уОС проекта под вендой?

пятница, 9 сентября 2016 г., 23:41:58 UTC+2 пользователь Serge V. написал:

Александр Литягин

unread,
Sep 19, 2016, 4:55:38 AM9/19/16
to uOS embedded
Дыр ненашел.
зато наваял модуль валидации стека для МИПС32 - ведет в стороне от стека процесса журнал вызовов процедур, по которому в любой момент может провести валидацию стека. как своего так и стороннего ниток.
Как полагаете - надо иметь это в проекте уОСи? надо ли меть в сорсах готовые обкладки для валидации стека?


суббота, 10 сентября 2016 г., 12:04:07 UTC+3 пользователь Александр Литягин написал:
Reply all
Reply to author
Forward
0 new messages