Страница 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 писал(а):Еще бывает в таком виде: ...
Дык, и я про то же - полный пипец, этот срумент. И еще - см. личку.