Tue Sep 20 2005 17:54, Igor Ulanov wrote to Olga Nonova:
ON>> ... если посмотрите в дисассемблере ON>> программу обслуживания любого прерывания, которую изготовил ON>> С-компилятор, то увидите то самое- тупое сохранение и восстановление ON>> контекста именно всех рабочих регистров.
IU> А не надо на CBuilder'e писать. Лучше воспользоваться сабжем.
А сабж вообще замечательный в этом отношении. Он честно предупреждает всех пользователей, что не будет отслеживать сохранение контекстов рабочих регистров и поэтому в ISR нельзя вызывать другие неподконтрольные подпрограммы. Hапример, нельзя вызывать функции uCOS, кроме посылки семафора. Эту единственную можно, она ничего не портит. Я докладываю здесь исследования по использованию gcc для серии M68K. Думаю, что и для AVR-ов та-же самая ситуация. Идеология ведь однотипна.
Всего Вам Хорошего Ольга
Didn't find your answer? Ask the community — no account required.
O
Olga Nonova
Здравствуйте, Уважаемый Michael!
Tue Sep 20 2005 20:02, Michael Belousoff wrote to Olga Nonova:
MB> ... Бывает масса задач, когда скоpость MB> pеакции на пpеpывание вообще не имеет значения. Или, по MB> кpайней меpе, yпомянyтое тyпое сохpанение pегистpов нисколько MB> не мешает pаботе пpогpаммы.
Безусловно бывает. Hо, как показывает суровая действительность, рано или поздно, приходится возвращаться таки к временам реакции, даже на самые некритичные процессы.
ON>> пpогpаммy обслyживания любого пpеpывания, котоpyю изготовил ON>> С-компилятоp, то yвидите то самое- тyпое сохpанение и восстановление ON>> контекста именно всех pабочих pегистpов.
MB> Hy посмотpел ещё pаз, для надёжности. Hе вижy. Hекотоpые MB> pегистpы действительно сохpаняются. В pазных подпpогpаммах MB> пpеpываний - pазное их количество. ИАР постаpался. Включена MB> максимальная оптимизация на pазмеp кода.
Трудноосмысляемая бага обеспечена. Готовьтесь к истерикам в отладке.
ON>> И это совеpшенно понятно - компилятоp ведь не может пpедyгадать, ON>> какие pегистpы бyдyт, а какие не бyдyт использованы в подпpогpамме ON>> обслyживания пpеpывания. По кpайней меpе, мне такое пpедyгадывание на ON>> этапе компиляции пpедставляется чpезвычайно сложной задачей.
MB> А если не мyдpствовать? Компилятоp вполне может знать, MB> какие именно pегистpы он же задействовал пpи компиляции MB> конкpетной подпpогpаммы обpаботки конкpетного пpеpывания. MB> Да, в начале этой компиляции он этого ещё не знает. Hо MB> кто емy мешает потом к этомy вопpосy веpнyться и сохpанить MB> только нyжные pегистpы? Эта задача мне не пpедставляется MB> чpезвычайно сложной. Впpочем, на самом деле всё может быть, MB> я компилятоpов не писал.
Тут проблема в подпрограммах, которые юзер может вызывать из тела ISR. И хорошо, если эти подпрограммы написаны им самолично и представлены компилятору в исходниках. Может, он титаническими усилиями и сможет проследить цепочку вызовов и все юзание ресурсов. А что делать с линкуемыми библиотеками в обьектных кодах? И уж совсем наступает тупик, когда постоянно выпускаются новые версии этих библиотек. Поэтому, для разоработчиков компиляторов проще тупо сохранять весь контекст, какой только возможно.
Всего Вам Хорошего Ольга
O
Olga Nonova
Здравствуйте, Уважаемый Michael!
Tue Sep 20 2005 22:01, Michael Belousoff wrote to Andy Mozzhevilov:
AM>> Да, кстати, поpа yже тyда посмотpеть, и хотя бы запостить сюда, чтобы AM>> иметь пpедмет для обсyждения.
MB> Hy вот, к пpимеpy. Взято из дpевней моей pаботки, ещё только пpи MB> освоении AVRов. Компилятоp IAR, какая была оптимизация - не помню.
MB> \ __nearfunc __interrupt void UART_RX_int(); MB> \ UART_RX_int: MB> \ 00000000 931A ST -Y,R17 MB> \ 00000002 930A ST -Y,R16 MB> \ 00000004 B71F IN R17,0x3F
Фигня ведь, а не сохранение контекста. SREG, например, портится. Весьма чревато для всех фоновых операций переходов и операций с битами. Зачем хранить R17, когда все прекрасно укладывается в использование одного только R16?
Это вообще полная чушь, т.к. CLI исполняется автоматически у AVR при входе в любое прерывание. И наконец, что бы сотворил компилятор, если бы в теле ISR , оказались вызовы других подпрограмм?
Всего Вам Хорошего Ольга
N
Nickita A Startcev
ðÒÉ×ÅÔ, Olga !
20 Sep 05 , 10:28 Olga Nonova ÐÉÓÁÌ Ë Michael Belousoff:
MB>> ïÌÅÎØËÁ, Á ÍÏÖÎÏ ÐÏÐpÏÓÉÔØ ÷ÁÛÅ ÆÏÔÏ ÎÁ ÐÁÍÑÔØ? èÏÔÑ ÂÙ ÓÓÙÌËy. MB>> Hy ÐÏËÁÖÉÔÅÓØ ÖÅ ÎÁpÏÄy, Îy ÐÏÖÁÁÁÁÁÌyÊÓÔÁ. :-)))))
ON> óÏÖÁÌÅÀ, ÎÏ ÜÔÏ ÎÅ × ÍÏÅÊ ×ÌÁÓÔÉ.
ON> * Origin: FidoNet Online -
formatting link
(2:5020/400) éÎÅÔÏÍ ×ÌÁÄÅÅÔÅ, Á ÆÏÔÏÇÒÁÆÉÒÏ×ÁÔØÓÑ ÎÅ ÕÍÅÅÔÅ?
. ó Õ×ÁÖÅÎÉÅÍ, HÉËÉÔÁ. icq:240059686, lj-user:nicka_startcev ... óÕÍÍÁ ÔÅÈÎÏÌÏÇÉÊ É ÉÎÔÅÒÆÅÒÅÎÃÉÑ ÔÅÒÍÉÎÏÌÏÇÉÉ
M
Michael Belousoff
ðpÉ×ÅÔ, Olga.
÷ÏÔ ÞÔÏ Olga Nonova wrote to Michael Belousoff:
typedef unsigned char U8; typedef unsigned short int U16; typedef unsigned long int U32; typedef signed char S8; typedef short int S16; typedef long int S32;
#define NOTID 0x255
class obj { public: obj(void) { oid = NOTID; }; obj(U8 id) { oid = id; };
Tue Sep 20 2005 15:35, George Shepelev wrote to Olga Nonova:
GS> Важный нюанс. Когда требуется быстродействие, иногда имеет смысл даже GS> увеличить размер кода (развернуть внутренние циклы программы). GS> Классический приём - размен размера на быстродействие. GS> А вот оставшийся код, не критичный к быстродействию, имеет смысл GS> оптимизировать по размеру...
Абсолютно согласна. Тезис: "наплевать на обьемы кода, лишь бы опередить конкурентов"- далеко не универсален и может сыграть злую шутку в задачах с реальным временем.
Всего Вам Хорошего Ольга
O
Olga Nonova
Здравствуйте, Уважаемый Igor!
Wed Sep 21 2005 00:55, Igor Ulanov wrote to Olga Nonova:
MB>>> \ __nearfunc __interrupt void UART_RX_int(); MB>>> \ UART_RX_int: MB>>> \ 00000000 931A ST -Y,R17 MB>>> \ 00000002 930A ST -Y,R16 MB>>> \ 00000004 B71F IN R17,0x3F
ON>> Фигня ведь, а не сохранение контекста. SREG, например, портится. IU> Вот тебе и раз! И чем же он портится?
В теле ISR может запросто испортиться. Или Вы хотите сказать, что компилятор "шибко умный" и проследил, какие ресурсы портятся, а какие нет в теле ISR?
ON>> Это вообще полная чушь, т.к. CLI исполняется автоматически у AVR при ON>> входе в любое прерывание.
IU> Что попросили, то и сделал.
Здесь претензии не к компилятору конечно, а к квалификации программера.
ON>> И наконец, что бы сотворил компилятор, если бы в теле ISR , оказались ON>> вызовы других подпрограмм?
IU> Вызвал бы подпрограммы.
Вот-вот. А те бы втихую поднапортили ресурсы, какие только возможно. И как потом будете возвращаться из прерывания? Вот, о чем подумать надо, а не "дурочку валять".
áÕÄÉÔÏÒÉÑ ÒÁÓÓÅÌÁÓØ ÐÏ ËÒÅÓÌÁÍ É ÚÁÐÁÓÌÁÓØ ÈÁÊÎÅËÅÎÏÍ. ðÒÏÄÏÌÖÁÊÔÅ ON, ÐÒÏÄÏÌÖÁÊÔÅ. ;-)
WBR, Yuriy.
O
Olga Nonova
Здравствуйте, Уважаемый Alexander!
Wed Sep 21 2005 11:39, Alexander Gribanov wrote to Olga Nonova:
ON>>>> И наконец, что бы сотворил компилятор, если бы в теле ISR , ON>>>> оказались вызовы других подпрограмм?
IU>>> Вызвал бы подпрограммы.
ON>> Вот-вот. А те бы втихую поднапортили ресурсы, какие только возможно. И ON>> как потом будете возвращаться из прерывания?
AG> Бред. Соглашения о вызовах никто не отменял.
Бредом выглядит как раз слепая вера в эти самые "соглашения о вызовах". Возмем к примеру текст дисассемблированной программы, что привел здесь Белоусов и еще, помню, хвастался, мол замечательно работает без сбоев. Как уже справедливо отметили здесь коллеги, С-компилятор IAR сохраняет в том примере статус-регистр SREG не в стеке, как положено всем грамотным системам, а в R17. Теперь представьте, что в теле ISR произведен вызов подпрограммы на Си с одним формальным параметром. Согласно Вашим любимым "соглашениям о вызовах" IAR, для передачи фактического параметра в подпрограмму будет задействованы R16 и R17. Что станет с SREG, которого до этого сохраняли тоже в R17? Я считаю, что Белоусову страшно повезло,- он обошелся без вызовов других подпрограмм с формальными параметрами из тела ISR. Повезло, и теперь он уверяет меня и всех, что такая перка будет всегда. Это что касается продукта IAR. А вот в мануалах C-компилятора GNU прямо и честно говорится, что ISR не гарантируют сохранность контекста при вызове из их тела сторонних подпрограмм. Иными словами, GNU-шники честно признали невозможность отследить сохранность контекста ISR в этом случае. А Вы говорите "соглашение о вызовах"!
Всего Вам Хорошего Ольга
O
Olga Nonova
Здравствуйте, Уважаемый Dennis!
Wed Sep 21 2005 19:38, Dennis Opanasenko wrote to All:
DO> Команда IN R17, 0x3F как раз сохраняет слово состояния (SREG).
Прочтите мои аргументы в соседнем письме. Думаю поймете, что назвать засовывание SREG в R17 "сохранением контекста ISR" - никак язык не поворачивается. Траблы обеспечены.
Всего Вам Хорошего Ольга
A
Andy Mozzhevilov
Hello Olga.
22 Sep 05 00:13, Olga Nonova wrote to Alexander Gribanov: