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

 
 
> Впихнуть невпихуемое, _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
 
Start new topic
Ответов
Xenia
сообщение Nov 9 2014, 20:53
Сообщение #2


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(sigmaN @ Nov 9 2014, 23:00) *
Перед какими-то трудоёмкими делами вроде переписываением всей прошивки на асме, хотелось бы поинтересоваться есть ли у кого на примете компактный способ организации такой задержки?


Зачем же переписывать на асме ВСЮ прошивку, когда можно написать на нем ТОЛЬКО подпрограмму задержки?

Впрочем, такая задержка все равно выглядела бы как цикл, проблема лишь в его калибровке, т.е. переводе времени в число оборотов цикла.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 9th August 2025 - 04:46
Рейтинг@Mail.ru


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