sta?e warto?ci w pliku c czy h

Cześć. Proszę powiedzcie mi czy jak mam tablicę np z wartościami funkcji sinus to te wartości powinienem umieścić w pliku .c czy .h (czy w pliku sin.c czy w pliku sin.h)? Jaka jest różnica jak umieszczę w jednym a w drugim? W kursie w EdW STM32 wartości umieszczono w sin.c natomiast w kursie AVR takie dane były w plikach .h

Przy okazji, spotkałem się z definicją funkcji która miała taki zapis. volatile unsigned char FUNKCJA(.....) {...}

Chodzi mi o użycie volatile w funkcji a nie w zmiennej. Po co i dlaczego?

Reply to
slawek7
Loading thread data ...

slawek7 snipped-for-privacy@wp.pl napisał(a):

Odpowiedz sobie na pytanie, po co Ci w ogóle pliki .h. Jeśli masz plik. h. includowany tylko przez jeden plik .c to nie ma znaczenia, czy deklaracje zawarte w pliku .h będą w nim, czy w pliku .c. Pliki .h stosujemy, gdy chcemy funkcje z pliku .c udostępnić na zewnątrz. Wtedy inny plik .c może sobie includować taki plik .h żeby dostać deklaracje funkcji zdefiniowanych w tamtym pierwszym .c

Reply to
Grzegorz Niemirowski

Masz racje. Problem w tym ze informacji na temat jak poprawnie budowac program na uC nie ma, przy najmniej ja nie znam. Jeśli wiesz gdzie mozna o tym poczytacto bede wdzieczny

Reply to
slawek7

Masz racje. Problem w tym ze informacji na temat jak poprawnie budowac program na uC nie ma, przy najmniej ja nie znam. Jeśli wiesz gdzie mozna o tym poczytacto bede wdzieczny

przecież jest elektroda...

Reply to
identifikator: 20040501

slawek7 snipped-for-privacy@wp.pl napisał(a):

Problem, który poruszyłeś nie jest specyficzny dla uC. Jest to jedna z podstawowych rzeczy w C ogólnie i możesz o tym poczytać w dowolnej książce/kursie na temat C. Nie ma tu z resztą jakiejś wielkiej filozofii. To, na co ewentualnie należy zwrócić uwagę, to czy przypadkiem jeden plik nie jest includowany kilka razy i nie ma błędu redefinicji. Stosuje się wtedy konstrukcje typu #ifndef żeby sprawdzić, czy dane makro nie było już definiowane.

Co do volatile to nie wiem, nie spotkałem się z tym w kontekście funkcji. Google zwraca niewiele i to w stosunku do metod klas a nie samodzielnych funkcji. Podejrzewam, że to akurat może być coś specyficznego dla uC.

Reply to
Grzegorz Niemirowski

Rozszerzenie to tylko konwencja, ALE w standardowym podejściu jeżeli zdefiniujesz zmienne w pliku nagłówkowym to będą one powielone dla każdego pliku .c który go dołączy. Jeżeli zdefiniujesz w .h jako extern a potem zdefiniujesz w .c to w wyniku będzie tylko raz.

Afaik volatile odnosi się do typu zwracanego (unsigned char) a nie do funkcji i jest w tym kontekście bez sensu.

Reply to
Michoo

The volatile statement tells the compiler that the variable is constantly changing.

Chodzi o optymalizację kodu przez kompilator. Zapobiega przenoszeniu kopii zmiennej do rejestru i wykonywaniu dalszych operacji na kopii. Potrzene np przy obsłudze przerwań.

Reply to
kk

kk snipped-for-privacy@a.pl napisał(a):

To ja wiem i stosuję, chodziło o volatile w kontekście typu funkcji.

Reply to
Grzegorz Niemirowski

Odppowiadając temu kto twierdzi ze zrodlwem wiedzy moze byc elektroda. To jakies nieporozumine. Sa tam super ludzie ktorzy potrafia zrozumiec poczatkujacego ale w kazdym dziale jest moderator ktory sami wiecie co robi albo pojawiaja sie inni uzykownicy. Potem jak sie zapytasz to az krew zalewa czytajac niektore nie na temat odpowiedzi

Reply to
slawek7

slawek7 snipped-for-privacy@wp.pl napisał(a):

Odpowiadasz mi, czy to znaczy, że ja kiedyś tak stwierdziłem?

Do mnie się nikt nie czepiał a odpowiedzi dostawałem, ale ja się mało tam udzielam. W każdym razie nie wiem po co piszesz o tym w tym wątku, on nie jest o Elektrodzie.

Reply to
Grzegorz Niemirowski

fakt .. może tu coś jest :

formatting link
Przykład deklaracji w funkcji jest, ale wyjaśnienia konkretnego przypadku nie widzę.

Reply to
kk

No i znowu lipa. Za szybko wkleiłem link. Nie ma tam odpowiedzi na zadane pytanie.

Reply to
kk

Ale sami przyznacie że uzycie volatile do funkcji jest "dziwne" Znalazlem to w tym programie mp3 pleyer:

formatting link

Reply to
slawek7

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.