|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 11:20 pm
Защитени променливи в ембедед програмирането
| Автор |
Съобщение |
|
Dimitar
Ранг: Форумен бог
Регистриран на: Пет Ное 12, 2004 3:38 pm Мнения: 9103 Местоположение: Chicago, IL
|
Маниак, това дето го пишеш не е баш така, защото колко време може да отнеме копирането на една променлива от 4 байта - няколко такта на процесора. Така, че забраната на прекъсванията за това време едва ли ще е много фатално, защото той тоя процесор и без това няма да може да обработва прекъсвания с такава скорост, ако ще и само това да прави. Така, че това си е най-добрия вариант да пазиш променливата. Същото се прилага и за някой много чувствителни софтуерни асинхронни интерфейси - докато си предадеш/приемеш байта забраняваш прекъсванията, за да не се оплеска тайминга.
|
| Пон Яну 22, 2007 10:25 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
Мисля че той искаше да каже по скоро един и същ вход, нямаш достатъчно водове с прекъсане, и навръзваш примерно 4 бутона на едно прекъсване с диодно или , и отделно ги подаваш на портове, като получиш прекъсване проверяваш порта и знаеш от къд е прекъсването. Та в този случай ако идват достатъчно бързо, което ако е така аз не бих го решил точно с такива пркъсвания, но ако идват, може да е бил натиснат първо бутон 1, после бутон 2, обаче ти като влезеш да е бутон 3 или пък никой.
Иначе по въпроса миро е описал май всичко за което мога да се сетя и съм позлвал 
|
| Пон Яну 22, 2007 10:26 pm |
|
 |
|
Dimitar
Ранг: Форумен бог
Регистриран на: Пет Ное 12, 2004 3:38 pm Мнения: 9103 Местоположение: Chicago, IL
|
Ами то да навържеш бутони на прекъсване не е много добра идея, защото после и без това трябва да им правиш софтуерен филтър, пък и те няма да прекъсват толкова бързо. Тук говорим все пак за прекъсвания през 10-на (например) цикъла на процесора за да има някакъв проблем от забраната на прекъсванията. А той едва ли може да обработва толкова бързо такива прекъсвания.
|
| Пон Яну 22, 2007 10:30 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
Ами относно бутонит лошо няма, става так, проблема по скоро е с достатъчно бързи преъсвания, иначе поодбно свързване сум позлвал на няколко места и проблеми съм нямал, но сигналите са били дооста бавни 
|
| Пон Яну 22, 2007 11:05 pm |
|
 |
|
trm_only_for_work
Ранг: Минаващ
Регистриран на: Пон Яну 15, 2007 8:47 pm Мнения: 59
|
Значи едното беше което Тони каза, но най-вече да кажем че има MCU-то и външен някакъв Transiever , който ти дава int при получаване на байт или там при достатъчно пълен буфер, бла-бла. И имаш още един външен елемент, който те информира че нещо е станало, то си е пак външно Int.
Е връзваш ги на един или единственият ти int външен (пример 16-ките повечто).
или IC, която генерира int_out При няколко събития и ти казва 'нещо стана' ела виж ~"status"reg-а ми точно какво.
Обаче какво , ако ти вместо да го обработиш правиш нещо друго и през това време се случи друго събитие, което пак ... и т.н.
Аз обичамкато се говори за нещо да се разгледа и отвън специфичният случей, така и така темата е повдигната
може и да греша
/Никола гоня мисълта, но за да не стават пак неразбирателства гледам дапиша само най-важните неща, пък друго .... което ми идва си го оставям само за себе си , защото се оказа, че не може човек да си изразява на 100% мнениеето и това си е. как да е. 
_________________ @HCL: "Авторьт не поема отговорност в случай на некоректна или непьлна информация. "
(1)всеки има право на мнение, но това не означава че всеки е прав
(3)не сте длъжен да сте съгласен с неговото мнение.
Защо трябва да Ви се напомня ?
|
| Вто Яну 23, 2007 12:00 am |
|
 |
|
trm_only_for_work
Ранг: Минаващ
Регистриран на: Пон Яну 15, 2007 8:47 pm Мнения: 59
|
Сори, но това си зависи от MCU-то със запазването при повисокоприоритетно прекъсване и не съм ги прескочил.
Всмисъл ще се получи че ще гооврим за едно и също нещо с различни думи, затова и няма да споря с теб
Имал съм до 3 прекъсваня max на 16-ка, така че няма приоритети.
На 18 не съм имал нужда от приоритети , защото и не съм ползвал много, но нали знаеш ползваш това което върши работа + да имаш възможности за надграждане. Е отскоро почнах да си прехвърлям нещата на 18-ки , за да имам възм. в аванс (тъй като 16-ките вече не стигат  )  Въпреки че откога гледам ARM,но като няма за какво да се ползва, освен "Хоби"
Та не е да не съм чел 
_________________ @HCL: "Авторьт не поема отговорност в случай на некоректна или непьлна информация. "
(1)всеки има право на мнение, но това не означава че всеки е прав
(3)не сте длъжен да сте съгласен с неговото мнение.
Защо трябва да Ви се напомня ?
|
| Вто Яну 23, 2007 12:05 am |
|
 |
