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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Как проект в WinAVR переделать под CodeVision?
virtuality
сообщение Jul 4 2006, 15:34
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 83
Регистрация: 17-05-06
Пользователь №: 17 190



В аттаче проект для WinAVR. Я же пишу в CodeVision.
Как переделать - даже не знаю с чего начать.

Если не трудно, гляньте одним глазком и подскажите хоть что нибудь.
Прикрепленные файлы
Прикрепленный файл  glcd.rar ( 45.07 килобайт ) Кол-во скачиваний: 99
 
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Jul 4 2006, 18:56
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Хм,
там же все на асме....


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
virtuality
сообщение Jul 4 2006, 19:24
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 83
Регистрация: 17-05-06
Пользователь №: 17 190



Ну основной то файл на C.
Там интересно сделано - куча асмовых файлов+Сишный - компилируется в библиотеку libglcd.a

А далее тестовый файл написанный на чистом С, который может быть и запустился бы в CV - просто использует эту библиотеку, которая исключительно для WinAVR.
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Jul 4 2006, 19:42
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Просмотрел еще раз.
Куча асмовских файлов и один сишный хидер с внешними декларациями.Ничего специфичного для конкретного компилятора я не вмжу. Делайте проект в CV, собирайте в нем библиотеку потом включайте хидер в тестовую программу, а линкеру скомандуйте подключить библиотеку.
Как колхозный способ, если проблема со сборкой библиотеки, просто включите ассемблерные файлы в проект.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
virtuality
сообщение Jul 5 2006, 03:25
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 83
Регистрация: 17-05-06
Пользователь №: 17 190



А вот комплятор видит.
Для начала я попытался включить некоторые хидеры:

Код
#include <io.h>
#include <pgmspace.h>



Выдается куча ошибок. Например для строки
extern int strncasecmp_P(const char *, PGM_P, size_t) __ATTR_PURE__;

комплятор пишет - declaration syntax error

для строки
extern int strncmp_P(const char *, PGM_P, size_t) __ATTR_PURE__;

комплятор пишет function must be return a value

подскажите тогда, что ли как библиотеку собрать в codevision...
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Jul 5 2006, 07:34
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Вот это уже дело.
функции из avr_libc:
strncasecmp_P - сравнить строку с флешом с учетом регистра
strncmp_P - без учета регистра
меняйте на родные для CV не забывая об extern.

PS Что-то я в архиве этого не нашел - в каком они файле?


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
virtuality
сообщение Jul 6 2006, 09:03
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 83
Регистрация: 17-05-06
Пользователь №: 17 190



Цитата
PS Что-то я в архиве этого не нашел - в каком они файле?

В файле glcd.h есть ссылка на io.h и pgmspace.h - стандарты WinAvr естественно их нет в архиве.

А насчет родных функций для CV - будьте любезны, подскажите, вам из вашей памяти извлечь наверное проще.


Если вам не трудно, попробуйте сами скомпилировать эту библиотеку. Нет, я не прошу Вас сделать работу для меня. Тем более, вы говорите что все так просто.

Иначе это будет долгий разговор "корифея" с "чайником", причем первый будет настоятельно рекомендовать читать мануал и все прочее.

Почему я это говорю? Да потому что я сделал, как вы сказали и вот что вышло:

Код
#define __AVR_ATmega16__;
#define SIG_SPI;
#include <mega16.h>
#include <delay.h>
#include <glcd_line.asm>



void main()
  {
   int i=0x01;
   int t=1;
   DDRD=0xFF;

   while (1)
   {
     glcdLine(0, 0, 10, 10);
   }
  
  }

Я подключил АСМ файл - не знаю правильно или нет, но через оболочку CodeVision подключаются исключительно ".c" файлы.

После этого компилятор выдает мне, что для вызова функции glcdLine недостаточно параметров. ЧТо за бред, эта прога прекрасно компилируется в WinAVR.

И САМОЕ ИНТЕРЕСНОЕ - компилятор пишет что у меня нет функции main ()
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Jul 6 2006, 11:16
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



