реклама на сайте
подробности

 
 
> Впихнуть невпихуемое, _delay_us() c переменной
sigmaN
сообщение Nov 9 2014, 20:00
Сообщение #1


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Необходимо с точностью до +/-20мкс организовать задержку в диапазоне от 330 до аж 4440мкс.
При этом(по всем известным причинам) контроллер изначально был взят без учета этого мега полезного функционала(Tiny13) и теперь немного нехватает флэша )
Перед какими-то трудоёмкими делами вроде переписываением всей прошивки на асме, хотелось бы поинтересоваться есть ли у кого на примете компактный способ организации такой задержки?
Всего сейчас доступно 224 байта. Ну под задержку все выделить не получится, нужно же на логику что-то оставить.. В общем чем меньше тем лучше. Как обычно )
Щас копну delay.h и главный цикл задержки оттуда попробую достать, но пока суть да дело, решил подключить коллективный разум в лице участников этого форума...
P.S. естественно ищется что-то эффективнее конструкции вида
Код
void Delay_us(int n) {
  while (n--) {
   _delay_us(1);
}
}


Кажется помощь коллективного разума не потребуется, но вдруг кому пригодится.
В общем на каждую итерацию 4 цикла не считая загрузку рабочих регистров там пару циклов единоразово в самом начале.
Ну а уж как вы будете пересчитывать колв-во итераций в микросекунды это дело другое wink.gif
Благо в моём случае можно посчитать всё заранее и подставлять в функцию по мере надобности.
Код
static void delay_loop_2(uint16_t __count)
{
    __asm__ volatile (
    "1: sbiw %0,1" "\n\t"
    "brne 1b"
    : "=w" (__count)
    : "0" (__count)
    );
}


Нет, что-то я тормознул. Если флэш в дефиците то посчитать заранее - плохая идея. Надо считаь на ходу...


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 19:30
Рейтинг@Mail.ru


Страница сгенерированна за 0.01361 секунд с 7
ELECTRONIX ©2004-2016