Автор |
Съобщение |
stoyanoff
Ранг: Форумен бог
Регистриран на: Чет Юни 25, 2009 12:01 pm Мнения: 2202
|
Re: Ядове с MPLAB X
Това, което виждам с дебъгера, е че фалговете не се чистят. Аз имах проверка при влизане в дадено прекъсване дали въпросния флаг е сетнат, но въпреки че дебъгера ми дава флаг 1, тази провека не минава. Предполагам пак не ми изобразява правилно регистрите! Има ли значение кога изчисвам флага на дадено прекъсване? До сега го правех накрая - примерно чета UART буфера и чак тогава изчиствам флага. Предполагам, че понеже имам няколко приоритета, когато влезе в едно прекъсване и друго го override-не (по-висок приоритет), се изпълнява второто без да се върне в първото за изчистване на флага(което не е логично, но аз така си го обяснявам!). Реално само 2та UART-a са по-дълги за изпълнение, защото чета няколко пъти буфера. Гледам, че единия UART е с най-нисък приоритет 3(понеже е на 9600), а таймерите са с 5, но другият UART е с приоритет 6 и прави същото парче! Него няма какво да го override-не. В момента разкарах проверката за флаг и първо чистя въпросния флаг. Ще тествам днес да видим дали ще направи същия проблем. Ако се сещаш нещо за ситуацията, която описвам, моля да споделиш! Благодаря!
_________________www.elkran.com
|
Съб Юни 17, 2017 12:04 pm |
|
|
stoyanoff
Ранг: Форумен бог
Регистриран на: Чет Юни 25, 2009 12:01 pm Мнения: 2202
|
Re: Ядове с MPLAB X
Нещо не съм написал правилно прекъсванията! До колкото разбирам, флагът трябва да се чисти след като се елиминира причината за прекъсването! Т. е. трябва да го правя след като прочета буферите. Само за таймерите не съм съгурен защо става, но може би ако изчиствам прекъсването след като сетна PR регистъра ще стане работа... Оставам отворен за идеи!
_________________www.elkran.com
|
Съб Юни 17, 2017 1:03 pm |
|
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4722
|
Re: Ядове с MPLAB X
основен принцип за приоритети в общия случай: късо време за обработка - висок приоритет... (и все пак зависи от логиката)
не знам какво става в системата ти - пасни код
_________________ main[-1u]={1};
|
Съб Юни 17, 2017 4:51 pm |
|
|
stoyanoff
Ранг: Форумен бог
Регистриран на: Чет Юни 25, 2009 12:01 pm Мнения: 2202
|
Re: Ядове с MPLAB X
Времето е късо, но примерът, който си дал по-горе не е ОК. При всички прекъсвания първо трябва да се обработи причината причиняваща прекъсването, а после да се забърше флага. Прекъсването за грешка при UART е на обратно и аз го взех на готово. Промених го и за сега нямам проблеми. Предполагам, че е ставала някаква врътка с приоритетите и понеже не е се чете буфера, процесора постоянно влиза в това прекъсване. И обяснява защо ставаше произволно - като стане фал по UART. Благодаря!
_________________www.elkran.com
|
Нед Юни 18, 2017 8:00 pm |
|
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4722
|
Re: Ядове с MPLAB X
нямам си на идея какво си писал... имай на в предвид че никога не ми се е случвало да чукне оверфлоу грешка по уарта все пак 24-ките имат 4 байта, а 32-ките 8 байта фифо буфери, което ти дава повече време за обработка на прекъсването
_________________ main[-1u]={1};
|
Нед Юни 18, 2017 9:06 pm |
|
|
stoyanoff
Ранг: Форумен бог
Регистриран на: Чет Юни 25, 2009 12:01 pm Мнения: 2202
|
Re: Ядове с MPLAB X
Не мога да обясня! Имам абсолютно същия код за PIC18 и там даже не правя проверка за грешки и работи чудесно. Тук, освен да променя мястото на изчистването на флага, друго не съм пипал и проблемът го няма...
_________________www.elkran.com
|
Пон Юни 19, 2017 5:32 am |
|
|
stoyanoff
Ранг: Форумен бог
Регистриран на: Чет Юни 25, 2009 12:01 pm Мнения: 2202
|
Re: Ядове с MPLAB X
Ъпдейт по темата! Горепосоченият проблем явно се дължи на някакво буфериране на данни. Почти сигурен съм, че е в MPlab. Става следното - програмата си работи и достига някакъв брейк поинт! Но понеже контролерът е закачен към други у-ва(през двата UART-a), те продължават да си пращат данни. Съответно тези нови данни се буферират някъде и след като продължи програмата трябва да се изчетат, което обаче отнема време. Доста! Тук предполагам Wizard има повече инфо! Може би ако ги нямаше външните източници, голяма част от бъговете и крашовете нямаше да ги има...
_________________www.elkran.com
|
Нед Юни 25, 2017 8:19 pm |
|
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4722
|
Re: Ядове с MPLAB X
няма буфери за брек-поинт
бъговете и крашовете са от JAVA, лапа много памет и върви БААВНО
_________________ main[-1u]={1};
|
Пон Юни 26, 2017 6:02 am |
|
|
gicho
Ранг: Форумен бог
Регистриран на: Пон Мар 13, 2006 12:59 pm Мнения: 3855 Местоположение: Габрово
|
Re: Ядове с MPLAB X
Това е класически проблем - периферията тича а дебъга спира ядрото и то не може да обслужва. Смислените процесори имат някой екстри - например да спират таймерите и други периферии при спиране на ядрото (на брейкпоинт). С уарта няма да помогне (освен ако има flow control ? ) Но истината е че спреш ли на брейкпоинт не можеш да си сигурен че след това като пуснеш няма да е омазано нещо. Затова спираш, анализираш каквото си видял, ресетваш/спираш, слагаш нови брейкпоинти (и променяш/билдваш ако искаш) и пуснак отначало. В твоя случай това значи да рестартираш и насрещния контролер който ти праща по уарта - което е лесно ако са закачени на jtag chain и ги контролираш от един дебъгер. Ама това дали мплаба го може е много съмнително? А джавата може да е проблемна само ако са ровили майсторите от майкрочип... Същата жава клати хиляди други приложния (примерно - еклипс) и няма кахъри. Същите простотии ги имаше и преди джавата да им стане проблем - още в 8-цата и по-ранните на мплаб-а. И макар опита ми с нетбиймс да не е голям извън мплабх, не съм видял проблеми в чистия му вид (java развой и RCP приложения на базата му). Затуй си мисля че "подобренията" с произход Финикс ще да са тегавото.
|
Пон Юни 26, 2017 8:26 am |
|
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4722
|
Re: Ядове с MPLAB X
като пуснеш Еклипса - виж си в таск меринджея дали имаш Java(TM) Platform....
_________________ main[-1u]={1};
|
Пон Юни 26, 2017 12:47 pm |
|
|
gicho
Ранг: Форумен бог
Регистриран на: Пон Мар 13, 2006 12:59 pm Мнения: 3855 Местоположение: Габрово
|
Re: Ядове с MPLAB X
В смисъл? Ако твърдиш че не е джава приложение ще е голям смях. Еклипсът ми ползва локален JRE в неговата папка. Редът на търсене на JRE (java runtime env) е първо в локална папка където е еклипса с име "jre", после на път сочен от JAVA_PATH променлива на обкръжението. Пускането става от платформено специфичен Launcher което под виндоус е exe - то наглася обкръжението и пуска джава класа който е указан в ini-то.
|
Пон Юни 26, 2017 8:09 pm |
|
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4722
|
Re: Ядове с MPLAB X
не съм казал че не е писан на Java... еклипса ми лапа 200 меги, а хикса 2 ГИГИ, чак се чудя кво намушиха в тея гиги за под 1к сорс на XC8
_________________ main[-1u]={1};
|
Пон Юни 26, 2017 10:21 pm |
|
|
ig_ivanov
Ранг: Напреднал
Регистриран на: Съб Май 21, 2016 8:47 pm Мнения: 476 Местоположение: Бургас
|
Re: Ядове с MPLAB X
Да питам- в моя телевизор ли е грешката или в MPLAB? Ситуацията е горе-долу следната: Това горното работи докато N1 е по-малко от 4096, ако е по-голямо най-старшия байт го прави на 0xFF ?!? В опциите на MPLAB XC8 е зададено long = 32bit (по подразбиране е 24), така го и компилира. Чипа е PIC16F1938. Изместването надясно си работи коректно.
Последна промяна ig_ivanov на Чет Ное 23, 2017 10:23 am, променена общо 1 път
|
Чет Ное 23, 2017 10:02 am |
|
|
Cino
Ранг: Новодошъл
Регистриран на: Чет Окт 02, 2008 9:24 pm Мнения: 104
|
Re: Ядове с MPLAB X
то не е много ясно какво точно искаш да направиш с този код, със същия успех можеш да напишеш само: Number = N1 | N2;
може би искаш да кажеш: Number = N1; Number = Number << 16; Number = Number | N2;
|
Чет Ное 23, 2017 10:22 am |
|
|
ig_ivanov
Ранг: Напреднал
Регистриран на: Съб Май 21, 2016 8:47 pm Мнения: 476 Местоположение: Бургас
|
Re: Ядове с MPLAB X
Да, извинявам се, поправих го. То и с един ред се прави, ама съм направил грешка като съм го писал по-бавно: Number = (N1<<16)|N2;
|
Чет Ное 23, 2017 10:24 am |
|
|