|
Dimitar
Ранг: Форумен бог
Регистриран на: Пет Ное 12, 2004 3:38 pm Мнения: 9103 Местоположение: Chicago, IL
|
Ами Маниак пак немога да разбера какъв ти е проблема - просто винаги четеш и двата статус регистъра. Пак ти повтарям - и без това неможеш да обработваш толкова бързи прекъсвания, които могат да се объркат заради забраната на прекъсванията за няколко цикъла. По принцип може и да си прав, ама ако ставаше въпрос за голям период от време, а тук става въпрос за милимунди  .
|
| Вто Яну 23, 2007 12:10 am |
|
 |
|
evc
Ранг: Напреднал
Регистриран на: Пет Окт 21, 2005 8:45 am Мнения: 499
|
//Offtopic, ама не мога да се сдържа:
Big wheel keep on turning,
Proud Merry keep on running.
Rolling! Rolling!
Rolling on the river!
като се затъркаля, та цяла неделя!
_________________ Простотията е Божи дар, но човек не бива да парадира с подаръците си!
|
| Вто Яну 23, 2007 9:43 am |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
Маниак. Да връзваш няколко външни източника на прекъсване на едно IRQ не е добра идея като цяло. Възможно е при някой специфични случаи само.
Може би правиш аналогия с това че има прекъсвания от вътрешната периферия които са свързани на един вектор. Но отчети факта че там имаш статус регистър или регистри от които може да прочетеш кой сигнал е задействал и и след обработката на съответното събитие да изчистиш флага. Ако за тия външни прекъсвания можеш да реализираш екивалентен механизъм то може да правиш такава реализация. Но в общия случай не можеш. Така че на външното си прекъсване си оставяш един източник а за останалите мислиш други методи за работа.
|
| Вто Яну 23, 2007 12:00 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
Е то ако ще се забраняват прекъсвания защо трябва да е глобално. Така ще се направи програмата, че да не е фатално забавянето на обработката на прекъсването което пипа променливата и се забранява само то, после като го разрешиш си го обработваш, ако евентуално е възникнало. Никола е много прав, че е много неправилно да пускаш няколко няколко източника на един вектор - никога няма да имаш гаранция че ще обработиш това което трябва.
едит : тоест не на един вектор а на един флаг.
|
| Вто Яну 23, 2007 5:33 pm |
|
 |
|
Ки4о
Ранг: Форумен бог
Регистриран на: Съб Юли 22, 2006 9:50 pm Мнения: 1638
|
@Cekins,възможно е да се направи-примерно на ПИК искаш да обслужваш првкъсване на няколко външни източника - конфигурираш пракъсване по RB0,а останалите ти пинова RB1-RB7 са входове,всеки източник е свъразн едновременно към вход и към РB0,като стане прекъсване отиваш и проверяваш на кой вход има промяна на състоянието и си О.К. Лошото е че няма в тази ситуация арбитраж на прекъсването,те при малко времево разстояние м/у източниците а прекъсване е неприложимо,но има и места дет може да се ползва 
|
| Сря Яну 24, 2007 10:20 am |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
Е да де, но повечето пикове имат 4 входа за прекъсване при промяна на състоянието, т.е. имаш общо 5 външни входа за прекъсване. Освне това с малко хитрост може да си докараш още един вход, този на таймера, ако толкоа си на зор си пускаш таймера по външен такт, зреждаш го и чакаш, първия импул който дойде там го препълва и имаш прексване, просто трябва д зареждаш таймера ..... та ето ги 6 външни прекъсвания на една 16-ка, ако много са загрубели нещата и други могат да с измислят, примерно АДЦ входа .... ммм аз отдавна не съм ползвал 16-ки, но мисля че като вържеш АДЦ с CCP може с подходящо зададени стойности да получиш прекъсване при определено ниво на сигала .... това ... не съм сигуре, и е малко бавно разбира се ........
Та определено подобно навръзване на прекъсвания рядко е оправдано, правил съм го когато имам входни сигнали които са достатъчно дълги и освен това не е възможно да се препокриват.
|
| Пет Яну 26, 2007 10:08 am |
|
 |
|
Vilo
Ранг: Минаващ
Регистриран на: Пон Апр 03, 2006 9:00 am Мнения: 39
|
 ili prosto..
Obiaviavash vaprosnata promenliva "volatile". togava vsichki operacii shte sa s kopie na promenlivata a ne samata promenliva. Proveri si vse pak compilatora kak interpretira "volatile"
|
| Съб Яну 27, 2007 1:58 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: ili prosto..
Всички компилатори трябва да третират volatile по един и същ начин и той е точно обратното на това което казваш, а именно да не се работи с копие/кеширане, а винаги да се изчита стойността на променливата преди ползване.
В случая тая опция е задължителна, но не решава проблема с атомичните операции...
|
| Съб Яну 27, 2007 2:09 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Добре, малък въпрос за хардуера - ако дойдат повече от 1 заявки за прекъсвания, докато са забранени, след като се разрешат, процесора какво прави:
1. Има си някаква опашка и ги изпълнява в реда в който са дошли
2. Кара по приоритет
3. Нещо друго 
|
| Съб Яну 27, 2007 11:26 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 2 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|