[quote] А насчет родных функций для CV - будьте любезны, подскажите, вам из вашей памяти извлечь наверное проще. [/quote]
Никогда серьезно не работал с CV, так посмотрел что к чему. В основном живу с gcc и IAR. Так, что придеться таки читать документацию.
io.h - описание битов портов
pgmspace.h - описание функций работы с флэшом [
quote] И САМОЕ ИНТЕРЕСНОЕ - компилятор пишет что у меня нет функции main () [/quote]
Значит проект сконфигурирован неправильно.
Тут ничем не могу помочь, это фичи самого CV.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
vet
сообщение Jul 6 2006, 11:29
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



Инклудить asm бессмысленно, т.к. этим Вы заставляете компилятор Си транслировать совершенно не сишный код.
Почти уверен, что main не находится как раз по этой причине.
Проект нуждается в оформлении по правилам CV (см. встроенный хелп и примеры в examples\).


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
virtuality
сообщение Jul 6 2006, 12:26
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 83
Регистрация: 17-05-06
Пользователь №: 17 190



хм... вот я о том и говорил. В противовес утверждениям, что нет ничего специфичного для CV в этой библиотеке. Будем разбираться.
Просто хотелось помощи людей, у которых это быстрее получилось бы.
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Jul 6 2006, 12:58
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Цитата
В противовес утверждениям, что нет ничего специфичного для CV в этой библиотеке.

Недосмотрел, включать надо заголовочник glcd.h - это объявление асмовских функций в С коде. Кстати совершенно стандартный прием.

Оставьте пустой main, вставьте в проект асм файлы и собирайте.
Ошбки можете запостить.
Цитата
В противовес утверждениям, что нет ничего специфичного для CV в этой библиотеке.


Кстати есть еще один прием достаточно быстрой переделки
Код

void foo(void)
{
asm {
        ...
       }
}


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
virtuality
сообщение Jul 6 2006, 13:44
Сообщение #12


Частый гость
**

Группа: Свой
Сообщений: 83
Регистрация: 17-05-06
Пользователь №: 17 190



glcd.h у меня включен.
Через него включаются пресловутые IO.h и pgmspace.h, вследстве чего выдаются те же ошибки, что указаны выше.

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

Кстати, в glcd.h напротив каждой функции стоит extern. Это признак того, что заголовок написан для создания библиотеки, не так ли? Может быть в этом причина?

к вопросу о специфичности кода:

typedef uint16_t glcdColor_t; - это codeVision не понимает.
Go to the top of the page
 
+Quote Post
vet
сообщение Jul 6 2006, 13:57
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



Только потому, что uint16_t сам получен в результате typedef'а. Которого в тексте и include'нных файлах нет.
Смысл простой - 16-разрядное беззнаковое число.


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
virtuality
сообщение Jul 6 2006, 14:11
Сообщение #14


Частый гость
**

Группа: Свой
Сообщений: 83
Регистрация: 17-05-06
Пользователь №: 17 190



эээ... напрягаем ламерские мозги.... unsigned long?
Непонятно, зачем тогда этот typedef нужен?

Блин, надоело мне... Буду выдирать код по кускам и поэтапно проверять. Вопрос только в том стоит ли? А посему скажите мне, верны ли утверждения, что CodeVision генерит более громоздкий и глючный код по сравнению с WinAvr? И так ли это ужасно? Может лучше перейти на WinAVR?
Go to the top of the page
 
+Quote Post
Petka
сообщение Jul 6 2006, 17:37
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



ОФФТОП: как-то переделывал програмку из CV в WinAVR. для автоматизации написал скрипт на PERL, который делает некоторую рутиную работу. Если кому надо могу поделиться. Может кто-нибудь и до ума доведёт....
Go to the top of the page
 
+Quote Post
virtuality
сообщение Jul 6 2006, 18:16
Сообщение #16


Частый гость
**

Группа: Свой
Сообщений: 83
Регистрация: 17-05-06
Пользователь №: 17 190



Код
// macro to enter a stack with gcc


