| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| UART прекъсване. http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=13935 |
Страница 1 от 1 |
| Автор: | kalata23 [ Сря Юли 22, 2015 1:59 pm ] | |||||||||
| Заглавие: | UART прекъсване. | |||||||||
Здравейте, трябва ми малко помощ за една програма. Идеята е да се обработи прекъсване, при наличие на UART данни за четене. Използвам PIC16F887. В дейташийта видях, че има такова прекъсване, като сорсът, който съм написал до сега (на MikroC) е : По UART се подава номера на RFID ключ, като проблемът е, че в началото съхранява UID-то на първия ключ, който подам на RFID четеца, но ако след това сложа друг ключ, в масива не се съхранява UID-то на втория ключ (т.е очаквам да се презапише масива).
|
||||||||||
| Автор: | ike [ Сря Юли 22, 2015 2:12 pm ] |
| Заглавие: | Re: UART прекъсване. |
Така и така ползваш библиотеки да ти вършат работата вместо теб, за какво по дяволите са ти прекъсвания? |
|
| Автор: | ToHu [ Сря Юли 22, 2015 3:07 pm ] |
| Заглавие: | Re: UART прекъсване. |
Еее не така, двете нямат общо. Но идеята да имаш while в прекъсване е безумна, това не се прави никога. |
|
| Автор: | ps66 [ Сря Юли 22, 2015 3:27 pm ] | |||||||||
| Заглавие: | Re: UART прекъсване. | |||||||||
Без майтап !? А ... как се чете ако има FIFO !? |
||||||||||
| Автор: | tolstolob [ Сря Юли 22, 2015 3:32 pm ] | |||||||||
| Заглавие: | Re: UART прекъсване. | |||||||||
И RCIE флага да се сетва някъде отвън. |
||||||||||
| Автор: | Cekins [ Сря Юли 22, 2015 3:35 pm ] |
| Заглавие: | Re: UART прекъсване. |
Специално за пиковете няма нужда от while - напрактика идеята е безумна |
|
| Автор: | kalata23 [ Сря Юли 22, 2015 3:49 pm ] |
| Заглавие: | Re: UART прекъсване. |
Защото, това е само част от проекта, не мога да си позволя да проверявам непрекъснато дали имам заредени данни в буера. Както и да е, намерих решение на проблема с прекъсването и сте прави, че няма нужда от while(). Благодаря за отзоваването ПП: Като цяло грешката ми беше в регистрите и битовете. |
|
| Автор: | Cekins [ Сря Юли 22, 2015 4:40 pm ] |
| Заглавие: | Re: UART прекъсване. |
И аз ти видях грешката - обикновенно не вниквам много в кода на първо четене и не обърнах внимание отначало. В твоя код проверяваш RCIE а не RCIF. Макар, че в някой халф дуплекс конфигурации е хубаво и той да се проверява, за да не приемаш ехото ако го има и приемането е забранено. А нулирането на флага за прекъсване е безмислено начинание, както казах вече - той е readonly и се изчиства сам когато буфера се изпразни. Има и няколко флага в уарта, които не е зле да се проверяват от време на време - за препълване на буфера и фрейминг. Ако някой от тях по някаква причина се вдигне, ще приемаш ама някой друг път. Не е като да не се случва. |
|
| Автор: | ToHu [ Сря Юли 22, 2015 10:22 pm ] |
| Заглавие: | Re: UART прекъсване. |
Остави грешката, идеята за while е мнго погрешна, като цяло while ако мо да се избягва е най-добре, винаги е свързан с възможна неопределеност, за да си сигурен трябва да си гарантираш изход извън условието което чакаш. А за колегата ps66, какво общо има FIFO с while ? Като цяло в прекъсване се правят минимално необходимите неща и веднага излизаш, да имаш while е меко казано безумие. Имам купища код изписан специално за микриконтролери където единственият ми while е в този който върти мейна. While може да си позволиш тогава, когато имаш процеси и диспечър на процесите и е сигурно че и с whileи без while няма да стоиш в този процес повече от допустимото, не че и това е много готино, но все пак е по-добре. Изобщо лично според мен PC метода на писане е силно неоптимален за микроконтролери особенно от типа на PIC. |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|