slawek55 pisze:Dobrze piszesz z tymi plikami bo ma to sens, tylko dlaczego w prawie każdym kursie c na mikrokontrolery tablice są właśnie w pliku h?
Pliki c należy kompilować osobno, czy tak? Więc kompiluje się tylko tablica?
Każdy kurs C na mikrokontrolery są po prostu słabe, tak samo dostępne pozycje książek na ten temat ! Są to tylko przepisane datasheet uC na nasz ojczysty język z marnymi przykładami wykorzystania języka C oraz zasobów uC. Dobre książki o samym omówieniu języka C i jego składni mają blisko 1000 stron, tu polecam K.N. King "Język C, Nowoczesne programowanie". Drugie tyle stron będzie o samym praktycznym wykorzystaniu C, jak pisać uniwersalne drivery, wykorzystać wskaźniki na funkcje do tego, pisać pseudo-obiektowe programy w C, modularne i zgodne z ADT i tak dalej... A następne 1000 stron o samym stylowi pisania kodu i organizacji projektu... więc żaden kurs tego nie streści, w dodatku jest pisane według własnych fanaberii autora artykułu.
Jak tam osobno skompilujesz *.c, to kompilator wrzuci tak tablicę do każdego pliku obiektowego, gdzie funkcja korzysta z tej tablicy, natomiast linker po scaleniu to i tak wyrzuci i zostawi jedną tablicę i przypisze do pozostałych plików co taką tablicę wykorzystują wspólny adres. Więc robisz tylko dodatkową pracę na kompilatora/linkera. Sam Sobie odpowiedz na to pytanie, funkcje też możesz definiować w *.h, ale czy tak się robi ? Dobry styl programowania, ukrywa implementację, między innymi zawartość tablicy.
Ten kod to porażka na całej linii. Nie sugeruj się nim. Zobacz do folderu */src/mp3dec, widać że prezentuje zgoła inny poziom (wyższy) niż kod autora, który go wykorzystuje. Volatile przy funkcje to są własne fanaberie. W dodatku bezsensowne jest stosowanie tej biblioteki ST do czegokolwiek. Robi nie potrzebny narzut kodu, tworzy struktury, kiedy jak nie są utworzone lokalnie, marnują tylko pamięć. Zaciemnia całą sprawę. Przykład: inicjalizacja SPI w STM32 to są dwa rejestry ! W tym jeden jest od przerwań, drugi do konfiguracji. A ta bibliotek mieli jakąś tam strukturę Bóg wie czemu i po co. Można tu dyskutować godzinami, na przykład stosowania co rusz w kodzie while(1) {akcja} (?). Bez RTOS nie ma to najmniejszego sensu, bo jak taki stan nie nastąpi i nie wyjdzie z takiej pętli ???