Вот такая строка есть в одном файле. Дает понять что программа заточена не только под специфичные для каждого компилятора хидеры, но и под сам компилятор...
Go to the top of the page
 
+Quote Post
virtuality
сообщение Jul 6 2006, 18:33
Сообщение #17


Частый гость
**

Группа: Свой
Сообщений: 83
Регистрация: 17-05-06
Пользователь №: 17 190



Начинаю ковырять.

Выяснил - вот это приводило к появлению ошибки "the program hs no void main() function"

Код
// macro to utilize lpm with inc

.macro  rpm     reg
#if defined  (__AVR_ENHANCED__)
        lpm     \reg, Z+
#else
        lpm
        mov     \reg, r0
        adiw    ZL, 1
#endif
.endm

// macro to enter a stack with gcc

.macro ENTER unused_regs stack_locals

ENTER:
        clr     XH
        ldi     XL, \stack_locals
        ldi     ZH, hi8(ENTRY)      // there is no way to rescale an address by 0.5
        ldi     ZL, lo8(ENTRY)      // thus we have to right shift the address with additional code
        lsr     ZH
        ror     ZL
        xjmp    (__prologue_saves__ + 2 * \unused_regs)
ENTRY:
.endm


// macro to leave a stack entered with ENTER

.macro LEAVE unused_regs stack_locals ptr_changed

LEAVE:
        ldi     ZL, 18 - \unused_regs
        .if (\ptr_changed)
           in      YL, _SFR_IO_ADDR(SPL)
           in      YH, _SFR_IO_ADDR(SPH)
        .endif
        .if (\stack_locals)
           adiw    YL, \stack_locals
        .endif
        xjmp    (__epilogue_restores__ + 2 * (\unused_regs))
.endm


// macro unsigned 8x8 multiplication

.macro  MUL8x8  resH resL A B temp
        clr        \resH
        ldi     \temp, 8
        lsr        \A
        brcc    .+2
        add     \resH, \B
        ror     \resH
        ror     \resL
        dec     \temp
        brne    .-14
.endm


// movw replacement, support words on odd addresses, overlapping, hardware dependend
// and avoid dummy moves on same registers, to get this macro working we have to reassign
// register defines, such as above

.macro  _movw dst src
    .if (\src - \dst)
        .if ((\src | \dst) & 0x01)
            .if ((\src - \dst) & 0x80)
                mov     \dst +1, \src +1
                mov     \dst   , \src
            .else
                mov     \dst   , \src
                mov     \dst +1, \src +1
            .endif
        .else
#if __AVR_ENHANCED__
                movw    \dst   , \src
#else
                mov     \dst   , \src
                mov     \dst +1, \src +1
#endif
        .endif
    .endif
.endm


Что это, чем чревато удаление этого и если чревато плохими последствиями, как это сделать в CodeVision?

P.S. этот код располагался в конце файла regs.inc
Go to the top of the page
 
+Quote Post
virtuality
сообщение Jul 6 2006, 19:11
Сообщение #18


Частый гость
**

Группа: Свой
Сообщений: 83
Регистрация: 17-05-06
Пользователь №: 17 190



Код
typedef union {
    uint8_t All;
    struct {
    uint8_t AutoLineFeed:1,    
        FixedFont:1,
        Clipping:1;              
    };
} glcdFlags_t;


declaration syntax error.

Как вышеприведенное выражение должно писаться в Codevision?
Go to the top of the page
 
+Quote Post
virtuality
сообщение Jul 6 2006, 19:26
Сообщение #19


Частый гость
**

Группа: Свой
Сообщений: 83
Регистрация: 17-05-06
Пользователь №: 17 190



Цитата
включать надо заголовочник glcd.h - это объявление асмовских функций в С коде. Кстати совершенно стандартный прием.

Оставьте пустой main, вставьте в проект асм файлы и собирайте.



Более или менее разобрался с заголовочником. А простите, как добавить асмовские файлы в проект? через интерфейс редактора можно добавить только сишные файлы.
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Jul 6 2006, 20:05
Сообщение #20


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Цитата
// macro to enter a stack with gcc

Набор всяких полезных макросов, пока можно закоментить, а потом разбираться, где и как используються и как это можно обойти.
Цитата
Как вышеприведенное выражение должно писаться в Codevision?

Возможно проблема в битовых полях(попробуйте локализовать), включить их поддержку в CV.
Цитата
А простите, как добавить асмовские файлы в проект? через интерфейс редактора можно добавить только сишные файлы.

Если нельзя, вероятно стоит забыть про CV, ибо что это за среда, если не позволяет работать со смешанным кодом.
Попробуйте спросить у клетчатого, он большой спец по CV.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
virtuality
сообщение Jul 6 2006, 20:18
Сообщение #21


Частый гость
**

Группа: Свой
Сообщений: 83
Регистрация: 17-05-06
Пользователь №: 17 190



Кто такой клетчатый? Киньте пожалуйста ссылочку на его профиль, поиск в форуме имен начинающихся с "клетчат" результатов не дал.
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Jul 6 2006, 20:31
Сообщение #22


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Наш общий друг [banned]123.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
vet
сообщение Jul 6 2006, 20:48
Сообщение #23


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



Цитата(virtuality @ Jul 6 2006, 23:11) *
Код
typedef union {
    uint8_t All;
    struct {
    uint8_t AutoLineFeed:1,    
        FixedFont:1,
        Clipping:1;              
    };
} glcdFlags_t;


declaration syntax error.

Как вышеприведенное выражение должно писаться в Codevision?


Код
typedef union {
    uint8_t All;
    struct {
    uint8_t AutoLineFeed:1,    
        FixedFont:1,
        Clipping:1;              
    } s;
} glcdFlags_t;


потому что CV не позволяет делать безымянных полей.

Ассемблерные файлы не добавляются, у CV другая организация проекта.
Впрочем, в CV можно свободно мешать ассемблер с сишным кодом.


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
tiasur
сообщение Jul 7 2006, 01:27
Сообщение #24


Участник
*

Группа: Новичок
Сообщений: 17
Регистрация: 24-05-06
Пользователь №: 17 392



Цитата(virtuality @ Jul 6 2006, 22:26) *
А простите, как добавить асмовские файлы в проект? через интерфейс редактора можно добавить только сишные файлы.


Попробуйте так:

#asm
.include "file.asm"
#endasm
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jul 7 2006, 07:50
Сообщение #25


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(virtuality @ Jul 6 2006, 23:18) *
Кто такой клетчатый? Киньте пожалуйста ссылочку на его профиль, поиск в форуме имен начинающихся с "клетчат" результатов не дал.

Не берите дурного в голову wink.gif
Клетчатый Вам не только не поможет, а и вовсе заведёт в болото своего больного подсознания.
Go to the top of the page
 
+Quote Post
virtuality
сообщение Jul 7 2006, 16:30
Сообщение #26


Частый гость
**

Группа: Свой
Сообщений: 83
Регистрация: 17-05-06
Пользователь №: 17 190



Итак, поехали ковырять.

Вот что у меня получилось с первой функцией:

файл s65.c - главный
Код
#define __AVR_ATmega16__

#include <mega16.h>
#include <stdio.h>
#include <glcd.h>



void main ()

{
glcdWait(500);
}



Фрагмент файла glcd.h
Код
extern void glcdWait(uint16_t ms)
{
#asm
glcdWait:
        sbiw    P0, 1                                   // 2
        brcc    glcdWait1                               // 2
        ret                                             // 2 -2 = 0 for no branch in both loops
glcdWait1:
        nop
        ldi     T0, lo8(DELAY_ONE_MILLISECOND -4)       // 1
        ldi     T1, hi8(DELAY_ONE_MILLISECOND -4)       // 1
glcdWait2:
        sbiw    T0, 1                                   // 2
        brne    glcdWait2                               // 2 = 4, = 3 for last loop
        rjmp    glcdWait                                // 2 = 8

#endasm
}


Как выгялдел этот фрагмент в glcd_init.asm:

[code]

// void glcdWait(uint16_t ms);          
// wait some milliseconds, XTAL must be correct defined

        .global glcdWait                // used T0,T1 stack 0
glcdWait:
        sbiw    P0, 1                                   // 2
        brcc    glcdWait1                               // 2
        ret                                             // 2 -2 = 0 for no branch in both loops
glcdWait1:
        nop
        ldi     T0, lo8(DELAY_ONE_MILLISECOND -4)       // 1
        ldi     T1, hi8(DELAY_ONE_MILLISECOND -4)       // 1
glcdWait2:
        sbiw    T0, 1                                   // 2
        brne    glcdWait2                               // 2 = 4, = 3 for last loop
        rjmp    glcdWait                                // 2 = 8


;************************************************



Запускаем - на программу С компилятор не ругается, однако пишет ошибку при ассемблировании - выдает ассмблированную программу:

Код
;     176         ret                                             // 2 -2 = 0 for no branch in both loops
        ret                                             // 2 -2 = 0 for no branch in both loops
;     177 glcdWait1:
glcdWait1:
;     178         nop
        nop
;     179         ldi     T0, lo8(DELAY_ONE_MILLISECOND -4)       // 1
        ldi     T0, lo8(DELAY_ONE_MILLISECOND -4)       // 1       // ------СТРОКА 1257----
;     180         ldi     T1, hi8(DELAY_ONE_MILLISECOND -4)       // 1
        ldi     T1, hi8(DELAY_ONE_MILLISECOND -4)       // 1


В строке 1257 : syntax error unexpect "("


файлы glcd.inc и regs.inc находятся в приаттаченом в анчале темы архиве.

Что делать и кто виноват?
Go to the top of the page
 
+Quote Post
virtuality
сообщение Jul 7 2006, 17:29
Сообщение #27


Частый гость
**

Группа: Свой
Сообщений: 83
Регистрация: 17-05-06
Пользователь №: 17 190



Так разобрался я как включать асмы в проект, но при компляции ругается на invalid directive .section, .global

Это тоже специфика WinAVR?
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Jul 7 2006, 18:16
Сообщение #28


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Цитата
В строке 1257 : syntax error unexpect "("

Похоже не понимает hi8()/lo8(). Замените на стандартный ассемблер AVR или напишите эти макросы.
Цитата
но при компляции ругается на invalid directive .section, .global

Да это специфично.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
virtuality
сообщение Jul 7 2006, 18:28
Сообщение #29


Частый гость
**

Группа: Свой
Сообщений: 83
Регистрация: 17-05-06
Пользователь №: 17 190



оххх...

Наивный вопрос, но нельзя ли как-нить в WinAVR скомпилить унифицированную библиотеку, чтобы можно было использовать с CodeVision?
Go to the top of the page
 
+Quote Post
vet
сообщение Jul 7 2006, 21:55
Сообщение #30


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



Нет. CV работает только с исходниками.


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
virtuality
сообщение Jul 9 2006, 13:29
Сообщение #31


Частый гость
**

Группа: Свой
Сообщений: 83
Регистрация: 17-05-06
Пользователь №: 17 190



Перейти что ли на WinAVR? Блин, CodeVision удобен, больше похож на среду разработки, чем WinAVR. Вот как например в WinAVR узнать размер получившейся программы? КОнсоль выдает Total 17900, хотя это не соответствует истине - файл заливается в Mega16 без проблем.

Существуют ли библиотеки для WinAVR для работы с 1-Wire ?
Go to the top of the page
 
+Quote Post
shevek
сообщение Jul 9 2006, 14:10
Сообщение #32


Участник
*

Группа: Новичок
Сообщений: 50
Регистрация: 1-10-05
Пользователь №: 9 136



Существуют ли библиотеки для WinAVR для работы с 1-Wire ?

Да на avrfreaks.org

Перейти что ли на WinAVR? Блин, CodeVision удобен, больше похож на среду разработки, чем WinAVR.

Озадачен примерно темже, только в плане что выбрать для работы на С++ с AVR, правда я выбираю в большей степени между IAR и avr-gcc.


Как мне показалось IAR распространен больше, но WinAvr будет легче изучать (ибо ни gcc ни make для меня не новость, только с avrlibc разобраться)


--------------------
Мы не просто идем в будущее, мы его атакуем.
Go to the top of the page
 
+Quote Post
virtuality
сообщение Jul 9 2006, 16:14
Сообщение #33


Частый гость
**

Группа: Свой
Сообщений: 83
Регистрация: 17-05-06
Пользователь №: 17 190



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

Код
#include <delay.h>
////
void main ()
{
delay_us(500);
}


в WinAVR вроде тоже есть такая библиотека, и функция так же обзывается, но
Код
#include <avr/delay.h>
////
void main ()
{
delay_us(500);
}


Выдает ошибку undefined refefrence delay_us

Ну что с этим делать.

P.S. У кого-нить есть рабочий пример для датчика DS18B20 для WinAVR
Go to the top of the page
 
+Quote Post
shevek
сообщение Jul 9 2006, 17:25
Сообщение #34


Участник
*

Группа: Новичок
Сообщений: 50
Регистрация: 1-10-05
Пользователь №: 9 136



Ну что с этим делать.

Загляните в delay.h, там все описано. Эта фунция обьявлена как:
void
_delay_us(double __us)

Она кстати и в документации на avr-libc также упоминаются.


--------------------
Мы не просто идем в будущее, мы его атакуем.
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Jul 10 2006, 02:13
Сообщение #35


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Цитата
КОнсоль выдает Total 17900, хотя это не соответствует истине - файл заливается в Mega16 без проблем.

Код
m32sound.elf  :
section    size      addr
.text       972         0
.data         8   8388704
.bss         69   8388712
.noinit       0   8388781
.eeprom       0   8454144
.stab      3672         0
.stabstr   3628         0
Total      8349

Код это .text, .data .bss .noinit - данные, .eeprom надеюсь понятно.
Цитата
Блин, CodeVision удобен, больше похож на среду разработки,

По умолчанию WinAVR включает Programmers Notepad (под которым кстати пишу и под ARM и под РС и HTML).Нет особых сложностей прицепить его под любой другой редактор кода, хоть под Visual Studio. Главное, чтобы редактор позволял подключать внешние программы и захватывал их выход.
Цитата
в WinAVR вроде тоже есть такая библиотека

В документе avr-libc-user-manual очень подробно рассмотрены все функции, а также фокусы с секциями, встраиванием ассемблера etc.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
niccom
сообщение Jul 10 2006, 07:19
Сообщение #36


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 9-06-05
Пользователь №: 5 868



Цитата(virtuality @ Jul 9 2006, 17:29) *
Перейти что ли на WinAVR? Блин, CodeVision удобен, больше похож на среду разработки, чем WinAVR. Вот как например в WinAVR узнать размер получившейся программы? КОнсоль выдает Total 17900, хотя это не соответствует истине - файл заливается в Mega16 без проблем.

Существуют ли библиотеки для WinAVR для работы с 1-Wire ?


После компиляции в окне Programmer Notepad
text data bss dec hex filename
9412 0 405 9817 2659 dvdavtomat.elf

По моему все ясно

Для задержек изучите нижеуказанный хидер /include/util/delay.h
заодно посмотрите как ассемблер юзать в WinAVR

А библиотек столько написано что вы приятно удивитесь скачав и распаковав
http://hubbard.engr.scu.edu/embedded/avr/avrlib

#ifndef _UTIL_DELAY_H_
#define _UTIL_DELAY_H_ 1

#include <inttypes.h>

