Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

IAR
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=712
Страница 1 от 1

Автор:  Nikola Kirov [ Чет Юни 02, 2005 6:54 pm ]
Заглавие:  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баита в всяка функция за прекъсване 8O

Автор:  Цецо [ Чет Юни 02, 2005 8:28 pm ]
Заглавие: 

С риск да се покажа много тъп, неразбирайки Атмелите, това не е ли запис на контекста (разните му там регистри/променливи) в стека? Щото нали прекъсване, стек абе на всички контролери и на всеки компилатор тва го има.

Автор:  bateAz [ Чет Юни 02, 2005 8:34 pm ]
Заглавие: 

Пак IAR и MSP430 това го няма.

Автор:  Цецо [ Чет Юни 02, 2005 8:56 pm ]
Заглавие: 

Е как записва контекста. Нали тоя компилатор върти някви променливи за вътрешна употреба. Трябва да се съхранят някакси. Са ако MSP има неква хардуерна хитрана да го прави на бързо е друг въпрос, ама иначе. Друг е въпроса че на всеки компилатор по един или друг начин можеш да задаваш какво точно да се крие е стека.

Автор:  Nikola Kirov [ Чет Юни 02, 2005 9:04 pm ]
Заглавие: 

Надявах се някой вече да се е сблъсквал с това. Явно е някаква особенност при работата с АТмегата. Явно съм пропуснал нещо съществено като съм чел документацията на Мегата. :?

Автор:  Цецо [ Пет Юни 03, 2005 9:09 am ]
Заглавие: 

Е що бе човек? Без да разбирам от меги, това си е най-нормално съхраняване на работни регистри в стека. Какво те притеснява - размера или бързодействието. По принцип компилатора си има вътрешни променливи (за математика, индекс за стека, по малки параметри към функции), които трябва да се съхранят при прекъсване. Това е един от недостатъците на С. Сега дали е точно такъв случая - виж в документацията - interrupt, context saving или нещо от сорта.

Автор:  Predator_MF [ Пет Юни 03, 2005 10:34 am ]
Заглавие: 

Ами точно запис на контекста е :D А как така MSP нема такъв запис :?:

Автор:  breeze [ Пет Юни 03, 2005 11:10 am ]
Заглавие: 

Ето един от документите, в които добре е описано всичко това:
http://www.atmel.com/dyn/resources/prod ... oc1234.pdf
В случая се вижда, че се записват всички scratch registers, както и един local register (R24) който явно е използван за съхраняване на статуса ти SREG. Към IAR си има документация която освен този PDF включва и друг касаещ пълната "анатомия" на модела използван от самия компилатор. До най-големи тънкости.

Автор:  Nikola Kirov [ Пет Юни 03, 2005 1:20 pm ]
Заглавие: 

Не е добре човек да прекалява с бачкането щото изпростява и става неефективен. Ето днес като се наспах до късен следобяд за 5 минути видях защо е IAR-a ми дава този код .
Ами така става като от функцията на прекъсването извикаш друга функция и така стават доста неща за съхраняване.

Автор:  Реконструктор [ Пет Юни 03, 2005 1:23 pm ]
Заглавие: 

IAR-а е тъп. :) Съхранява наред, без оглед дали е нужно или не.

Автор:  Гост [ Пет Юни 03, 2005 1:36 pm ]
Заглавие: 

Ìîãà ëè äà íå ñå ñúãëàñÿ ÷å IAR å òúï ;)
Âñè÷êè scratch ðåãèñòðè å íåîáõîäèìî äà áúäàò ñúõðàíåíè ïðè ïðåêúñâàíå ïîíåæå íå ñå çíàå â êîé ìîìåíò ùå íàñòúïè òî. Ñúùîòî âàæè è çà ñòàòóñ ðåãèñòúðà.
Çà ðàçëèêà îò ïðåêúñâàíèÿòà, ïðè èçâèêâàíå íà ôóíêöèÿ âå÷å ìîæå äà áúäàò ñúõðàíåíè íàèñòèíà ñàìî èçïîëçâàíèòå ðåãèñòðè...
Ñ ïî-ìàëêî ñúõðàíè ðåãèñòðè ïðîñòî íå âèæäàì êàê ìîæå äà ñå ìèíå îñâåí àêî
1) èçðè÷íî íå óêàæåòå ðåãèñòðèòå R20-R24 äà íå ñå ïîëçâàò çà scratch (òîâà ñòàâà ñ îïöèÿ â êîìïèëàòîðà) è òå íå ñå ïîëçâàò â ISR-òî;
2) àêî ñå îêàæå, ÷å àáñîëþòíî íèêúäå â ïðîãðàìàòà íå ñå èçïîëçâàò íÿêîè scratch ðåãèñòðè, òîãàâà (ïðåäïîëàãàì ïðè âêëþ÷åíè îïòèìèçàöèè) IAR ùå ãè "îòñòðàíè" îò ñïèñúêà çà ñúõðàíÿâàíè ðåãèñòðè.

Автор:  Nikola Kirov [ Пет Юни 03, 2005 1:38 pm ]
Заглавие: 

Сега го тествах с няколко различни функции съхранява само това дето пипа в функцията и Статуса. Ако имаш обръшение към друга функция от функцията на пекъсването съхранява всички Scratch регистри.
Явно по идея ако ти трябва бързодеиствие трябва да избягваш подобни конструкции.
Може и да има и някаква оптимизация за това но поне аз не намирам как. Но това не означава че няма.

Автор:  Nikola Kirov [ Пет Юни 03, 2005 1:41 pm ]
Заглавие: 

Този последния пост излязъл докато писах моя.
А къде е тази опция за R20-R24,че не я виждам?

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/