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

[AVR][C] Tablica globalna - nie widac w funkcji.

24 Lip 2012 02:31 1631 7
  • Poziom 14  
    Funkcja, nie widzi tablicy deklarowanej w innym pliku. Co może być przyczyna ?
    Na co zwrócić uwagę.
    Poniżej wycinki z kodu.
    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Serwerowe OpowieściSerwerowe Opowieści
  • Moderator na urlopie...
    A gdzie w programie glowny.c masz dołączony plik nagłówkowy podprogram.h? I gdzie taki plik wogóle jest stworzony?
  • Serwerowe OpowieściSerwerowe Opowieści
  • Poziom 32  
    To akurat niewiele pomoże. Tablica rejestr[] ma deklarację w main (glowny.c) a użyta jest w podprogram.c.
    Umieszczenie definicji extern w podprogram.h będzie miało sens pod warunkiem przeniesienia tablicy do podprogram.c. Na ile to skomplikuje glowny.c nie wiadomo - za mało kodu jest zaprezentowane.
    Oczywiście razem z extern trzeba dać ten #define z wielkością tablicy.
    To wszystko przy założeniu, że kod ma być zgodny z "ogólnie przyjętymi regułami".
    Bo sytuacja, gdy jakiś obiekt ma nagłówek w innym pliku nagłówkowym, a ciało w jakiś zupełnie innym pliku .c też w sumie przejdzie, ale kto się potem w tym zorientuje?
  • Poziom 12  
    W tej sytuacji najlepiej nie bawić się z externem, tylko przekazać do funkcji wskaźnik na "rejestr[]"
  • Specjalista - Mikrokontrolery
    Nakombinowałeś się ze zmianą nazw funkcji i po co? Przecież i tak widać że próbujesz zaimplementować MODBUSa. To co wstawiłeś jest nieczytelne! Komentarze są powstawiane byle jak i byle gdzie, język C przecież posiada komentarze i są jakieś ogólne zasady ich stosowania. Ogarnij to trochę, żeby wyglądało po ludzku...
  • Poziom 14  
    Niestety, nie wiem o co chodzi.
    Czy na samym początku robię coś nie tak ?
    Cały czas mam trudności z tablicą: rejestr[].

    Plik podprogramu:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Odpowiedź kompilatora:
    Code:
    /rs485.c:57:1: warning: data definition has no type or storage class
    
    ../rs485.c:57:1: warning: type defaults to 'int' in declaration of 'wsk_rejestru'
    ../rs485.c:57:1: error: conflicting types for 'wsk_rejestru'
    ../rs485.c:56:6: note: previous declaration of 'wsk_rejestru' was here
    ../rs485.c:57:16: warning: initialization makes integer from pointer without a cast


    Plik programu głównego:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Odpowiedź kompilatora:
    Code:
    ../slavevMB007_11_1.c:34:1: warning: data definition has no type or storage class
    
    ../slavevMB007_11_1.c:34:1: warning: type defaults to 'int' in declaration of 'wsk_rejestru'
    ../slavevMB007_11_1.c:34:1: error: conflicting types for 'wsk_rejestru'
    ../slavevMB007_11_1.c:33:6: note: previous declaration of 'wsk_rejestru' was here
    ../slavevMB007_11_1.c:34:16: warning: initialization makes integer from pointer without a cast

    Nie bardzo rozumiem, o co chodzi kompilatorowi ? Możecie mnie naprowadzić na błąd.
  • Specjalista - Mikrokontrolery
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Tego typu inicjalizacje możesz robić tylko w ciele funkcji
    Normalnie powinieneś zrobić tak:
    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Poziom 14  
    Dziękuje za zainteresowanie i pomoc.
    Rzeczywiście pogubiłem sie z tym wszystkimi deklaracjami,zmiennymi itp.
    Zaczynam składać swój program odnowa, tylko boję się, abym znów sie nie pogubił.
    Nie mam jeszcze wypracowanej techniki. żeby mieć wszystko pod kontrola.
    Niemniej jeszcze raz DZIĘKI.