вопрос по встроенному файлу delay.h в CVavr

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
shevelev_es
Родился
Сообщения: 11
Зарегистрирован: Пт апр 01, 2016 11:31:24

вопрос по встроенному файлу delay.h в CVavr

Сообщение 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); - как я, начинающий, понимаю это просто объявление функции
а где найти её описание??? как она реализована???
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: вопрос по встроенному файлу delay.h в CVavr

Сообщение ARV »

это и есть описание. а реализацию вы не увидите скорее всего - это где-то в системных библиотеках, исходники вряд ли предоставлены
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
LookaP
Родился
Сообщения: 5
Зарегистрирован: Вт апр 05, 2016 12:34:44

Re: вопрос по встроенному файлу delay.h в CVavr

Сообщение LookaP »

shevelev_es писал(а):а где найти её описание??? как она реализована???
Зависит от версии. Например, бывает так:

Код: Выделить всё

#define delay_us( us )   ( __delay_cycles( ( F_CPU / 1000000UL ) * ( us ) ) )
shevelev_es
Родился
Сообщения: 11
Зарегистрирован: Пт апр 01, 2016 11:31:24

Re: вопрос по встроенному файлу delay.h в CVavr

Сообщение shevelev_es »

Спасибо. Думал, что исходники укажите. Учусь дальше!
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: вопрос по встроенному файлу delay.h в CVavr

Сообщение YS »

Учусь дальше!


Почитайте, что такое объектный файл, библиотека, и чем все это отличается от модуля.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: вопрос по встроенному файлу delay.h в CVavr

Сообщение Jack_A »

ARV писал(а):это и есть описание. а реализацию вы не увидите скорее всего - это где-то в системных библиотеках, исходники вряд ли предоставлены

думаю, реализацию такой несложной функции можно восстановить по HEX файлу в симуляторе. Написать простейшую прогу, состоящую из одного только вызова delay, компильнуь - и препарируй загружаемый файл.
Изображение
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Re: вопрос по встроенному файлу delay.h в CVavr

Сообщение 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


На Си сложно сгенерировать точные задержки.
L.O.D
Встал на лапы
Сообщения: 139
Зарегистрирован: Чт фев 11, 2016 18:35:37

Re: вопрос по встроенному файлу delay.h в CVavr

Сообщение 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;
}
- Из овощей я больше всего люблю пельмени... © Соседский Мальчик
LookaP
Родился
Сообщения: 5
Зарегистрирован: Вт апр 05, 2016 12:34:44

Re: вопрос по встроенному файлу delay.h в CVavr

Сообщение LookaP »

L.O.D писал(а):Еще бывает в таком виде: ...
Дык, и я про то же - полный пипец, этот срумент. И еще - см. личку.
Ответить

Вернуться в «Разные вопросы по МК»