STM32 C - gotowe pliki projektu

0

Dzień dobry,
mam pytanie, w nowo stworzonym projekcie są dwa pliki - system_stm32f4xx.c oraz syscalls.c. Mają one oczywiście opis ale nie za bardzo go rozumiem, Orientuje się ktoś może co one tak na "chłopski rozum" robią? Bez wnikania w szczegóły, po prostu chciałbym się dowiedzieć po co one są : )

Z góry dzieki za pomoc!

0

Bez wnikania w szczegóły to pierwszy zawiera konfigurację zegara(clock), a drugi podstawowe operacje unixowe operacji kernela, jak czytanie pliku, zapis, wątki itp. wszystko w języku angielskim(syscall czytaj jak systemowe operacje, albo wywołania), może nawet jest napisany czystym kodem, przez co łatwo dość do konkluzji, jakim jest jego przeznaczenie.

0

Dziękuję: )
mam jeszcze pytanie w sprawie syscalls, czy są to funkcje które normalnie są w systemie, a których nie ma na mikrokontrolerze ( z oczywistych przyczyn - np. nie ma plików ), i trzeba je nadpisać aby program w C je widział i się skompilował ?, przecież na STM nie ma systemu, więc coś mi się tutaj nie zgadza : d.

0
Zielona Pietruszka napisał(a):

Dziękuję: )
mam jeszcze pytanie w sprawie syscalls, czy są to funkcje które normalnie są w systemie, a których nie ma na mikrokontrolerze ( z oczywistych przyczyn - np. nie ma plików ), i trzeba je nadpisać aby program w C je widział i się skompilował ?, przecież na STM nie ma systemu, więc coś mi się tutaj nie zgadza : d.

Nie masz zielonego pojęcia o programowaniu mikroprocesorów i liczysz, że ktoś na forum będzie Ci wszystko tłumaczył zaczynając od opisu zawartości plików?
Znajdź sobie jakiś poradnik dla początkujących zamiast marnować czas.

0

Nie ma systemu, ale funkcje typu printf wykorzystują pod spodem wywołania systemowe. Odpowiednio nadpisując funkcje write czy read jesteś w stanie np. przekierować strumienie na port szeregowy.

0
Zielona Pietruszka napisał(a):

Dziękuję: )
mam jeszcze pytanie w sprawie syscalls, czy są to funkcje które normalnie są w systemie, a których nie ma na mikrokontrolerze ( z oczywistych przyczyn - np. nie ma plików ), i trzeba je nadpisać aby program w C je widział i się skompilował ?, przecież na STM nie ma systemu, więc coś mi się tutaj nie zgadza : d.

Zielona Pietruszka napisał(a):

Dziękuję: )
mam jeszcze pytanie w sprawie syscalls, czy są to funkcje które normalnie są w systemie, a których nie ma na mikrokontrolerze ( z oczywistych przyczyn - np. nie ma plików ), i trzeba je nadpisać aby program w C je widział i się skompilował ?, przecież na STM nie ma systemu, więc coś mi się tutaj nie zgadza : d.

Syscalle w normalnym komputerze dla 32-bitowej architektury, są to wywołania systemowe, które umożliwiają pracę systemu.
Dla linux'a masz tablicę ze wskaźnikami na te funkcje, która jest ładowana w czasie startu systemu. Potem wywołaniem "int 0x80" (instrukcja asemblera), skaczesz pod program obsługi tego wektora (taki zarządca), który to wybiera odpowiednią funkcję (z wektora) w zależności od tego co jest na stosie lub w rejestrach i ją wywołuje.
W dosie masz int21h.
Biosowe przerwania to int10h dla klawiatury oraz int16h dla grafiki.
Bios najpierw ładuje swoje przerwania, a następnie system może je nadpisać lub zrobić z nimi co mu się podoba.

W stmie sytuacja wygląda trochę inaczej. Masz pełną kontrolę nad tym co robisz. Jeśli załadujesz do swojego ulubionego cortexa system, to sytuacja będzie bardzo podobna do opisanej powyżej. Takie rozwiązanie prawdopodbnie skorzysta z instrukcji asemblera "SVC numer_przerwania".

Lecz masz pełną kontrolę nad tym co robisz. Wywołania "dostępne dla wszystkich", możesz zbudować sobie sam. Dla przykładu umieszczasz gdzieś zarządce przerwaniami oraz tablicę ze swoimi funkcjami i w każdym wywołaniu robisz zwykłego calla(chyba instrukcja "B adres"). Następnie musisz skompilować tak program, aby przy wywołaniu odpowiedniej funkcji - program, wiedział co ma robić.

Biblioteki, z których korzystasz mają coś takiego w sobie, że zbudowany program korzystający z syscalli, na starcie uC ładuje ten vector i ustawia wszystko jak być powinno. Zaletą takiego rozwiązania jest ustandaryzowanie wywołań, mniejsza ilość kodu, ogólny porządek.

Jeśli chodzi o same przerwania to masz to opisane w manulu do swojego scalaka. Jest miejsce w pamięci, które przechowuje wszystkie przerwania (a raczej adresy na funkcje tych przerwań). Aby uruchomić syscalla wstawiasz adres zarządcy pod jakies przerwanie(w czasie startu scalaka) i w czasie wywołania funkcji(gdzieś w kodzie) kierujesz go pod nie (a on robi co do niego należy).

1 użytkowników online, w tym zalogowanych: 0, gości: 1