Страница 1 из 1
вопрос по встроенному файлу delay.h в CVavr
Добавлено: Чт апр 21, 2016 17:23:46
shevelev_es
Подскажите как работает функция задержки при подключении delay.h
файл выглядит
#ifndef _DELAY_INCLUDED_
#define _DELAY_INCLUDED_
#pragma used+
void delay_us(unsigned int n);
void delay_ms(unsigned int n);
#pragma used-
#endif
где void delay_us(unsigned int n); - как я, начинающий, понимаю это просто объявление функции
а где найти её описание??? как она реализована???
Re: вопрос по встроенному файлу delay.h в CVavr
Добавлено: Чт апр 21, 2016 18:14:12
ARV
это и есть описание. а реализацию вы не увидите скорее всего - это где-то в системных библиотеках, исходники вряд ли предоставлены
Re: вопрос по встроенному файлу delay.h в CVavr
Добавлено: Чт апр 21, 2016 18:47:06
LookaP
shevelev_es писал(а):а где найти её описание??? как она реализована???
Зависит от версии. Например, бывает так:
Код: Выделить всё
#define delay_us( us ) ( __delay_cycles( ( F_CPU / 1000000UL ) * ( us ) ) )
Re: вопрос по встроенному файлу delay.h в CVavr
Добавлено: Пт апр 22, 2016 16:24:16
shevelev_es
Спасибо. Думал, что исходники укажите. Учусь дальше!
Re: вопрос по встроенному файлу delay.h в CVavr
Добавлено: Пт апр 22, 2016 21:16:27
YS
Учусь дальше!
Почитайте, что такое
объектный файл, библиотека, и чем все это отличается от
модуля.
Re: вопрос по встроенному файлу delay.h в CVavr
Добавлено: Сб апр 23, 2016 08:52:45
Jack_A
ARV писал(а):это и есть описание. а реализацию вы не увидите скорее всего - это где-то в системных библиотеках, исходники вряд ли предоставлены
думаю, реализацию такой несложной функции можно восстановить по HEX файлу в симуляторе. Написать простейшую прогу, состоящую из одного только вызова delay, компильнуь - и препарируй загружаемый файл.
Re: вопрос по встроенному файлу delay.h в CVavr
Добавлено: Сб апр 23, 2016 09:15:02
uk8amk
Реализацию можно посмотреть в листинге ассемблера:
Код: Выделить всё
_delay_ms:
ld r30,y+
ld r31,y+
adiw r30,0
breq __delay_ms1
__delay_ms0:
__DELAY_USW 0x7D0
wdr
sbiw r30,1
brne __delay_ms0
__delay_ms1:
ret
На Си сложно сгенерировать точные задержки.
Re: вопрос по встроенному файлу delay.h в CVavr
Добавлено: Сб апр 23, 2016 17:01:45
L.O.D
LookaP писал(а):Зависит от версии. Например, бывает так: ...
Точно. Зависит. Еще бывает в таком виде:
Код: Выделить всё
_delay_ms:
ld r30,y+
ld r31,y+
adiw r30,0
breq __delay_ms1
__delay_ms0:
wdr
sbiw r30,1
brne __delay_ms0
__delay_ms1:
ret
.MACRO __DELAY_USB
LDI R24,LOW(@0)
__DELAY_USB_LOOP:
DEC R24
BRNE __DELAY_USB_LOOP
.ENDM
.MACRO __DELAY_USW
LDI R24,LOW(@0)
LDI R25,HIGH(@0)
__DELAY_USW_LOOP:
SBIW R24,1
BRNE __DELAY_USW_LOOP
.ENDM
YS писал(а):Почитайте, что такое объектный файл, библиотека, и чем все это отличается от модуля.
Все это не относится к CVavr. Вот, например, содержание "spi.lib" в одной из версий:
Код: Выделить всё
...
#include <io.h>
#ifndef SPIF
#define SPIF 7
#endif
unsigned char spi(unsigned char data)
{
SPDR=data;
while ((SPSR & (1<<SPIF))==0);
return SPDR;
}
Re: вопрос по встроенному файлу delay.h в CVavr
Добавлено: Пн апр 25, 2016 10:11:43
LookaP
L.O.D писал(а):Еще бывает в таком виде: ...
Дык, и я про то же - полный пипец, этот срумент. И еще - см. личку.