[an error occurred while processing this directive]
|
Это ведь была не самоцель - сделать супер-пупер революционный алгоритм получения программного многоканального ШИМ. Целью (моей) было показать, что АВР все же не уступил ПИКу на этой конкретной задаче, несмотря на отсутствие в АВР однотактового эквивалента ПИКовой команды decfsz. Я применил косвенное групповое накопление результатов сравнения и выдачу полученного промежуточного результата раз в 8 итераций, тем самым доведя число циклов на канал до того же, что и для ПИКа. Просто в свое время mse сравнил лобовую реализацию ПИКового алгоритма на АВР и неосмотрительно признал поражение АВР в борьбе с ПИКом. Я эту поспешную несправедливость и прояснил, вернув АВРу его заслуженное место в этих гонках на инвалидных колясках :)
Как известно, за все удовольствия надо платить. Поэтому ничего экстраординарного не произойдет, если мы увидим сверхбыстрый ШИМ, за который заплачено сотнями-тысячами байт памяти - выплевывание заранее сформированных бит-паттернов в порт вряд ли кого удивит, но справедливо поднимет вопрос о том, каковы будут затраты на регулярное оперативное перелопачивание этих паттернов при работе реальной системы. Здравый смысл подсказывает, что новое значение ШИМ обязано вступить в действие не позже, чем через один период ШИМ после принятия команд на изменение уставок, но в конкретных системах это время может быть и меньшим - например, следующий за приемом команд период ШИМ уже должен быть с новыми уставками. И хорошо, если команды пришли в начале текущего периода - а если в конце, и на их обработку-распаттернивание останется несколько микросекунд?
Ваш новый алгоритм, несомненно, будет интересен многим, и мне в том числе (кстати, AF уже приводил весьма быстродействующее решение), поэтому просто выложите его сюда, если сочтете нужным. Только не поленитесь, пожалуйста, снабдить Ваш код комментариями и реальными показателями производительности с учетом всех накладных расходов