Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Pierwszy program w C - Błędy

Krzysiuch 07 Sie 2008 23:31 2084 20
  • #1 07 Sie 2008 23:31
    Krzysiuch
    Poziom 10  

    Napisałem swój pierwszy program w C (wcześniej troche pisałem w bascomie) i wydaje się, że wszystko jest dobrze napisane a jednak kompilator wyrzuca błędy.

    Cytat:

    #include <avr/io.h>
    #define LED_ON PORTC &= 0x7F
    #define LED_OFF PORTC |= 0x80
    void waitms(unsigned char x)

    int main(void)
    {
    PORTC = 0xFF;
    while(1)
    {

    LED_ON;
    waitms(250);
    LED_OFF;
    waitms(250);
    LED_ON;
    waitms(250);
    LED_OFF;
    waitms(250);
    LED_ON;
    return(0)
    }
    }

    Cytat:

    ../MojPierwszyProgramC.c:7: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
    ../MojPierwszyProgramC.c:23: error: expected '{' at end of input
    make: *** [MojPierwszyProgramC.o] Error 1


    ----
    Gdzie tu jest błąd?

    Pozdrawiam.

    0 20
  • #2 07 Sie 2008 23:41
    kulmar
    Poziom 25  

    Po pierwsze brak średnika po prototypie funkcji .

    Pozdrawiam
    Mariusz

    0
  • #3 07 Sie 2008 23:43
    pubus
    Poziom 30  

    Zgubiłeś średnik " ; " po deklaracji funkcji waitms...
    Zdajesz sobie sprawę, że port masz ustawiony jako wejście...?...

    0
  • #4 08 Sie 2008 00:02
    Krzysiuch
    Poziom 10  

    Po dostawieniu średnika dalej jest coś nie tak.

    Cytat:

    ../MojPierwszyProgramC.c:22: error: expected ';' before '}' token
    make: *** [MojPierwszyProgramC.o] Error 1


    A jak zrobić na wyjście? DDRC = 0xFF? Bo ja na razie naprawdę sie nie orientuje w tym języku. (dopiero 2 dzień sie uczę) i nie wiem o co chodzi z tymi "0xFF" itp.

    0
  • #5 08 Sie 2008 00:12
    kulmar
    Poziom 25  

    Po drugie, brak średnika po return(0)...

    Pozdrawiam
    Mariusz

    Dodano po 7 [minuty]:

    Krzysiuch napisał:

    ... i nie wiem o co chodzi z tymi "0xFF" itp.


    0xFF jest hexadecymalnym zapisem liczby 255. Notacja powszechnie używana przez programistów.

    Pozdrawiam
    Mariusz

    0
  • #6 08 Sie 2008 01:19
    Balu
    Poziom 38  

    Krzysiuch napisał:
    Po dostawieniu średnika dalej jest coś nie tak.
    Cytat:

    ../MojPierwszyProgramC.c:22: error: expected ';' before '}' token
    make: *** [MojPierwszyProgramC.o] Error 1


    A jak zrobić na wyjście? DDRC = 0xFF? Bo ja na razie naprawdę sie nie orientuje w tym języku. (dopiero 2 dzień sie uczę) i nie wiem o co chodzi z tymi "0xFF" itp.


    Co do wyjścia to nie język, to lenistwo= PATRZ DATASHEET!!

    0
  • #7 08 Sie 2008 01:30
    rbrus
    Poziom 14  

    Krzysiuch napisał:
    Napisałem swój pierwszy program w C (wcześniej troche pisałem w bascomie) i wydaje się, że wszystko jest dobrze napisane a jednak kompilator wyrzuca błędy.
    Cytat:

    #include <avr/io.h>
    #define LED_ON PORTC &= 0x7F
    #define LED_OFF PORTC |= 0x80
    void waitms(unsigned char x)

    int main(void)
    {
    PORTC = 0xFF;
    while(1)
    {

    LED_ON;
    waitms(250);
    LED_OFF;
    waitms(250);
    LED_ON;
    waitms(250);
    LED_OFF;
    waitms(250);
    LED_ON;
    return(0)
    }
    }

    Cytat:

    ../MojPierwszyProgramC.c:7: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
    ../MojPierwszyProgramC.c:23: error: expected '{' at end of input
    make: *** [MojPierwszyProgramC.o] Error 1


    ----
    Gdzie tu jest błąd?

    Pozdrawiam.



    Code:
    #include <avr/io.h>
    
    #define LED_ON PORTC &= 0x7F
    #define LED_OFF PORTC |= 0x80
    void waitms(unsigned char x);

    int main(void)
    {
    PORTC = 0xFF;
    while(1)
    {

    LED_ON;
    waitms(250);
    LED_OFF;
    waitms(250);
    LED_ON;
    waitms(250);
    LED_OFF;
    waitms(250);
    LED_ON;
    return(0);
    }
    }

    0
  • #8 08 Sie 2008 01:36
    Balu
    Poziom 38  

    DObre Dobre, :) Szkoda, że nie działa;]
    A nie lepiej:
    #define F_CPU XXXXXXXX
    //w Hz
    #include <util/delay.h>

    i _wait_ms(x)?

    Do tego jeszcze -Os i jedziemy ;]

    PS....

    While(1) w którym jest return=]
    I od kiedy return w nawiasach się pdoaje? (Si, można, ale może nie tak skomplikwaną rzecz jak 0:D)

    :)

    0
  • #9 08 Sie 2008 07:18
    snow
    Poziom 28  

    Balu, zamiast _wait_ms(x) to lepiej _delay_ms(x) skoro już korzystać z biblioteki delay.h

    0
  • #10 08 Sie 2008 12:02
    Krzysiuch
    Poziom 10  

    Ja chyba jednak rezygnuje z C i wracam do Bascoma bo nawet na necie nie ma żadnych prostych kursów C AVR a w bascomie chociaż polski help jest.

    0
  • #11 08 Sie 2008 14:43
    Dr.Vee
    VIP Zasłużony dla elektroda

    Witam,

    Kurs AVR GCC był w czasopiśmie EP, od 03/2005 do 04/2006. Wpisz w google "Kurs AVR GCC" :)

    Pozdrawiam,
    Dr.Vee

    0
  • #12 08 Sie 2008 15:26
    maly_elektronik
    Poziom 23  

    Może pokaż funkcję waitms() :?:
    Na jakim procesorze pracujesz :?: Może trzeba fusebiy ustawić :?:
    PS. Nie rezygnuj z c\c++ bo w przyszłości zapewne przejdziesz na procesory arm albo inne a do takich procesorów to C to podstawa. Na necie nie znajdziesz zbyt dużo o programowaniu avr w c ale najpierw naucz się c na kompa a potem to tylko kwestia zapoznania się ze strukturą avr, bibliotekami i oczywiście próbami prostych programików na zapalanie diod potem LCD i wiele wiele innych
    Pozdrawiam maly_elektornik

    0
  • #13 08 Sie 2008 19:32
    Krzysiuch
    Poziom 10  

    Pracuje na ATmega8. A czym sie rożni C na kompa od C na Mokrokontrolery?

    0
  • #14 28 Sie 2008 20:06
    Tomcio7
    Poziom 17  

    deklaracja funkcji

    u08 ds18b20Setup(dallas_rom_id_T* rom_id, u08 resolution, s08 alarm_low, s08 alarm_high);

    u08 ds18b20Start(dallas_rom_id_T* rom_id);

    i błędy

    ds18b20.h:56: error: expected ')' before '*' token
    ds18b20.h:61: error: expected ')' before '*' token

    o co chodzi??

    0
  • #15 28 Sie 2008 21:11
    acid12
    Poziom 21  

    wrzuć zawartość ds18b20.h, i deklaracje dallas_rom_id_T

    0
  • #16 28 Sie 2008 21:12
    Klima
    Poziom 30  

    typ "dallas_rom..." masz poprawnie zdefiniowany? A może wielkie litery pomyliłeś?

    0
  • #17 28 Sie 2008 21:21
    Tomcio7
    Poziom 17  

    Code:
    typedef union dallas_rom_id_U
    
    {
       long long id;
       u08 byte[8];
    } dallas_rom_id_T;

    #ifndef ds18b20_h
    #define ds18b20_h

    //----- Include Files ---------------------------------------------------------#include "global.h"

    //----- Defines ---------------------------------------------------------------
    #define ds18b20_rev               3

    // family code
    #define DS18B20_FAMILY            0x28

    // function commands
    #define DS18B20_CONVERT_TEMP      0x44
    #define DS18B20_WRITE_SCRATCHPAD   0x4E
    #define DS18B20_READ_SCRATCHPAD      0xBE
    #define DS18B20_COPY_SCRATCHPAD      0x48
    #define DS18B20_RECALL_E2         0xB8
    #define DS18B20_READ_POWER         0xB4

    // resolution min and max
    #define DS18B20_RES_MIN            9
    #define DS18B20_RES_MAX            12

    // no alarm values for high and low
    #define DS18B20_NO_ALARM_LOW      -56      // min temp read is -55C
    #define DS18B20_NO_ALARM_HIGH      126      // max temp read is 125C

    //----- Functions ---------------------------------------------------------------

    // ds18b20Init()
    //     initializes the dallas 1-wire bus
    void ds18b20Init(void);

    // ds18b20Setup
    //     Sets up the device
    //     The parameters are the rom id of the device,
    //     the resolution [9-12], and the low and high alarm values.
    //     If no low and/or high alarm is desired, use the values -55 and/or 126
    //     Returns either the corresponding error or DALLAS_NO_ERROR
    u08 ds18b20Setup(dallas_rom_id_T* rom_id, u08 resolution, s08 alarm_low, s08 alarm_high);

    // ds18b20Start()
    //     Start the conversion for the given device
    //     Returns either the corresponding error or DALLAS_NO_ERROR
    u08 ds18b20Start(dallas_rom_id_T* rom_id);

    // ds18b20Result()
    //     Gets the result of the conversion and stores it in *result
    //     Returns either the corresponding error or DALLAS_NO_ERROR
    u08 ds18b20Result(dallas_rom_id_T* rom_id, u16 *result);

    // ds18b20StartAndResult();
    //     1-step command to start the conversion and store the result in *result
    //     The conversion takes some time to do, so it can be more efficient
    //     to do the 1-step commands Start() and Result()
    //     Returns either the corresponding error or DALLAS_NO_ERROR
    u08 ds18b20StartAndResult(dallas_rom_id_T* rom_id, u16 *result);

    // ds18b20Print()
    //     Does a formatted print on the given resultat the given resolution: +xx x/xx
    void ds18b20Print(u16 result, u08 resolution);

    #endif

    korzystam z gotowej biblioteki...

    Proszę umieszczać listingi programów w znacznikach "Code". [c_p]

    0
  • #18 28 Sie 2008 22:41
    acid12
    Poziom 21  

    u mnie sie skompilowało, nie miałem tych błędów co Ty, funkcje są ok (miałem inne ale to dlatego ze projekt nie pełny, musiałem pozamieniać np u08 na uint8_t etc.)

    jakiego kompilatora używasz i której wersji ??

    0
  • #19 29 Sie 2008 09:33
    Tomcio7
    Poziom 17  

    mam 2 programy - w pierwszym biblioteka bez problemów kompiluje się, a w drugim wyskakują te błędy...

    0
  • #20 29 Sie 2008 09:54
    acid12
    Poziom 21  

    Jak w 1 działa w a drugim nie, to spr czym one się różnią.
    spróbuj stworzyć nowy projekt, na podstawie tego działającego programu.
    Najpierw cały go skopiuj i skompiluj.
    usuń wszystko oprócz tych wspólnych rzeczy "ds18b20.h" / .c itd
    no i w zostaw funkcje main() z niesk pętła i skompiluj.

    Jak działa, to dodaj pliki (funkcje) z nowego projektu.

    Po prostu patrz w którym miejscu przestaje działać i napraw element który psuje.

    0
  • #21 29 Sie 2008 10:17
    Bigfoot
    Poziom 25  

    Ten post powinien chyba znalezc sie w dziale Mikrokontrolery->Osla laczka...

    Moderatorze Szanowny! Moze przydaloby sie naprawde taki dzial stworzyc?

    BF

    0