| Автор |
Съобщение |
|
setoy
Ранг: Почетен член
Регистриран на: Пет Фев 17, 2006 9:17 am Мнения: 765 Местоположение: Стара Загора
|
 Exception handling (Cortex)
Да питам вие как го правите... Въпроса е по-скоро от принципен характер: какво е разумно и смислено да се направи, след като процесора е стигнал до ексепшън... Кортекса специално има 4 такива.
|
| Чет Сеп 16, 2010 3:21 pm |
|
 |
|
Desert Leo
Ранг: Форумен бог
Регистриран на: Чет Фев 10, 2005 3:25 pm Мнения: 5677 Местоположение: София
|
Малко спам
Като ти гледам аватара
try:
...
except:
...
ли търсиш?
Питона е върха!!!
|
| Чет Сеп 16, 2010 7:54 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
за дебъг версия примерно това го слагаш и на 4-те:
всъщност при читав дебъгер и празна функция е достатъчна. тая е в случай, че не спира самичко... Тъй де, независимо дали ти ще го спреш или то ще спре, променяш от дебъгера i=0 и то като излезе се връща от мястото дето е направило гафа. Гледаш и откриваш проблема
В релийз версията вече зависи от устройството. Аз имам дисплей, тъй че рестартирам (за да съм сигурен, че дисплея е ОК) в специален режим, изписвам на екрана едно "oops..." и след време/клавиш рестартирам в нормален режим...
|
| Чет Сеп 16, 2010 8:18 pm |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
Ами аз като Миро.
Обикновенно в дебъг прихващам всички ексепшъни, завъртам ги в for( ;; ). И после като се завре вътре почвам да псувам и да си тормозя мозъчните гънки
Иначе в релис - ако имаш дисплей - ясно. Ако не, все някой светодиод да мига с кода на грешката. Всъщност то в релиз версията е гадно, щото обикновенно клиента е тоя дето вижда проблема, та както и да го индицираш - все тая. Какво е разумно да се прави - зависи от приложението.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Пет Сеп 17, 2010 11:22 am |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
Аз си имам една област във външна памет, където си правя лог на изцепшъните: кога, къде, регистри и т.н. От време на време девайсите рапортуват "как вървят нещата". Ако се наложи, правя нова ревизия на фърмуера.
|
| Пет Сеп 17, 2010 11:36 am |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
Между другото с куртекса имам един проблем дето още не съм му измислил решение...
При ARM7 първото нещо в ресет вектора е да сетна една променлива че е cold reset, а като стане фал сетвам променливата на "горещ" рестарт и го пускам след инициализацията в ресет вектора.
После по стойността на променливата знам дали е нормален рестарт или е имало гаф, който да покажа...
При куртекса обаче няма или поне аз не знам читав вариант да се "рестартира". Проблемът е в стека на ексепшъните, който е недостъпен и няма как да се изчисти. А ако не го изчистиш при първото прекъсване с по-нисък приоритет гърми. Ех има варианти да го ресетна напълно, ама тогава винаги тръгва от началото на ресет вектора и става трудно да разбера дали ресета е топъл или студен....
|
| Пет Сеп 17, 2010 12:22 pm |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
Абе не съм сигурен как беше ама на ST имаше механизъм за това. Ама не беше в ядрото, а в периферията, нещо (регистър, бит) беше с еднозначна стойност при студен ресет. Незнам дали не беше вързано с вградения RTCC....
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Пет Сеп 17, 2010 12:45 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
има един регистър ама той е достъпен само отвън през JTAG-TAP-a... за друг стандартен дето да става не знам
Иначе OCD ли беше... някъде гледах, че рестартират като разлаят кучето. Като ми остане време ще се поровя за по-малко тъпо решение (ако има)....
|
| Пет Сеп 17, 2010 1:04 pm |
|
 |
|
setoy
Ранг: Почетен член
Регистриран на: Пет Фев 17, 2006 9:17 am Мнения: 765 Местоположение: Стара Загора
|
Що беее.... нали ползваш Луминари ? Там има SysCtlReset() и SysCtlResetCauseGet() . Това в driverlib/sysctl . Не върши ли работа ?
Иначе, за изцепките (exceptions  ) и аз си мислех нещо подобно... най ми допада варианта да се прави лог, макар че какво ли ще помогне за дебъгване не е ясно, но все пак по-добре да го има май... А това SCB->CFSR къде е обявено ? Сигурно е някой от регистрите на ядрото ? Ядрото не го познавам въобще... 
|
| Пет Сеп 17, 2010 1:49 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
SysCtlReset() май ще свърши работа.... Не съм го видял щото не ползвам никакви чужди библиотечки (особено пък на Луминари заради гадния им лиценз)
Иначе от ARM.com съм взел CMSIS и съм го портнал до Ц++ класове. А SCB e System Control Block, т.е.:
идеята е, че Ц++ е по-прегледно, а и като напишеш SCB-> ти излизат всички полета и всички функции... няма нужда да помниш, та и затова не съм запомнил че има SysCtlReset 
|
| Пет Сеп 17, 2010 2:10 pm |
|
 |
|
Dimitar
Ранг: Форумен бог
Регистриран на: Пет Ное 12, 2004 3:38 pm Мнения: 9103 Местоположение: Chicago, IL
|
Аз като батето ползвам външната памет за логове, а рестартирам луминарито с SysCtlReset() - това обикновенно го правя след ъпдейт на фърмуера, за да се върне от бутлодера обратно в основната програма ресетнат. Не съм забелязъл да съм имал някакви грижи  .
|
| Пет Сеп 17, 2010 2:54 pm |
|
|