Цитата(defunct @ Nov 16 2009, 10:05)

Да, внутри FIQ:
- Заходите в FIQ,
- определяете какой обработчик надо запустить;
- читаете текущий SWI вектор;
- прописываете ваш обработчик в SWI вектор;
- вызываете SWI (IRQ запрещены, ОС не может вызывать SWI);
- по окончанию обработки возвращаетесь в FIQ и восстанавливаете старый SWI вектор.
- возвращаетесь в user тред с восстановленным вектором.
По этой схеме можете не один АЦП обработчик откладывать, а сколько угодно.
Всё это "кривляние" заметно тормознутей простых вложенных FIQ (7 тактов + 1 запись в VIC). Действий для SWI потребуется больше. В чём смысл?
Там, где я выделил, будут запрещены FIQ & IRQ. Перед разрешением FIQ нужно будет сбросить запрос в VIC ( VICIntEnClr = (1 << ADC0_INT) ) и разрешить FIQ в CPSR. Только после этого будут доступны Fast FIQ.
Цитата(yuri_t @ Nov 15 2009, 20:05)

Dear GetSmart !
-во-первых:
Вы сделали замечательный проект и нашли элегантное решение.
Спасибо конечно, но я предпочитаю брать деньгами. И довольный заказчик (с отвисшей челюстью

) со мной в этом согласен.
Цитата(yuri_t @ Nov 15 2009, 20:05)

Но большинство людей, дискутирующих с Вами, сделали десятки (а кое-кто - и сотни...) не менее замечательных проектов и при этом пришли к решениям, позволяющим добиваться результата с минимальными затратами труда и минимальным риском всяких непредвиденных осложнений ( в полном соответствии с "бритвой Оккама" - не нужно множить сущности без необходимости).
Я ничего не множу. Пользуюсь только тем, на чём работаю. Это как отказываться от какой-либо периферии проца из-за предрассудков.
Цитата(yuri_t @ Nov 15 2009, 20:05)

- во-вторых:
Не стоит, даже в пылу полемики, заявлять:
"Все вышеотписавшиеся живут во власти предрассудков по поводу вложенности. И что бы не случилось, всеми способами пытаются заменить наиболее производительное решение на менее производительное только потому, что не понимают всех хитростей ядра для высокоэффективной организации вложенных прерываний."
Поверте, эти "вышеотписавшиеся" понимают "все хитрости ядра" намного лучше нас с Baми...
Не поверю! Т.к. вышеотписавшиеся предлагали заведомо неэффективные решения. И некоторые из них постоянно тычут своей
ДОГМОЙ всем в лицо. Когда ей тыкали других мне было всё равно. Но когда меня обвинили в косяке компилятора, который генерит неправильный эпилог nested, то это был уже перебор. И теперь я вышел на тропу войны

Прочитайте пость #4 и если Вы такой "корректный", то высскажете
zltigo что он имеет право заявлять, а что нет.
Тыкание этой догмой мешает молодым умам думать и полноценно выбирать варианты, предоставленные ядром или системой. Возможно, в определённом возрасте уже не хочется совсем думать, но это личные дела кого-то.
Цитата(zltigo @ Nov 15 2009, 20:00)

Об этом я самого начала и говорю, начиная с поста №5 если перечитаете

. Теперь Вы четко поставили задачу. Для ее решения "вкладывать прерывания" совершенно не обязательно. Как и проектировать "тяжелые прерывания"
Поздравляю, ловушка захлопнулась

Пост #5
Цитата(zltigo @ Nov 13 2009, 17:52)

Обычное дело, сначала в виде аргументов постулаты "было нельзя" и абстрактно написанные "сложные алгоритмы". Потом конечно берем кувалду и начинаем выкручиваться из ситуации куда
сами и залезли. Обычное дело

. Подходим к делу не удивили.
И вообще в описанном Вами случае собственно вложенности-то и нет - есть очевидная разбивка ранее не продуманного обработчика прерывания на собственно обработчик прерывания и
псевдопроцесс продолжения обработки. Собственно чем и доказали, что без вложенные обработчики без надобности, если думать системно - поздравляю!
0% объективности. Вложенные прерывания 100% есть и со 100% надобностью.
Цитата(VslavX @ Nov 15 2009, 21:17)

"Лучше поздно, чем никогда"

Вас тоже поздравляю с ловушкой. Физически это как были вложенные прерывания, так и остались. Я просто для особо упёртых решил обозвать их по-другому, в тех терминах, к которым они привыкли.
Цитата(VslavX @ Nov 15 2009, 21:17)

Создавать "когда понадобился" - это неоптимально по производительности - создание задачи выполняется относительно долго. А вот создать высокоприоритетный поток заранее и перевести его в ожидание некоторого события - самое оно. В прерывании сделать только самые-самые необходимые действия и активировать ожидаемое событие.
...
Именно
...
Немного не так - "засыпает" на новом ожидании события. И при этом точно так же не тратит ни такта процессорного времени. Создание/ликвидация более времязатратны и по ресурсам никакого выигрыша не дадут.
Отлично, что операционные системы дошли до минимума возможностей, на которые способны вложенные прерывания и само ядро ARM. Но делать так, всё равно что через заднепроходное отверстие. То есть я верю, что многие так делают, особенно когда речь идёт о мультиплатформенности. Хотя в большинстве случаев это делают из-за догмы или из-за сложности понимания всех процессов на уровне ядра/асма. Для мультиплатформенности и я бы так сделал. Но у меня не тот случай. Меня больше волнуют высокие конечные характеристики полученной системы. А ядро ARM и "вложенность" предоставляют программисту куда большие возможности с меньшим оверхедом. Кроме того, главный для меня критерий - я немного прог делаю под ОСью и не собираюсь к ней привязываться. И именно вложенные прерывания я могу одинаково использовать хоть с осью, хоть без неё. Можно провести ещё аналогию, что вложенные прерывания - это аналогичная фича, как реализованная в ОСи, но без самой ОСи, просто на уровне ядра.