WINAVR

Здравствуйте, Уважаемый Igor!

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-ов та-же самая ситуация. Идеология ведь однотипна.

Всего Вам Хорошего Ольга

Reply to
Olga Nonova
Loading thread data ...

Здравствуйте, Уважаемый 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. И хорошо, если эти подпрограммы написаны им самолично и представлены компилятору в исходниках. Может, он титаническими усилиями и сможет проследить цепочку вызовов и все юзание ресурсов. А что делать с линкуемыми библиотеками в обьектных кодах? И уж совсем наступает тупик, когда постоянно выпускаются новые версии этих библиотек. Поэтому, для разоработчиков компиляторов проще тупо сохранять весь контекст, какой только возможно.

Всего Вам Хорошего Ольга

Reply to
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> =========================================================================

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?

MB> 779 disable_interrupt(); MB> \ 00000006 94F8 CLI

Это вообще полная чушь, т.к. CLI исполняется автоматически у AVR при входе в любое прерывание. И наконец, что бы сотворил компилятор, если бы в теле ISR , оказались вызовы других подпрограмм?

Всего Вам Хорошего Ольга

Reply to
Olga Nonova
Reply to
Nickita A Startcev
Reply to
Michael Belousoff
Reply to
Dennis Opanasenko
Reply to
Alexander Gribanov

Здравствуйте, Уважаемый George!

Tue Sep 20 2005 15:35, George Shepelev wrote to Olga Nonova:

GS> Важный нюанс. Когда требуется быстродействие, иногда имеет смысл даже GS> увеличить размер кода (развернуть внутренние циклы программы). GS> Классический приём - размен размера на быстродействие. GS> А вот оставшийся код, не критичный к быстродействию, имеет смысл GS> оптимизировать по размеру...

Абсолютно согласна. Тезис: "наплевать на обьемы кода, лишь бы опередить конкурентов"- далеко не универсален и может сыграть злую шутку в задачах с реальным временем.

Всего Вам Хорошего Ольга

Reply to
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?

MB>>> 779 disable_interrupt(); MB>>> \ 00000006 94F8 CLI

ON>> Это вообще полная чушь, т.к. CLI исполняется автоматически у AVR при ON>> входе в любое прерывание.

IU> Что попросили, то и сделал.

Здесь претензии не к компилятору конечно, а к квалификации программера.

ON>> И наконец, что бы сотворил компилятор, если бы в теле ISR , оказались ON>> вызовы других подпрограмм?

IU> Вызвал бы подпрограммы.

Вот-вот. А те бы втихую поднапортили ресурсы, какие только возможно. И как потом будете возвращаться из прерывания? Вот, о чем подумать надо, а не "дурочку валять".

Всего Вам Хорошего Ольга

Reply to
Olga Nonova
Reply to
Alex Mogilnikov
Reply to
Alex Mogilnikov
Reply to
Dennis Opanasenko
Reply to
Dennis Opanasenko

Здравствуйте, Уважаемый 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 в этом случае. А Вы говорите "соглашение о вызовах"!

Всего Вам Хорошего Ольга

Reply to
Olga Nonova

Здравствуйте, Уважаемый Dennis!

Wed Sep 21 2005 19:38, Dennis Opanasenko wrote to All:

DO> Команда IN R17, 0x3F как раз сохраняет слово состояния (SREG).

Прочтите мои аргументы в соседнем письме. Думаю поймете, что назвать засовывание SREG в R17 "сохранением контекста ISR" - никак язык не поворачивается. Траблы обеспечены.

Всего Вам Хорошего Ольга

Reply to
Olga Nonova
Reply to
Andy Mozzhevilov
Reply to
Leha Bishletov
Reply to
Dennis Opanasenko

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.