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

[C] błąd wielkości zmiennej przekazywanej do funkcji

mototest 18 Lis 2010 12:13 1523 15
REKLAMA
  • #1 8758482
    mototest
    Poziom 19  
    Witam

    uczę się tworzyć biblioteki w AVRstudio i napotkałem na taki problem:

    jak zrobię funkcję w biblioteka.h i biblioteka.c

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    to wtedy działa, ale potrzebuję frequency 32bit i to z kolei wywala bład, dlaczego?

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    funkcę "void_freq" wywołuję z programu głównego w "main"
    czy muszę jakieś #include zrobić które obsługuje 32 bit ?
  • REKLAMA
  • #2 8758497
    hotdog
    Poziom 26  
    a jaki błąd wywala?

    musisz zrobić tylko #include"biblioteka.h" a w tym pliku powinno być #include <inttypes.h>

    Ale jeżeli Tobie działa z uint8_t to powinno być dobrze chyba że ręcznie zdefiniowałeś uint8_t jako unsigned char.
  • #3 8758507
    mototest
    Poziom 19  
    takie błędy

    ../biblioteka.c:40: error: conflicting types for 'freq'

    ../biblioteka.h:8: error: previous declaration of 'freq' was here

    #include"biblioteka.h było zrobione w biblioteka.c

    ręcznie zmiennych nie deklarowałem
  • #4 8758550
    Freddie Chopin
    Specjalista - Mikrokontrolery
    No i której części tego komunikatu błędu nie rozumiesz? To chyba logiczne, że jak jest deklaracja i definicja funkcji, to muszą być zgodne (identyczne), a nie w jednym miejscu uint8_t, a w drugim uint32_t...

    4\/3!!
  • #5 8758557
    mototest
    Poziom 19  
    no rozumiem , właśnie zrobiłem wszędzie uint32_t
    i z main też wysyłam uint32_t , no i wywala błąd

    w main mam np. tak :

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    w biblioteka.c
    :
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    oraz biblioteka.h:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #6 8758604
    hotdog
    Poziom 26  
    w "biblioteka.h" ma być tylko prototyp:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    zwróć uwagę na średnik na końcu. Bez ciała funkcji {....}
  • #7 8758616
    mototest
    Poziom 19  
    sorry źle skopiowałem, jest tylko prototyp i średnik, na 8 bitowej zmiennej działa dobrze.
    Jeszcze zauważyłem że jak w pliku biblioteka.h dam uint32_t , a w pliku biblioteka.c uint8_t
    to nie wywala błędu, czyli coś jest w tym drugim pliku...
  • REKLAMA
  • REKLAMA
  • Pomocny post
    #9 8758654
    hotdog
    Poziom 26  
    powinno być bez extern, ale to błędu nie powoduje.

    A jaki teraz jest błąd?

    zrobiłeś w pliku z main #include "biblioteka.h"?

    dodałeś w biblioteka.h #include <inttypes.h>?
  • #10 8758656
    mototest
    Poziom 19  
    no i to był problem, nie zapisałem tych plików, myślałem że nie trzeba :)

    dzięki

    a tak nawiasem po co jest to extern, bo widzę że w bibliotekach jest
  • #12 8758765
    mototest
    Poziom 19  
    wyskoczył mi jeszcze jeden problem
    zrobiłem znowu inną bibliotekę w której funkcja zwraca wynik przez "return"

    ale coś robię źle bo pisze taki błąd, którego nie rozumiem
    
    error: void value not ignored as it ought to be
    

    błąd pojawia się w tej linijce w której chcę pobrać wartosć z tej funkcji :

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    adc_start_conversion jest funkcją z biblioteki
    gdzie na końcu wpisałem "return wynik"
  • #13 8758786
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Możesz sobie na końcu wpisać co chcesz, funkcja jest zadeklarowana jako "void", więc NIE zwraca wartości. Chyba już dobry moment na przeczytanie książki o podstawach języka C.

    4\/3!!
  • #14 8758791
    mototest
    Poziom 19  
    aaaaa :) zatrybiłem, ponownie dziękuję za wskazówki
  • #15 8759305
    tmf
    VIP Zasłużony dla elektroda
    Freddie Chopin napisał:
    Wskazuje na funkcje które dostępne są w bibliotekach (nie mylić z "bibliotekami" czyli modułami kodu). W sumie to nawet tam jest to chyba zbędne.

    4\/3!!


    Jest zbędne, linker połączy symbole. extern jest niezbędne dla funkcji chyba tylko w przypadku kiedy korzystamy z tego samego pliku nagłówkowego w C i C++ - jako extern "C" - zapewnia właściwe manglowanie nazw i przekazywanie parametrów.
  • #16 9302765
    mototest
    Poziom 19  
    dzięki, problem rozwiązał kolega Freddie Chopin
REKLAMA