| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| пак IAR и AVR http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=722 |
Страница 1 от 1 |
| Автор: | Nikola Kirov [ Съб Юни 04, 2005 1:32 pm ] |
| Заглавие: | пак IAR и AVR |
Искам да оформя една функция на прекъсване като отделен модул но така и не намерих пример за такова изпълнение. Тази функция като резултат променя стоиноста на една променлива. Проблема ми идва като трябва тази променлива да е видима в main. Пробвах всякакви варианти за инклудване на фаиллове с h и c фаилове но все някакъв проблем има. Най накрая стигнах до решение което си работи,но ми се вижда много странно така да се решава по принцип такъв проблем. значи декларирам си в c фаила където е въпросната функция volatile __no_init char BUTTONVALUE @0xFF; като слагам същата декларация и в main.c където се ползва и там и си я инициализирам в началото на main. Абе и така си работи но ми е интересно как се прави по принцип. Друг вариант е да си оформя функцията като обикновенна функция и да я добавя в някой модул а функцията на прекъсването да си е в основния файл и да я извиква. Но така пък се получава много голям и бавен код / скоро постнах asm листинг за функция от прекъсване която вика друга функция и там съхраняването и възтановяването на контекста е 64баита/ |
|
| Автор: | bateAz [ Съб Юни 04, 2005 1:49 pm ] |
| Заглавие: | |
Не става ли така: в модула със ISR си дефинираш променливата, включваш файла в проекта, а във main я декларираш като extern. При мен си го правя така и почти нямам проблеми. |
|
| Автор: | danov [ Съб Юни 04, 2005 2:25 pm ] | |||||||||||||||||||||||||||
| Заглавие: | ||||||||||||||||||||||||||||
Не съм ползвал IAR, но все пак си е C. По принцип става така: file.c:
file.h:
main.c:
|
||||||||||||||||||||||||||||
| Автор: | Nikola Kirov [ Съб Юни 04, 2005 2:32 pm ] |
| Заглавие: | |
Да така става,достатъчно е както казва батето ама кой да мисли. А нещо друго се получава. Тази функция имам декларирани 3 променливи. #pragma vector=TIMER0_OVF_vect __interrupt void Timer0_Overflow(void) { static char OLDBUTTON; char BUTTON = 1; char mask = 1; --------------------------------- --------------------------------- Live Whatch при дебъгване не ми дава стоиностите им. дава Unknown or Ambigous Symbol за първата Cant Take address за другите. Което води до неудобство при дебъгването. Това е с JTAG-а като дебъгвам. Не съм пробвал в симулатора. Какъв му е проблема на IAR-a да има идея някой? |
|
| Автор: | Цецо [ Съб Юни 04, 2005 2:49 pm ] |
| Заглавие: | |
Ами аз понеже непрекъснато имам променливи които са ми глобални за всички функции (вкл. прекъсванията) - правя така: 1. Правя си един фаил global.c дето си декларирам глобалните данни. 2. Един файл globals.h дето всичките глобални ги дефинирам пак ама като EXTERN. 3. После навсякъде (във всеки файл) дето трябва да имам достъп до глобалните променливи си включвам #include"globals.h" И готово. Противно е на всякакви правила за обектно ориентирано програмиране, ама аз си падам по глобалните променливи. Пести памет, по бързо е, абе за контролер нямат алтернатива. Да не говорим че за пик например си маам с влючен static по default. Само ако някъде хич не ми пука за скорост ползвам стекови променливи. |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|