Отговори на тема  [ 20 мнения ]  Отиди на страница Предишна  1, 2
uCOS-II въпросче 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 31, 2004 9:19 pm
Мнения: 4464
Местоположение: Stara Zagora
Мнение 
Мега 128,IAR.
Стана перфектно. Заделих си отделен стек за прекъсванията

Код:
#ifdef INTERRUPT_STACK_ENABLE
#ifdef  INTERRUPT_STACK_SWITCH_USE_R10_R11
                MOVW    R10,R28
                LDI     R28,LOW(InterruptStack+INTERRUPT_STACK_SYZE_BYTES-1)
                LDI     R29,HIGH(InterruptStack+INTERRUPT_STACK_SYZE_BYTES-1)
#else
                STS     (InterruptStack+INTERRUPT_STACK_SYZE_BYTES-1),R28
                STS     (InterruptStack+INTERRUPT_STACK_SYZE_BYTES-2),R29
                LDI     R28,LOW(InterruptStack+INTERRUPT_STACK_SYZE_BYTES-3)
                LDI     R29,HIGH(InterruptStack+INTERRUPT_STACK_SYZE_BYTES-3)
#endif
#endif
----------------------------------
----------------------------------
----------------------------------
кода на функцията на прекъсването
----------------------------------
----------------------------------
----------------------------------
#ifdef  INTERRUPT_STACK_ENABLE
#ifdef  INTERRUPT_STACK_SWITCH_USE_R10_R11
                MOVW    R28,R10
#else
                LDS     R28,(InterruptStack+INTERRUPT_STACK_SYZE_BYTES-1)
                LDS     R29,(InterruptStack+INTERRUPT_STACK_SYZE_BYTES-2)
#endif
#endif


InterruptStack е масив от unsigned char с размерност INTERRUPT_STACK_SYZE_BYTES
И системния таимер го направих по този начин да ползва тоя стек. Освободи ми се достатъчно RAM.
При AVR e добре да се резервират R10-R15 също че да не отнема толкова време съхраняването на контекста.
В единия вариант тук си ползвам R10-R11 за съхраняване на стековия укзател. А в другия си го съхранявам дирекно в началото на стека.
Това решение не става за nested interrupts но на мен и не ми трябват такива.
Така операционната система изобщо не разбира че е имало прекъсване и собствените ти функции на прекъсванията могат да си са съвсем независими от операционната система


Чет Май 11, 2006 12:24 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 31, 2004 9:19 pm
Мнения: 4464
Местоположение: Stara Zagora
Мнение 
Всъщност и за nested interrupts стана. Просто всяко прекъсване му се заделя собствен стек и става.


Чет Май 11, 2006 4:03 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Ное 21, 2004 11:31 pm
Мнения: 10088
Мнение 
ами браво тогава =D>


Чет Май 11, 2006 9:21 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение 
Абе въобще RTOS е много удобна ако трябва да мигаш ледчета.

Ама ако се появят няколко бързи, нетърпящи господство процеса и кашата започва да става сериозна.

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Чет Май 11, 2006 9:38 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 31, 2004 9:19 pm
Мнения: 4464
Местоположение: Stara Zagora
Мнение 
Ами става и за по бързи процеси ако работата с тях се изнесе в прекъсвания. Но има забавяне от варианта без операционна система. За конкретния случаи мога да кажа че кода които се изпълнява на прекъсване става с около 20-30 баита по дълъг отколкото ако бях направил всичко без операционна система. Разбира се и памет глътна 3-4 пъти повече отколкото без OS.
Ако това е допустимо няма други негативни последствия освен сериозното усложняване на дебъгването и самата разработка. Но като сложим отдругата страна на кантара екстрите които получаваш се оказва че е доста добър вариант да се ползва OS.
Разбира се не става на някой дребен процесор,няма ресурси просто. Но всеки ARM с 32 и нагоре флаш и с почвече от 4 RAM може доста добре да си работи с OS.
Дори Мега128 се справя отлично.


Чет Май 11, 2006 10:42 am
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 20 мнения ]  Отиди на страница Предишна  1, 2

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 11 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни