|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 11:43 am
|
Страница 1 от 1
|
[ 13 мнения ] |
|
| Автор |
Съобщение |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
 IAR
Нещо не ми е ясно в асемблер листинга които ми дава за функциите от прекъсванията.
това е за АТмега
 |  |  |  | Код: Timer0_Overflow: 0000DC 938A ST -Y,R24 0000DE 93FA ST -Y,R31 0000E0 93EA ST -Y,R30 0000E2 923A ST -Y,R3 0000E4 922A ST -Y,R2 0000E6 921A ST -Y,R1 0000E8 920A ST -Y,R0 0000EA 937A ST -Y,R23 0000EC 936A ST -Y,R22 0000EE 935A ST -Y,R21 0000F0 934A ST -Y,R20 0000F2 933A ST -Y,R19 0000F4 932A ST -Y,R18 0000F6 931A ST -Y,R17 0000F8 930A ST -Y,R16 0000FA B78F IN R24,SREG
char PORT = ~PIND & 0xF0; 0000FC B310 IN R17,PIND 0000FE 9510 COM R17 --------------------------------------------------- --------------------------------------------------- --------------------------------------------------- --------------------------------------------------- 000160 FB17 BST R17,7 000162 F41E BRTC 0x16A else if (PORT & 0x80) CorrectValue(-10); 000164 EF06 LDI R16,0xF6 000166 940E 01AF CALL CorrectValue 00016A BF8F OUT SREG,R24 00016C 9109 LD R16,Y+ 00016E 9119 LD R17,Y+ 000170 9129 LD R18,Y+ 000172 9139 LD R19,Y+ 000174 9149 LD R20,Y+ 000176 9159 LD R21,Y+ 000178 9169 LD R22,Y+ 00017A 9179 LD R23,Y+ 00017C 9009 LD R0,Y+ 00017E 9019 LD R1,Y+ 000180 9029 LD R2,Y+ 000182 9039 LD R3,Y+ 000184 91E9 LD R30,Y+ 000186 91F9 LD R31,Y+ 000188 9189 LD R24,Y+ 00018A 9518 RETI
|  |  |  |  |
Нещо не схващам какво точно прави с тези операции с регистрите в началото и края. Това са 32 цикъла на всяко прекъсване и цели 64баита в всяка функция за прекъсване 
|
| Чет Юни 02, 2005 6:54 pm |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
С риск да се покажа много тъп, неразбирайки Атмелите, това не е ли запис на контекста (разните му там регистри/променливи) в стека? Щото нали прекъсване, стек абе на всички контролери и на всеки компилатор тва го има.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Чет Юни 02, 2005 8:28 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
Пак IAR и MSP430 това го няма.
|
| Чет Юни 02, 2005 8:34 pm |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
Е как записва контекста. Нали тоя компилатор върти някви променливи за вътрешна употреба. Трябва да се съхранят някакси. Са ако MSP има неква хардуерна хитрана да го прави на бързо е друг въпрос, ама иначе. Друг е въпроса че на всеки компилатор по един или друг начин можеш да задаваш какво точно да се крие е стека.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Чет Юни 02, 2005 8:56 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
Надявах се някой вече да се е сблъсквал с това. Явно е някаква особенност при работата с АТмегата. Явно съм пропуснал нещо съществено като съм чел документацията на Мегата. 
|
| Чет Юни 02, 2005 9:04 pm |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
Е що бе човек? Без да разбирам от меги, това си е най-нормално съхраняване на работни регистри в стека. Какво те притеснява - размера или бързодействието. По принцип компилатора си има вътрешни променливи (за математика, индекс за стека, по малки параметри към функции), които трябва да се съхранят при прекъсване. Това е един от недостатъците на С. Сега дали е точно такъв случая - виж в документацията - interrupt, context saving или нещо от сорта.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Пет Юни 03, 2005 9:09 am |
|
 |
|
Predator_MF
Ранг: Форумен бог
Регистриран на: Чет Окт 07, 2004 1:22 pm Мнения: 1949 Местоположение: София
|
Ами точно запис на контекста е  А как така MSP нема такъв запис 
|
| Пет Юни 03, 2005 10:34 am |
|
 |
|
breeze
Ранг: Минаващ
Регистриран на: Пет Май 27, 2005 1:32 pm Мнения: 40 Местоположение: Sofia
|
Ето един от документите, в които добре е описано всичко това: http://www.atmel.com/dyn/resources/prod ... oc1234.pdfВ случая се вижда, че се записват всички scratch registers, както и един local register (R24) който явно е използван за съхраняване на статуса ти SREG. Към IAR си има документация която освен този PDF включва и друг касаещ пълната "анатомия" на модела използван от самия компилатор. До най-големи тънкости.
|
| Пет Юни 03, 2005 11:10 am |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
Не е добре човек да прекалява с бачкането щото изпростява и става неефективен. Ето днес като се наспах до късен следобяд за 5 минути видях защо е IAR-a ми дава този код .
Ами така става като от функцията на прекъсването извикаш друга функция и така стават доста неща за съхраняване.
|
| Пет Юни 03, 2005 1:20 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
IAR-а е тъп.  Съхранява наред, без оглед дали е нужно или не.
|
| Пет Юни 03, 2005 1:23 pm |
|
 |
|
Гост
|
Ìîãà ëè äà íå ñå ñúãëàñÿ ÷å IAR å òúï  Âñè÷êè scratch ðåãèñòðè å íåîáõîäèìî äà áúäàò ñúõðàíåíè ïðè ïðåêúñâàíå ïîíåæå íå ñå çíàå â êîé ìîìåíò ùå íàñòúïè òî. Ñúùîòî âàæè è çà ñòàòóñ ðåãèñòúðà. Çà ðàçëèêà îò ïðåêúñâàíèÿòà, ïðè èçâèêâàíå íà ôóíêöèÿ âå÷å ìîæå äà áúäàò ñúõðàíåíè íàèñòèíà ñàìî èçïîëçâàíèòå ðåãèñòðè... Ñ ïî-ìàëêî ñúõðàíè ðåãèñòðè ïðîñòî íå âèæäàì êàê ìîæå äà ñå ìèíå îñâåí àêî 1) èçðè÷íî íå óêàæåòå ðåãèñòðèòå R20-R24 äà íå ñå ïîëçâàò çà scratch (òîâà ñòàâà ñ îïöèÿ â êîìïèëàòîðà) è òå íå ñå ïîëçâàò â ISR-òî; 2) àêî ñå îêàæå, ÷å àáñîëþòíî íèêúäå â ïðîãðàìàòà íå ñå èçïîëçâàò íÿêîè scratch ðåãèñòðè, òîãàâà (ïðåäïîëàãàì ïðè âêëþ÷åíè îïòèìèçàöèè) IAR ùå ãè "îòñòðàíè" îò ñïèñúêà çà ñúõðàíÿâàíè ðåãèñòðè.
|
| Пет Юни 03, 2005 1:36 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
Сега го тествах с няколко различни функции съхранява само това дето пипа в функцията и Статуса. Ако имаш обръшение към друга функция от функцията на пекъсването съхранява всички Scratch регистри.
Явно по идея ако ти трябва бързодеиствие трябва да избягваш подобни конструкции.
Може и да има и някаква оптимизация за това но поне аз не намирам как. Но това не означава че няма.
|
| Пет Юни 03, 2005 1:38 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
Този последния пост излязъл докато писах моя.
А къде е тази опция за R20-R24,че не я виждам?
|
| Пет Юни 03, 2005 1:41 pm |
|
|
|
Страница 1 от 1
|
[ 13 мнения ] |
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 3 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|