|
|
  |
Высшая степень вложенности Real/Soft FIQ/IRQ |
|
|
|
Nov 13 2009, 18:47
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(GetSmart @ Nov 13 2009, 20:10)  Поражаюсь чьей-то глупости необъективности. Это я произнесено, как я понимаю, исключительно по той причине, что на, повторяю: Цитата ....в описанном Вами случае собственно вложенности-то и нет - есть очевидная разбивка (skip) обработчика прерывания на собственно обработчик прерывания и псевдопроцесс продолжения обработки. ответить-то по существу и нечего.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Nov 13 2009, 18:53
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Решения с вложенными прерываниями имеют право на жисть, и Ваше не такое уж и плохое, но ИМХО, оно применено в условиях когда и без него можно обойтись. Вложенность нужна когда прерывания идут очень неравномерно, т.е. бывают ситуации что идет много одновременно от разных источников и главное успеть зарегестрировать все(т.е. не пропустить ни одного), ну и еще довольно быстро минимально реагировать. У Вас же оба прерывания АЦП и ЦАП вполне себе переодичны. Значит главное обеспечить маленький джитер вывода в ЦАП при работующем FIQ АЦП Цитата(GetSmart @ Nov 13 2009, 20:25)  Сложный, не значит долгий. Сложный - это сложный, долгий - это долгий. Если посмотрите на осциллограмму, то увидите, что в FIQ АЦП прога висит по-разному, но максимум 40 мкс. Это не много для прерываний вообще, но много для FIQ DAC, что явилось объективной причиной для реализации вложенности. Ну вот просто вставьте в FIQ АЦП пару раз проверку на то не пора ли обслужить ЦАП, и обслужите его не отходя от кассы. И джитер можно сделать необходимо малым.
|
|
|
|
|
Nov 13 2009, 19:05
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(singlskv @ Nov 14 2009, 00:53)  Значит главное обеспечить маленький джитер вывода в ЦАП при работующем FIQ АЦП ... Ну вот просто вставьте в FIQ АЦП пару раз проверку на то не пора ли обслужить ЦАП, Сейчас средний джиттер 0.3 мкс (@24 MHz). Мне что, на каждые 10 тактов внутри FIQ вставлять проверку на флаг от таймера для DAC ? А Вы в курсе, что только чтение из T0IR занимает 8 тактов плюс ещё загрузка адреса T0IR ? У меня времени просто не останется собственно для чтения АЦП и действий над оцифрованными данными. Вот! Типичный случай из-за боязни вложенности предлагать заведомо неэффективное решение  Цитата(zltigo @ Nov 14 2009, 01:00)  Можно. Уберите приставку 'псевдо'. Останется процесс обработки. Все в терминах операционных систем. Вы просто организовали процесс НЕ средствами операционной системы, по этой причине я и назвал его 'псевдопроцесс'. Но суть осталась - вложенного прерывания нет - произведена оптимизация обработчика FIQ прерывания и часть его вынесена из этого обработчика. Так и надо строить системы БЕЗ вложенных прерываний. Я не понимаю альтернативу. Предложите конкретный другой вариант. Что такое умеет делать ОС применительно к моему случаю о чём я не знаю?
Сообщение отредактировал GetSmart - Nov 13 2009, 19:15
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Nov 13 2009, 19:12
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(GetSmart @ Nov 13 2009, 20:51)   Не поверите, но у каналов есть ещё приоритеты опроса и они опрашиваются совсем не по порядку. В этом наверное есть некий скрытый глубокий смысл, который я боюсь ниасилю. Цитата Что такое умеет делать ОС применительно к моему случаю о чём я не знаю? Опишите ваш случай вначале, а то получается разговор ни о чем. Я не понимаю какое действие из трех перечисленных может занимать существенное время: 1. прочитать АЦП; 2. сменить канал; 3. записать результат в память. Все три в купе @24Mhz должны занимать отсилы 1мкс. Я не понимаю, что мешает семплировать АЦП на одинаковой (или хотя бы кратной) частоте с ЦАПом, тогда будем иметь одно прерывание и порядок операций: 1. Вывести данные в ЦАП; 2. прочитать АЦП; 3. сменить канал; 4. записать рез-тат в приемный буфер.
|
|
|
|
|
Nov 13 2009, 20:01
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(defunct @ Nov 14 2009, 01:28)  Нет, у него обработка АЦП прерывается ЦАПом. Именно так. Цитата В этом наверное есть некий скрытый глубокий смысл, который я боюсь ниасилю. Осилите  Смысл только в увеличении пропускной частотной способности быстродействующих каналов при одинаковой загруженности проца (одинаковом кол-ве FIQs). Когда проц умеет аппаратно складывать значения из АЦП в раму, то можно смело оцифровывать все каналы по очереди. Правда есть минус - требуется буфер (два!), достаточно большой, чтобы тред успевал его выгребать. Но опять же, в девайсе нет никакого счётчика и опять (!) проц не той системы  Поэтому заказчик/работодатель идёт в ж..у. Или я?  Цитата(defunct @ Nov 14 2009, 01:12)  Я не понимаю, что мешает семплировать АЦП на одинаковой (или хотя бы кратной) частоте с ЦАПом, тогда будем иметь одно прерывание и порядок операций:
1. Вывести данные в ЦАП; 2. прочитать АЦП; 3. сменить канал; 4. записать рез-тат в приемный буфер. Мешает заранее неизвестная частота сэмплирования в WAV файле, которая может оказаться совершенно некратной частоте сэмплирования следующего WAV файла. Во-вторых как я уже уточнил, длительнось расчётов некоторых каналов в FIQ АЦП достигает ~40 мкс. Неужели непонятно, что длительность отработки FIQ АЦП больше, чем период прерывания от ЦАП? Вашим алгоритмом можно обойти только джиттер, возникающий из-за вторичного короткого FIQа, но он бесполезен для вторичного длинного FIQа. Цитата(defunct @ Nov 14 2009, 01:12)  Опишите ваш случай вначале, а то получается разговор ни о чем.
Я не понимаю какое действие из трех перечисленных может занимать существенное время: 1. прочитать АЦП; 2. сменить канал; 3. записать результат в память.
Все три в купе @24Mhz должны занимать отсилы 1мкс. Плюс пункт 4. расчёт оцифрованного быстродействующего канала для выявления искомого события. (40 мкс) Повторюсь ещё раз. Этот расчёт нельзя переносить в тред, т.к. скорость реакции будет непредсказуемой или черезмерно большой.
Сообщение отредактировал GetSmart - Nov 13 2009, 19:54
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Nov 13 2009, 21:57
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(GetSmart @ Nov 13 2009, 23:01)  Именно так. Понятно, то есть необходимы 3 уровня старшинства прерываний IRQ, FIQ с разрешенным "Fast" FIQ и сам "Fast" FIQ тогда наверное вложенные прерывания необходимы Цитата Плюс пункт 4. расчёт оцифрованного быстродействующего канала для выявления искомого события. (40 мкс)
Повторюсь ещё раз. Этот расчёт нельзя переносить в тред, т.к. скорость реакции будет непредсказуемой или черезмерно большой. хотя с другой стороны, кто Вам мешает рассчет перенести не в тред а в SoftIRQ ? и иметь просто FIQ с двумя короткими ветками или так тоже будет недостаточно оперативно ? З.Ы. Если SoftInt слишком медленно, можно и какое-нить переферийное с максимальным приоритетом взводить... прямо из FIQ АЦП
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|