Hello, Anatoly Mashanov! You wrote in conference fido7.ru.embedded to Dmitry E Oboukhov on Mon, 07 Aug 2006 20:38:48
+0400:
AM>>> И в результате получаются чудовищные тормоза, избавиться от DO>> там всего-то нормализовать менеджер процессов в функции main DO>> - убрать тупые циклы ожидания и система сможет начать DO>> работать асинхронно:
AM> Ага. С задержками в десятые доли секунды на каждую передиспетчеризацию. AM> Плавали, знаем. Потому и говорю: Windows не заслужила право AM> называться Операционной Системой.
Причем тут Windows? И почему ей не называться ОС?
DO>> прием сам по себе передача сама по себе :)
AM>>> У меня в одном дивайсе имеется буфер на 8 байт. AM>>> Соответственно,
DO>> буфер разумеется должен быть, но коль процессор у него DO>> озадачивается выполнением длительных команд (например когда DO>> он передает он ни на что не реагирует, когда он переводит DO>> числа в строки и строки в числа опять в таком же состоянии, DO>> когда он тупо ждет когда доработает АЦП, работающее насколько DO>> я понял на 62Кгц, то есть частота преобразования ~ 6кГц - DO>> опять сравнимо с тактом, он опять же ни на что не реагирует.
Ну это товарисч просто не разобрался. Прерывания работают, соответственно и uart работает, команды принимаются. А больше ни на что реагировать в этой программе и не надо.
AM> - значит, программист точно не читал ничего, кроме Дюма, и не AM> имеет никакого понятия ни о прерываниях, ни о многозадачных AM> системах. Если проц передает (Даже если он передает через AM> программу) - регулярно срабатывают прерывания по таймеру, и в
Конечно, тем более, что uart там программный по прерываниям от таймера.
AM> них можно сделать все экстренное. Перевод чисел в строки - это
Там все экстренное и делается.
AM> одна операция деления (Hу потрясающая задержка) в фоновом AM> процессе, прерывания продолжают работать. Когда он тупо ждет,
Конечно.
AM> когда доработает АЦП - ему никто не мешает вызывать обработчик AM> команд в цикле ожидания.
Незачем. Цикл короткий, ничего срочного при этом произойти не может.
DO>> DO тут кричит что мол ему фиолетово что сколько работает, что DO>> если
AM> МHЕ не фиолетово. У меня частота прерывания 20 кгц (Это 250
У меня 2400*3 При тактовой в 4MHz (4 такта на команду).
AM> циклов команд между сигналами прерывания), и потеря одного
Соответсвенно 1M/(2400*3) = 138 команд.
AM> прерывания абсолютно фатальна.
Ну у меня нет, хотя и неприятна. Но прерывания и не теряются.
AM> При этом дивайс ухитряется программно растянуть этот интервал до 1000 циклов, а AM> в фоне времени вообще хватает на все.
Естественно.
DO>> понадобится он сюда весь math.h притащит, а я говорю что
DO>> math.h сюда тащить не надо, потому что уже сейчас проблемы с DO>> потерей данных имеются.
AM> Значит, обработка считывания с компорта сделана неоптимально.
Он просто не понял.
AM> math.h может делать свое черное дело хоть секунды в фоне,
Именно, никого это не волнует.
AM> заглатывание данных с компорта может делаться в прерываниях по AM> таймеру.
Это и делается, пока есть место в буфере (а оно там как раз на одну команду). Да, пока она не выполнится и система не скажет OK, места для следующей нет, но оно и не нужно.
dima
formatting link