Programowanie modulowe w C (AVR)...

Mam do napisania duzy projekt (3-4 uC) i z tad zdecydowalem sie na strukture modulowa kodu. Czyli pisze oprogramowanie w plikach (.c i h.)i dodaje je do programu glownego.

Ale mam pytanie czy moze mi ktos powiedziec jak zrobic aby zmienna lokalna (nalezaca do jednego z plikow) stala sie zmienna globalna? Poprzez wskaznik? Jesli tak to jak to zrealizowac?

Pozdarwiam, Rafal k.

Reply to
ToR
Loading thread data ...

Wielkie dzieki :D -dokladnie o to mi chodzilo, wszytko juz ladnie smiga ;)

Pozdrawiam, Rafal k.

Reply to
ToR

ToR napisał(a):

:-o To chyba standard programowania na czymkolwiek, niezależnie od liczby procesorów. Jak niby inaczej miałby wyglądać program? 10k linii w jednym pliku źródłowym?

Gdy spuchnie Ci trochę kod, dojdziesz że warto z oddzielnych modułów (zestawu plików .c i jednego lub więcej .h) robić biblioteki (.a), z których linker sobie bardzo wygodnie wybiera tylko te funkcje, które są potrzebne. Dlatego od razu myśl nad maksymalnym rozszczepieniem dużych plików .c na wiele drobnych, zawierających funkcje mogące działać niezależnie.

Reply to
Adam Dybkowski

A wydawalo mi sie ze jest "tak pieknie" :P.

Program kompiluje sie ze zmienna (Licznik_sekund) zainicjonowana w pliku modulowym cos.c i jest widoczna w main.c lecz nie moge odczytac jej wartosc innymi slowy :

plik main.c

...

while(1) { if (Licznik_sekund==2) TCCR2=0; }

nie chce mi wejsc do powyzszej petli...Jak zrobic aby umozliwic realny odczyt wartosc zmiennej zainicjonowanej w plikach modulowych?

Pozdrawiam, Rafal k.

Reply to
ToR

ToR napisał(a):

  1. w pliku źródłowym (np. cos.c) wstawiasz zmienną tak aby była widoczna na zewnątrz (nie statyczna):

int Licznik_sekund;

  1. w pliku nagłówkowym wciąganym przez main.c (np. w cos.h) lub od razu w main.c wstawiasz:

extern int Licznik_sekund;

  1. korzystasz ze zmiennej Licznik_sekund w pliku main.c tak jakby leżała lokalnie i już.

Napisz, w czym dokładnie jest problem. Program się nie kompiluje? Jak wygląda zrzut w asemblerze okolic wykorzystania zmiennej Licznik_sekund w module main?

BTW: Jest zalecane wykorzystywanie for (;;) { ... } zamiast while (1). Co lepsze kompilatory burzą się, że przy while podano stały warunek. Poza tym polecam przeczytanie zaleceń formatowania kodu źródłowego np. z dokumentacji jądra Linuxa. Dowiesz się m.in., że w zmiennych nie używa się wielkich liter.

Reply to
Adam Dybkowski

Robie dokladnie jak napisales i dalej jest ten sam problem czyli w main.c nie mam wartosci Licznik_sekund tylko jakies smieci totez nie wchodzi mi do wspomnanego warunku while(1) .W AVR-Studio widze ze wartosc tej zmiennej jest w SRAM...Moze to kogos naprowadzi..

PS: Zmienna Licznik_sekund jest typu "unsigned int".

Pozdarwiam, Rafal k.

Reply to
ToR

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.