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

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