| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| AVR GCC прекъсване http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=11367 |
Страница 1 от 1 |
| Автор: | vgeorgiev [ Вто Май 07, 2013 12:23 pm ] | ||||||||||||||||||
| Заглавие: | AVR GCC прекъсване | ||||||||||||||||||
Здравейте, Имам следния код. Проблема е, че не се връщам в main loop-a след прекъсване.
Прочетох малко документация и разбрах, че имам няколко проблема: 1) При изпълнение на ISR всички други прекъсвания са забранени. => за това викам sei(), защото iso_send_msg и iso_recv_msg използват други прекъсвания. Без sei() не работи. 2) ISR трябва да е максимално кратък като код и време за изпълнение. Въпросът ми е защо не се връщам от прекъсването. Следващия въпрос е как да направя ISR, който да може да бъде прекъсван от други прекъсвания. Тук намерих следното:
|
|||||||||||||||||||
| Автор: | ike [ Вто Май 07, 2013 12:58 pm ] |
| Заглавие: | Re: AVR GCC прекъсване |
Това не ти е джава. В прекъсването сетваш флаг и веднага излизаш. А в главната програма вече си вършиш глупостите и "викаш" другите прекъсвания. |
|
| Автор: | vgeorgiev [ Вто Май 07, 2013 1:41 pm ] | |||||||||
| Заглавие: | Re: AVR GCC прекъсване | |||||||||
Няма значение какъв е езика... Всичко се компилира до асемблер. Много е грозно да говориш за кода, както за "глупусти". Това са българските форуми -> Задаваш въпрос и следват постове, обясняващи ти колко си прост, зле и т.н. Благодаря все пак за отговора. В ISR-а, ще сетна един влаг и само ще пъляня един буфер. |
||||||||||
| Автор: | head_up [ Вто Май 07, 2013 2:31 pm ] | ||||||||||||||||||
| Заглавие: | Re: AVR GCC прекъсване | ||||||||||||||||||
Мислех да ти кажа и аз как се прави, за да не останеш с пръст някъде като ще разрешаваш прекъсване в прекъсването, но щом си толкова устат - пиши код и мълчи. Да не ти казват колко си ... какъвто и да е. |
|||||||||||||||||||
| Автор: | Ники [ Сря Май 08, 2013 1:28 am ] |
| Заглавие: | Re: AVR GCC прекъсване |
в WinAVR документацията има нужнит описания. Като атрибут за прекъсването се слага NOBLOCK, така се разрешават вложените прекъсвания. Защо не се връщаш от прекъсване, мога само да гадя, или не сетваш правилния вектор, или си разрешил друго прекъсване, за което нямаш обработка. |
|
| Автор: | tgi [ Сря Май 08, 2013 2:29 pm ] | |||||||||
| Заглавие: | Re: AVR GCC прекъсване | |||||||||
Всъщност всичко се компилира до машинен код, асемблерът в само вид компилатор правещ това от вид сорс с определен - обикновено платформено-специфичен- синтаксис Не мога да ти помогна за това кой компилатор какво прави. Това, което знам обаче е, че за да почнеш да можеш да пишеш реално работещ код в който има обработки на прекъсвания, поне последните трябва да можеш да ги направиш на асемблер, чак след това да оставяш компилатора да се мисли за по-умен от тебе и да прави каквото иска да прави. Не ти ли е ясно кога кои регистри се стекват, *къде* се стекват и откъде се възстановяват работата е безнадеждна. |
||||||||||
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|