|
Высшая степень вложенности Real/Soft FIQ/IRQ |
|
|
|
Nov 13 2009, 07:14
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Посвящается zltigo и прочим противникам вложенности прерываний  Только что закончил прикручивать звук в и без того сложный проект под FreeRTOS на LPC2368. Звук - это воспроизведение WAV с MicroSD карточки. Работа с SD сделана на основе исходников ffsample.zip (elm-chan.org). 1. Вложенные FIQ Звук (вывод в DAC) пришлось весить на FIQ для того, чтобы он не тормозился программой и осью. Но на FIQ уже висело АЦП и переносить его на IRQ было нельзя. Сначала поставил в начале обработчика проверку откуда источник FIQ и развилку на два обработчика. Всё вроде работало. Но при воспроизведении синуса 48000 Гц на осциллографе (да и в динамике) были искажения из-за того, что проц долго находился в FIQ от АЦП. Пришлось исхитряться и делать вложенные FIQ, работающие в режиме и на стеке Undefined Instruction. Работать в режиме FIQ и отрабатывать другие FIQ нельзя (по крайней мере в известных мне компиляторах), т.к. компиляторы используют регистр LR для своих целей. А обработчик FIQ для АЦП у меня имеет очень сложный алгоритм и переписывать его на асм желания не было. Только пролог и эпилог на асме. Вот если бы была опция (атрибут функции), которая запрещала использовать LR внутри функции, то это было бы реально. На асме (асм-обработчике) такое сделать вообще без проблем. 2. Вложенные Software IRQ Звук в FIQе выводится из двух буферов по 256 байт. Пока один буфер выводится, второй должен успеть обновить данные из SD карточки. Для заполнения этого буфера было выбрано прерывание IRQ со средним приоритетом, вызываемое софтовым способом. То есть как только внутри FIQ произошёл вывод последнего сэмпла из буфера то сразу же записывается (не OR-ится!) бит в VICSoftInt. Далее уровень FIQов продолжает работать с максимальной латентностью не замечая что происходит на более низких уровнях (IRQ,System и прочие). Если на выходе из FIQ есть приоритетные IRQ, то они отрабатываются. Если их нет, то срабатывает софтовое IRQ для подгрузки данных. В начале софтового обработчика сбрасывается флаг софтового прерывания через VICSoftIntClear (не AND-ится!) и происходит переключение в режим и на стек Undefined. То есть я сделал так, что все вложенные прерывания (FIQ & IRQ) работают в режиме и на стеке Undefined Instruction, чтобы они не потребляли "без спросу" стек тредов. Вобщем внутри этого обработчика происходила подгрузка данных и установка флага готовности данных. Затем переключение обратно в IRQ, восстановление регистров, SPSR и окончательный выход в тред или на ещё менее приоритетное прерывание. Тред при этом, отвечающий за воспроизведение WAV, почти ничего не делает, только запускает воспроизведение и ждёт окончания, вызывая delay(). Всё остальное происходит "автоматически". А софтовое IRQ обеспечивает максимальную латентность подгрузки новых данных. LPC2368 @ 24MHz легко справляется с воспроизведением 56000 Гц звука в реальном времени из файла на MicroSD без каких-либо глюков. Глюки появляются на 64000. Но и это не предел, если доработать Ченовский исходник так, чтобы там не было лишнего копирования, то 64000 без проблем. Если ещё убрать конвертацию WAV данных при воспроизведении и копировать (через DMA) прямо в буфер, использующийся в FIQ, то и думаю 80000 реально достичь. И это при том, что модуль воспроизведения WAV использует только 1 КБ данных (буферА) в раме плюс стек Undef. Без вложенности таких параметров никогда не достичь. Если поллить флаг подгрузки данных из треда, то он отъест слишком много времени проца, будет иметь самый высокий приоритет и от силы будет поспевать подгружать данные для звука в 10000 Гц. А садить подгрузку данных в невложенное IRQ тоже не выход, т.к. прога там достаточно долго сидит, и множество других, более приоритетных прерываний "заткнутся" и работа девайса нарушится. Программа в нормальном режиме почти постоянно переключается между пятью режимами ARM-ядра (System, Supervizor, IRQ, FIQ, Undefined) и прекрасно себя чувствует  На картинке - воспроизведение синуса со вложенными FIQ, на нижней - с обычными FIQ. Вместе с FIQ от АЦП.  Пример пролога/эпилога Nested Software IRQ для CW 1.7 Код static void WavIntr_Wrapper() __attribute__((naked)); void WavIntr(); // без static - для стандартной передачи параметров (меньшего сохранения регистров извне)
// софтверное прерывание (VICSoft...), работает в режиме и на стеке Undefined Instruction static void WavIntr_Wrapper() { asm( "STMDB SP!,{R12,LR} \n\t" // 8 байт на стеке IRQ, плюс xx байт на стеке Undefined "MVN LR,#~0xFFFFFF00 \n\t" "MOV R12,#" STRINGFY(1 << RES1_INT) "\n\t" "STR R12,[LR,#0xFFFFF01C-0xFFFFFF00] \n\t" // VICSoftIntClear = (1 << RES1_INT); "MRS R12,SPSR \n\t" "MSR CPSR_c,#0x1b \n\t" // Undef_Mode + Enable IRQ + Enable FIQ "STMDB SP!,{R0-R3,R12,LR} \n\t");
WavIntr(); // должна объявляться глобально, без static
asm( "LDMIA SP!,{R0-R3,R12,LR} \n\t" "MSR CPSR_c,#0x92 \n\t" // IRQ_Mode + Disable IRQ + Enable FIQ "MSR SPSR_all,R12 \n\t" "MVN LR,#~0xFFFFFF00 \n\t" // "MOV R12,#" STRINGFY(1 << RES1_INT) "\n\t" // "STR R12,[LR,#0xFFFFF01C-0xFFFFFF00] \n\t" // VICSoftIntClear = (1 << RES1_INT); "STR LR,[LR] \n\t" // VICAddress = xx; (сброс приоритетов IRQ) "LDMIA SP!,{R12,LR} \n\t" "SUBS PC,LR,#4 \n\t"); } Ещё родилась идея вместо Undef использовать и работать на Supervizor-е. Для этого надо бы внимательно изучить порт LPC2300 FreeRTOS. Прошу высказываться. Критика приветствуется. Готов услышать про недостатки, хотя сам пока ни одного не нашёл
Сообщение отредактировал GetSmart - Nov 13 2009, 07:32
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
 |
Ответов
|
Nov 13 2009, 11:52
|

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

|
Цитата(GetSmart @ Nov 13 2009, 10:14)  ...было нельзя. ...А обработчик FIQ для АЦП у меня имеет очень сложный алгоритм и переписывать... Обычное дело, сначала в виде аргументов постулаты "было нельзя" и абстрактно написанные "сложные алгоритмы". Потом конечно берем кувалду и начинаем выкручиваться из ситуации куда сами и залезли. Обычное дело  . Подходим к делу не удивили. И вообще в описанном Вами случае собственно вложенности-то и нет - есть очевидная разбивка ранее не продуманного обработчика прерывания на собственно обработчик прерывания и псевдопроцесс продолжения обработки. Собственно чем и доказали, что без вложенные обработчики без надобности, если думать системно - поздравляю!
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Nov 14 2009, 08:48
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(zltigo @ Nov 14 2009, 01:00)  Можно. Уберите приставку 'псевдо'. Останется процесс обработки. Все в терминах операционных систем. Вы просто организовали процесс НЕ средствами операционной системы, по этой причине я и назвал его 'псевдопроцесс'. Но суть осталась - вложенного прерывания нет - произведена оптимизация обработчика FIQ прерывания и часть его вынесена из этого обработчика. Так и надо строить системы БЕЗ вложенных прерываний. Проспался, и понял о чём речь. В FIQ ADC нужно по-быстрому скидывать данные в кольцевой (например, ну или в два обычных) буфер. И по-быстрому выходить из FIQ. Далее высокоприоритетный тред будет анализировать указатели RD + WR для буфера и обрабатывть новые поступившие данные. Хорошо. Это простой, классический, но не самый эффективный алгоритм. По сравнению с моим имеет множество недостатков и ни одного достоинства ИМХО. Список недостатков: 1. Нет вложенности FIQ (казалось бы  бонус), из-за чего латентность FIQ DAC уменьшается, а джиттер увеличивается почти в 2 раза, т.к. нет разрешения FIQов по середине обработчика (при вложенных есть). 2. Требуется буфер в раме размером на максимально возможный интервал работы других тредов, пока управление не вернётся к треду, разгребающему буфер. Пускай даже я соглашусь на тормознутую реакцию на событие, но буфер в раме требуется немалый. 3. Кол-во вычислений над оцифрованными данными будет одинаковое, но без nested FIQ будет лишнее сохранение/ восстановление данных в буфере. Плюс очень (черезмерно?) частый анализ RD WR указателей. То есть очевидна пустая трата процессорного времени тогда, когда её можно избежать. 4. Во время воспроизведения WAV у меня тормозятся именно треды (у них может упасть производительность в 4 раза например) и не тормозится ни одного важного прерывания, вот в чём фишка! А если тормозятся треды, то и тот приоритетный тред, который разгребает данные от АЦП тоже затормозится и либо потеряет данные, либо буфер ему потребуется в 4 раза больший. Три конкретных минуса и ни одного плюса. Если я что-то не учёл, пожалуйста поправьте. Цитата(defunct @ Nov 14 2009, 05:28)  Ок, я понял у Вас нечто очень-очень специфичное требующее жесткого реал-тайма (модуль управления ядерным реактором?), на батарейном питании. Затем кому-то захотелось чтобы этот модуль (управления реактором на батарейках) научился исполнять голосовые команды, и, отвечать пользователю тоже голосом. Но денег на смену элементной базы не дали, и питать модуль от реактора которым он управляет тоже не разрешили.  Не обязательно. Использованное мной решение годится для очень большого числа задач начиная от средней сложности и выше. Повторю в очередной раз - от вложенных прерываний при правильном использовании нет никакого вреда, только экономия по всем фронтам, бояться их не надо. А теперь я расскажу историю до вчерашнего дня. Есть заказчик. У него был девайс, который что-то заложенное в нём умел делать. Появился я, и первым делом поднял производительность АЦП в 3..5 раз, плюс стабильность частоты и джиттера и прочие бонусы. Затем возник вопрос - а можно ли ещё сделать это... И когда я сделал в параллель ко всему, что девайс умеет ещё и качественное воспроизведение WAV абсолютно не задев тайм-критичные характеристики пробора, то у заказчика просто челюсть отпала. Как я уже указывал, воспроизведение WAV тормозит только треды, и ни одного важного прерывания или события. И всё это требует рамы меньше, чем в любом другом варианте реализации алгоритма. И соответственно выдаёт больше производительности в каких-нибуть у.е. вычислений (например допустимая частота сигналов АЦП) по сравнению с другим вариантом реализации при одинаковой тактовой процессора.
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Nov 14 2009, 09:55
|

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

|
Цитата Далее высокоприоритетный тред будет Это может быть и не задача операционной системы, а вернемся к приставке 'псевдо' задача - тот-же софтово взводимый обработчик IRQ с наивысшим приоритетом или любой другой exception. Что примерно Вы и сделали, только утверждаете, что это назывется "вложенные FIQ"  Цитата(GetSmart @ Nov 14 2009, 11:48)  А теперь я расскажу историю до вчерашнего дня.... О чем я все время и говорю - вложенные прерывания в абсолютно подавляющеи большинстве случаев есть заплатка для плохо спроектированных систем. При этом причины по которым система спроектированы плохо значения не имеют. Причем проектирование системы и большинство системных проблем начинается с постановки задачи. В Вашем случае заказчик принес откуда-то какую-то железку и захотел всего больше в разы. И Вы это сделали ВСЕМИ ДОСТУПНЫМИ СРЕДСТВАМИ.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Nov 15 2009, 13:10
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(zltigo @ Nov 14 2009, 15:55)  Это может быть и не задача операционной системы, а вернемся к приставке 'псевдо' задача - тот-же софтово взводимый обработчик IRQ с наивысшим приоритетом или любой другой exception. Любой другой exception не вызывается из FIQ, не говорите глупостей. Если же вызовется, то в нём все FIQи будут запрещены. По поводу софтового варианта уже ответил singlskv, что вариант однозначно хуже вложенных FIQ. Если Вы так не считаете, то укажите конкретные недостатки моего варианта (nested FIQ) и достоинства SoftIRQ применительно к моей проге. Цитата(zltigo @ Nov 14 2009, 15:55)  Что примерно Вы и сделали, только утверждаете, что это назывется "вложенные FIQ"  Опять 25. Как это ещё назвать, если обёртка обработчика на 100% аналогична вложенным IRQ (за искл. разрешения FIQ, а не IRQ) ? Вот кастрированная обёртка: Код #define NESTED_FIQ
void AdcIntr_Wrapper() { asm("MOV R8,#0xe0000000 \n\t" // 0xE0070000 = T2IR "ORR R8,#0x00070000 \n\t" "LDR R9,[R8, #0] \n\t" "ANDS R9,R9,#0xff \n\t" "BEQ adc9 \n\t" "STR R9,[R8, #0] \n\t" // сбрасываю все флаги в T2IR .... Вывод в DAC "SUBS PC,LR,#4 \n\t"
#ifdef NESTED_FIQ "adc9:STMDB SP!,{R0,LR} \n\t" "MVN LR,#~0xFFFFFF00 \n\t" "MOV R0,#" STRINGFY(1 << ADC0_INT) "\n\t" "STR R0,[LR,#0xFFFFF014-0xFFFFFF00] \n\t" // VICIntEnClr = (1 << ADC0_INT); "MRS R0,SPSR \n\t" "MSR CPSR_c,#0x9b \n\t" // Undef_Mode + Disable IRQ + Enable FIQ "STMDB SP!,{R0-R3,R12,LR} \n\t"); #else "adc9:STMDB SP!,{R0-R3,LR} \n\t"); #endif
AdcIntr(); // должна объявляться глобально, без static
#ifdef NESTED_FIQ asm("LDMIA SP!,{R0-R3,R12,LR} \n\t" "MSR CPSR_c,#0xD1 \n\t" // FIQ_Mode + Disable IRQ + Disable FIQ "MSR SPSR_all,R0 \n\t" "MVN LR,#~0xFFFFFF00 \n\t" "MOV R0,#" STRINGFY(1 << ADC0_INT) "\n\t" "STR R0,[LR,#0xFFFFF010-0xFFFFFF00] \n\t" // VICIntEnable = (1 << ADC0_INT); "LDMIA SP!,{R0,LR} \n\t" "SUBS PC,LR,#4 \n\t"); #else asm("LDMIA SP!,{R0-R3,LR} \n\t" // эпиолог для FIQ "SUBS PC,LR,#4 \n\t"); #endif } Я одну вещь понять не могу. Изначально я хотел чтобы вложенный FIQ работал на стеке IRQ с запрещёнными IRQ. Насколько я знаю архитектуру ARMа, так можно. Единственное ограничение - не влетать в текущий режим если в обработчике используется LR (когда прога на Си). Прямо в этой обёртке (при заходе во вложенный FIQ) меняю режим с 0x9b (Undef) на 0x92 (IRQ) и где-то (пока непонятно где) улетаю в Data Abort. То есть первый уровень вне аборта я вижу - в макросе portSAVE_CONTEXT(), а дальше пока не отследил. Теряюсь в догадках - почему?
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Nov 15 2009, 22:35
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(GetSmart @ Nov 15 2009, 16:10)  По поводу софтового варианта уже ответил singlskv, что вариант однозначно хуже вложенных FIQ. Если Вы так не считаете, то укажите конкретные недостатки моего варианта (nested FIQ) и достоинства SoftIRQ применительно к моей проге. Я полагаю(не видя конечно Вашей проги целиком) что вариант с взведением IRQ из FIQ ничем не хуже. Если посчитать все накладные расходы на переключение режимов то джиттер скорее всего будет примерно одинаков. Если посчитать общую загрузку проца, то мой вариант будет просто лучше т.к. издержки одного лишнего IRQ будут существенно меньше чем расходы на все переключения режимов/контекстов. Остается только скорость реакции на событие посчитанное по данным АЦП, если так важна скорость то конечно нужно использовать не SoftIRQ а взводить высокоприоритетное переферийное, ну и конечно не иметь слишком длинных других IRQ. По крайней мере я бы сначала так попробовал(и скорее всего и остановился на этом) прежде чем замутить вложенные прерывания...
|
|
|
|
Сообщений в этой теме
GetSmart Высшая степень вложенности Real/Soft FIQ/IRQ Nov 13 2009, 07:14 _Pasha Цитата(GetSmart @ Nov 13 2009, 10:14) Зву... Nov 13 2009, 07:26 GetSmart Цитата(_Pasha @ Nov 13 2009, 13:26) Если ... Nov 13 2009, 07:33  VslavX Цитата(GetSmart @ Nov 13 2009, 09:33) Выв... Nov 13 2009, 12:21   defunct ЦитатаА обработчик FIQ для АЦП у меня имеет очень ... Nov 13 2009, 14:44   GetSmart Цитата(VslavX @ Nov 13 2009, 18:21) Навер... Nov 13 2009, 17:25    defunct Цитата(GetSmart @ Nov 13 2009, 19:25) Что... Nov 13 2009, 17:37   GetSmart Цитата(VslavX @ Nov 13 2009, 18:21) Как м... Nov 13 2009, 17:46    defunct Цитата(GetSmart @ Nov 13 2009, 19:39) Зач... Nov 13 2009, 18:00     GetSmart Цитата(defunct @ Nov 14 2009, 00:00) А с ... Nov 13 2009, 18:19      defunct Цитата(GetSmart @ Nov 13 2009, 20:19) Ско... Nov 13 2009, 18:34       GetSmart Цитата(defunct @ Nov 14 2009, 00:34) Все ... Nov 13 2009, 18:38        defunct Цитата(GetSmart @ Nov 13 2009, 20:38) Отл... Nov 13 2009, 18:46         GetSmart Цитата(defunct @ Nov 14 2009, 00:46) Муль... Nov 13 2009, 18:51          defunct Цитата(GetSmart @ Nov 13 2009, 20:51) Не... Nov 13 2009, 19:12    VslavX Цитата(GetSmart @ Nov 13 2009, 19:46) Все... Nov 13 2009, 18:27     GetSmart Цитата(VslavX @ Nov 14 2009, 00:27) Сильн... Nov 13 2009, 18:34    singlskv Решения с вложенными прерываниями имеют право на ж... Nov 13 2009, 18:53     GetSmart Цитата(singlskv @ Nov 14 2009, 00:53) Зна... Nov 13 2009, 19:05      singlskv Цитата(GetSmart @ Nov 13 2009, 22:05) Сей... Nov 13 2009, 19:17       defunct Цитата(singlskv @ Nov 13 2009, 21:17) Вер... Nov 13 2009, 19:28        GetSmart Цитата(defunct @ Nov 14 2009, 01:28) Нет,... Nov 13 2009, 20:01         singlskv Цитата(GetSmart @ Nov 13 2009, 23:01) Име... Nov 13 2009, 21:57          GetSmart Цитата(singlskv @ Nov 14 2009, 03:57) хот... Nov 14 2009, 03:42         defunct Цитата(GetSmart @ Nov 13 2009, 22:01) Это... Nov 13 2009, 23:28 GetSmart Взято из другой темы
Цитата(KRS @ Oct 27 2009... Nov 13 2009, 08:46 GetSmart Цитата(zltigo @ Nov 13 2009, 17:52) Обычн... Nov 13 2009, 17:10  defunct Цитата(GetSmart @ Nov 13 2009, 19:10) Раз... Nov 13 2009, 17:12  zltigo Цитата(GetSmart @ Nov 13 2009, 20:10) Пор... Nov 13 2009, 18:47      zltigo Цитата(GetSmart @ Nov 15 2009, 16:10) Люб... Nov 15 2009, 13:28       GetSmart Цитата(zltigo @ Nov 15 2009, 19:28) Где В... Nov 15 2009, 13:38        zltigo Цитата(GetSmart @ Nov 15 2009, 16:38) Exc... Nov 15 2009, 13:55       yuri_t Цитата(zltigo @ Nov 15 2009, 17:28) Я дав... Nov 15 2009, 13:39       GetSmart Цитата(zltigo @ Nov 15 2009, 19:28) Пока ... Nov 15 2009, 13:48        yuri_t Цитата(GetSmart @ Nov 15 2009, 16:48) Ну ... Nov 15 2009, 14:05       GetSmart Цитата(zltigo @ Nov 15 2009, 19:28) Я дав... Nov 15 2009, 13:56        zltigo Цитата(GetSmart @ Nov 15 2009, 16:56) Щас... Nov 15 2009, 14:00        VslavX Цитата(GetSmart @ Nov 15 2009, 15:56) Щас... Nov 15 2009, 15:17        singlskv Цитата(defunct @ Nov 16 2009, 03:19) Счит... Nov 16 2009, 00:59         defunct Цитата(singlskv @ Nov 16 2009, 02:59) Не ... Nov 16 2009, 02:37        GetSmart Цитата(defunct @ Nov 16 2009, 06:19) __as... Nov 16 2009, 03:21         defunct Цитата(GetSmart @ Nov 16 2009, 05:21) SWI... Nov 16 2009, 03:24        GetSmart Цитата(defunct @ Nov 16 2009, 06:19) __as... Nov 16 2009, 07:50         zltigo Цитата(GetSmart @ Nov 16 2009, 10:50) ...... Nov 16 2009, 10:27       GetSmart Цитата(singlskv @ Nov 16 2009, 04:35) Я п... Nov 16 2009, 03:31        defunct Цитата(GetSmart @ Nov 16 2009, 05:31) Тол... Nov 16 2009, 04:05         GetSmart Цитата(defunct @ Nov 16 2009, 10:05) Да, ... Nov 16 2009, 05:29          VslavX Цитата(GetSmart @ Nov 16 2009, 07:29) То ... Nov 16 2009, 08:28           GetSmart Цитата(VslavX @ Nov 16 2009, 14:28) Возмо... Nov 16 2009, 08:53            zltigo Цитата(GetSmart @ Nov 16 2009, 11:53) Что... Nov 16 2009, 09:05            VslavX Цитата(GetSmart @ Nov 16 2009, 10:53) Кон... Nov 16 2009, 09:21             GetSmart Цитата(VslavX @ Nov 16 2009, 15:21) А нич... Nov 16 2009, 09:58              zltigo Цитата(GetSmart @ Nov 16 2009, 12:44) Но ... Nov 16 2009, 09:59              VslavX Цитата(GetSmart @ Nov 16 2009, 11:58) Клю... Nov 16 2009, 10:17               GetSmart Цитата(VslavX @ Nov 16 2009, 16:17) Ну, п... Nov 16 2009, 16:51                VslavX Цитата(GetSmart @ Nov 16 2009, 18:25) Вне... Nov 16 2009, 17:40                 GetSmart Цитата(VslavX @ Nov 16 2009, 23:40) И что... Nov 16 2009, 17:57                  zltigo Цитата(GetSmart @ Nov 16 2009, 20:57) Дык... Nov 16 2009, 18:15                  VslavX Цитата(GetSmart @ Nov 16 2009, 19:57) 16 ... Nov 16 2009, 18:41                   GetSmart Цитата(VslavX @ Nov 17 2009, 00:41) То ес... Nov 16 2009, 18:47                    VslavX Цитата(GetSmart @ Nov 16 2009, 20:47) ... Nov 16 2009, 18:55                   GetSmart Цитата(VslavX @ Nov 17 2009, 00:41) ... т... Nov 16 2009, 19:36                    VslavX Цитата(GetSmart @ Nov 16 2009, 21:36) Мен... Nov 16 2009, 20:36                     GetSmart Почувствовав запах крови...он перешёл в наступлени... Nov 17 2009, 07:38                      VslavX Цитата(GetSmart @ Nov 17 2009, 09:38) И ч... Nov 17 2009, 09:56                       GetSmart Цитата(VslavX @ Nov 17 2009, 15:56) а поч... Nov 18 2009, 07:40                        VslavX Цитата(GetSmart @ Nov 18 2009, 09:40) Про... Nov 18 2009, 12:09                         zltigo Цитата(VslavX @ Nov 18 2009, 15:09) enabl... Nov 18 2009, 12:35                          VslavX Цитата(zltigo @ Nov 18 2009, 14:35) Это я... Nov 18 2009, 12:40                        zltigo Цитата(GetSmart @ Nov 18 2009, 10:40) И е... Nov 18 2009, 12:46                         GetSmart Цитата(zltigo @ Nov 18 2009, 18:46) ..для... Nov 18 2009, 13:02                          zltigo Цитата(GetSmart @ Nov 18 2009, 16:02) Вло... Nov 18 2009, 13:27                         GetSmart Цитата(zltigo @ Nov 18 2009, 18:46) ..для... Nov 18 2009, 14:07                          zltigo Цитата(GetSmart @ Nov 18 2009, 17:07) Я ч... Nov 18 2009, 14:27                           GetSmart Цитата(zltigo @ Nov 18 2009, 20:27) Ту, к... Nov 18 2009, 14:41                            zltigo Цитата(GetSmart @ Nov 18 2009, 17:41) Ну ... Nov 18 2009, 14:49                      GetSmart Цитата(GetSmart @ Nov 17 2009, 13:38) Луч... Nov 17 2009, 13:25                       Petka Цитата(GetSmart @ Nov 17 2009, 16:25) Vsl... Nov 17 2009, 15:12                       zltigo Цитата(GetSmart @ Nov 17 2009, 16:25) Не ... Nov 17 2009, 15:15 KRS А взяли бы уже достпуный Cortex-M3 ( LPC1768 вроде... Nov 15 2009, 20:07 Rst7 Кто так строит, кто так строит? (ЦЭ)
Что стоило ... Nov 16 2009, 09:27 GetSmart Цитата(Rst7 @ Nov 16 2009, 15:27) Что сто... Nov 16 2009, 15:19 Rst7 ЦитатаНа ресемплинг не похоже
Он и есть, только б... Nov 16 2009, 17:15 GetSmart Ладно, ладно, приврал На 8-битных WAV квантование... Nov 16 2009, 18:25 GetSmart К слову.
Допустим кто-то поймёт, что вложенные пре... Jun 28 2010, 20:25 zltigo QUOTE (GetSmart @ Jun 28 2010, 23:25) Не ... Jun 28 2010, 20:47 GetSmart Цитата(zltigo @ Jun 29 2010, 01:47) На са... Jun 28 2010, 21:01 zltigo QUOTE (GetSmart @ Jun 29 2010, 00:01) Сме... Jun 28 2010, 21:16 singlskv Цитата(GetSmart @ Jun 29 2010, 01:01) Дык... Jun 28 2010, 22:04  GetSmart Цитата(singlskv @ Jun 29 2010, 03:04) Про... Jun 28 2010, 22:23   singlskv Цитата(GetSmart @ Jun 29 2010, 02:19) ИМХ... Jun 28 2010, 22:25
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|