logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak poprawnie przypisać string do struktury i konwertować float w AVR GCC?

Andrzej_;) 24 Lip 2015 19:10 1077 11
REKLAMA
  • #1 14872449
    Andrzej_;)
    Poziom 14  
    Witam,
    Jestem początkujący w c i chciałem w swoim programie (edukacyjnie) zastosować strukturę i napotkałem problem.

    Buduję sobie radyjko i chcę paramety poszczególnych stacji zapamiętywać w strukturze. Na początek - do testów napisałem coś takiego:

    
    typedef struct  {
            char name[8]; //Nazwa stacji
            float fr;       //częstotliwość stacji
    }Tstacja;
    
    Tstacja stacja[8];
    


    i teraz chciałem wpisać do zmiennej name nazwę stacji:
    
    stacja[0].name = "abcd1234";
    

    i tutaj wyskakuje mi błąd..
    Pytanie jak wpisać tam stringa?

    Kolejny problem napotkałem z konwersją zmiennej fr do stringa za pomocą funkcji sprintf, tutaj kod:

    
    char buf[10];
    sprintf(buf, "%f", (stacja[0].fr));
    LCD_WriteString(buf, 2 , WHITE);  //LCD_WriteString(string, wielkość czcionki, kolor)
    


    Na wyświetlaczu zamiast wartości otrzymuję znak "?"

    Nie wiem co robię źle, a nie mam kogo zapytać, może Wy pomożecie.. z góry dziękuję.
  • REKLAMA
  • Pomocny post
    #2 14872461
    xamrex
    Poziom 28  
    Andrzej_;) napisał:
    i tutaj wyskakuje mi błąd..

    Jaki błąd.?
    Napisz jaki dosatejsz error
  • REKLAMA
  • #3 14872519
    Andrzej_;)
    Poziom 14  
    Treść błędu:
    ../main.c:56:17: error: incompatible types when assigning to type 'char[8]' from type 'char *'
  • #4 14872568
    Tomasz Gutewicz
    Poziom 12  
    Użyj strcpy( stacja[0].name, "abcd1234" );

    W C nie można zmiennej "string" przypisać stałą tekstową, należy użyć funkcji strcpy która skopiuje znak po znaku do zmiennej.
  • REKLAMA
  • Pomocny post
    #5 14872575
    BlueDraco
    Specjalista - Mikrokontrolery
    strcpy(stacja[0].name, "abcdef");

    Nie używaj typu float do zapisu częstotliwości. Zapisz ją w dziesiątkach kHz używając typu uint16_t: 107.3 MHz możesz zapisać jako 10730.
  • #6 14872624
    Andrzej_;)
    Poziom 14  
    Dziękuję Panowie, nigdy nie wpadł bym na tą funkcje "strcpy" - wreszcie działa :)

    Cytat:
    Nie używaj typu float do zapisu częstotliwości. Zapisz ją w dziesiątkach kHz używając typu uint16_t: 107.3 MHz możesz zapisać jako 10730


    Prawdę mówiąc takie było pierwotne założenie, tylko napotkałem problem z tą kropką..nie wiem jak zapis w zmiennej uint16_t (10730) zamienić na string (107.3 MHz)...
    - na pewno robi się to funkcją sprintf ..ale jakoś mi to nie wychodzi..

    W ogóle się czuję jakbym chciał przebić głową mur... zabrałem się za dość ambitne (jak na moje możliwości) zadanie i teraz gdzie się nie ruszę to napotykam na problem..
    Może polecicie mi Panowie coś godnego polecenia do nauki? Byłbym wdzięczny.
  • REKLAMA
  • Pomocny post
    #7 14872690
    Tomasz Gutewicz
    Poziom 12  
    Można tak:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Uważam, że do nauki języka C najlepsza jest książka Język ANSI C autorzy B. Kernighn, Dennis Ritchie. Jeżeli chodzi o naukę programowania AVR'ów w C to Mikrokontrolery AVR Język C Podstawy programowania autor Mirosław Kardaś oraz Język C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji autor Tomasz Francuz.
    Poza tym dużo kursów języka C w Internecie w tym także dla AVR'ów.
  • #8 14872751
    Andrzej_;)
    Poziom 14  
    Dziękuję,

    Jakie to oczywiste...jak ktoś napisze
  • #9 14872770
    Tomasz Gutewicz
    Poziom 12  
    Kiedyś na studiach uczyli, aktualnie nie wiem czy uczą bo i po co kiedy w kompach pamięci w GB :)

    Dużo programuj, w kodzie rób komentarze, przeglądaj kod innych przekonasz się, że programowanie jest łatwe.
  • #10 14872780
    tronics
    Poziom 38  
    Cytat:

    uint16_t czestotliwosc;
    uint8_t cz_dziesietna, cz_ulamkowa;

    cz_dziesietna = czestotliwosc / 100;
    cz_ulamkowa = czestotliwosc % 100;

    Wszystko pięknie, ale z własnego doświadczenia wiem, że problemem będą końcówki 01, 02, 03, 04, 05, 06, 07, 08 i 09 :) Trzeba będzie na to poprawkę wziąć. Co prawda w przypadku częstotliwości radiowych nie ma chyba nawet takiej potrzeby, ale na przyszłość ...
  • #11 14872841
    Tomasz Gutewicz
    Poziom 12  
    Z skąd końcowi 01, ..., 09 ? Proszę podaj przykład.
REKLAMA