Vit (16.02.2006 10:45, просмотров: 1924)
Помогите, плз, с "критическими секциями" Знаю по EWAVR, что есть квалификатор __monitor. Наверно также называющееся есть в EVARM (не ставил и по религиозным мотивам не очень и охота). Вопросов получается несколько. Прошу сильно не пинать - не программист.
1. Есть ли в GCC аналог __monitor? Всмысле внешне не различимый для ARM и других платформ (или различный;). В CrossWorks в exe-шнике в виде текста __monitor нашелся. Нарисовал пару строк, компилер откомпилил (я не понял как), а линкер обругался - впечатление, что просто не было варнингов на необъявленный прототип функции. GCC из SFU тоже откомпилило, но линкер обругался. Т.е. без инклюдов (нигде в них __monitor не нашел) что-то пыхтит, но, видимо, случайно.
Прогуглил по этому поводу - нашёл в каких-то сорцах (по путям похоже на линукс) пару записей именно с __monitor...
2. Какие вообще применяются механизмы с учетом специфики ARM? Как возможные видится переход в другой mode, в котором прерывания запрещены, вариант с софтовым прерыванием (без вложенности) и обработкой критической секции в нём, ну и, наконец, прописывание своих enter_critical_section() - сохранение статуса и запрещение прерываний, ну и quit_critical_section().
Вообще, вроде бы компилятора оно касаться как-бы и не должно, потому как больше относится к построению ОС...
Соответственно ищу доступную инфу в электронном виде;)