/** \defgroup util_delay <util/delay.h>: Busy-wait delay loops
\code
#define F_CPU 1000000UL // 1 MHz
//#define F_CPU 14.7456E6
#include <util/delay.h>
\endcode

\note As an alternative method, it is possible to pass the
F_CPU macro down to the compiler from the Makefile.
Obviously, in that case, no \c \#define statement should be
used.

The functions in this header file implement simple delay loops
that perform a busy-waiting. They are typically used to
facilitate short delays in the program execution. They are
implemented as count-down loops with a well-known CPU cycle
count per loop iteration. As such, no other processing can
occur simultaneously. It should be kept in mind that the
functions described here do not disable interrupts.

In general, for long delays, the use of hardware timers is
much preferrable, as they free the CPU, and allow for
concurrent processing of other events while the timer is
running. However, in particular for very short delays, the
overhead of setting up a hardware timer is too much compared
to the overall delay time.

Two inline functions are provided for the actual delay algorithms.

Two wrapper functions allow the specification of microsecond, and
millisecond delays directly, using the application-supplied macro
F_CPU as the CPU clock frequency (in Hertz). These functions
operate on double typed arguments, however when optimization is
turned on, the entire floating-point calculation will be done at
compile-time.

\note When using _delay_us() and _delay_ms(), the expressions
passed as arguments to these functions shall be compile-time
constants, otherwise the floating-point calculations to setup the
loops will be done at run-time, thereby drastically increasing
both the resulting code size, as well as the time required to
setup the loops.
*/

#if !defined(__DOXYGEN__)
static inline void _delay_loop_1(uint8_t __count) __attribute__((always_inline));
static inline void _delay_loop_2(uint16_t __count) __attribute__((always_inline));
static inline void _delay_us(double __us) __attribute__((always_inline));
static inline void _delay_ms(double __ms) __attribute__((always_inline));
#endif

/** \ingroup util_delay

Delay loop using an 8-bit counter \c __count, so up to 256
iterations are possible. (The value 256 would have to be passed
as 0.) The loop executes three CPU cycles per iteration, not
including the overhead the compiler needs to setup the counter
register.

Thus, at a CPU speed of 1 MHz, delays of up to 768 microseconds
can be achieved.
*/
void
_delay_loop_1(uint8_t __count)
{
__asm__ volatile (
"1: dec %0" "\n\t"
"brne 1b"
: "=r" (__count)
: "0" (__count)
);
}

/** \ingroup util_delay

Delay loop using a 16-bit counter \c __count, so up to 65536
iterations are possible. (The value 65536 would have to be
passed as 0.) The loop executes four CPU cycles per iteration,
not including the overhead the compiler requires to setup the
counter register pair.

Thus, at a CPU speed of 1 MHz, delays of up to about 262.1
milliseconds can be achieved.
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
"1: sbiw %0,1" "\n\t"
"brne 1b"
: "=w" (__count)
: "0" (__count)
);
}

#ifndef F_CPU
/* prevent compiler error by supplying a default */
# warning "F_CPU not defined for <util/delay.h>"
# define F_CPU 1000000UL
#endif

/**
\ingroup util_delay

Perform a delay of \c __us microseconds, using _delay_loop_1().

The macro F_CPU is supposed to be defined to a
constant defining the CPU clock frequency (in Hertz).

The maximal possible delay is 768 us / F_CPU in MHz.
*/
void
_delay_us(double __us)
{
uint8_t __ticks;
double __tmp = ((F_CPU) / 3e6) * __us;
if (__tmp < 1.0)
__ticks = 1;
else if (__tmp > 255)
__ticks = 0; /* i.e. 256 */
else
__ticks = (uint8_t)__tmp;
_delay_loop_1(__ticks);
}


/**
\ingroup util_delay

Perform a delay of \c __ms milliseconds, using _delay_loop_2().

The macro F_CPU is supposed to be defined to a
constant defining the CPU clock frequency (in Hertz).

The maximal possible delay is 262.14 ms / F_CPU in MHz.
*/
void
_delay_ms(double __ms)
{
uint16_t __ticks;
double __tmp = ((F_CPU) / 4e3) * __ms;
if (__tmp < 1.0)
__ticks = 1;
else if (__tmp > 65535)
__ticks = 0; /* i.e. 65536 */
else
__ticks = (uint16_t)__tmp;
_delay_loop_2(__ticks);
}

#endif /* _UTIL_DELAY_H_ */
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 18:20
Рейтинг@Mail.ru


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