NUCLEO terminal printf

0

Dzień dobry,
mam pytanko o funkcję printf, korzystając z tego poradnika:
http://forbot.pl/blog/artykuly/programowanie/kurs-stm32-5-komunikacja-z-komputerem-uart-id8439

zrobiłem tak jak w poradniku, jednak ciekawi mnie jak to dokładnie działa, znalazłem takie linijki w wygenerowanym kodzie:

 extern int __io_putchar(int ch) __attribute__((weak));

int _write(int file, char *ptr, int len)
{
	int DataIdx;

	for (DataIdx = 0; DataIdx < len; DataIdx++)
	{
		__io_putchar(*ptr++);
	}
	return len;
}

i teraz pytanie, skąd funkcja printf wie że ma użyć tej wersji _write a nie jakiejś innej domyślnej?
jeszcze jedno pytanko, przy odczytywaniu danych z USART lecą one dosyć wolno, a chciałbym poczekać aż dana transmisja się zakończy, i mam taki pomysł na to:
odczytuje znak
czekam określony czas pomiędzy ramki który wynika z prędkości transmisji
sprawdzam czy jest nowy znak - jak jest wykonuje pętle ponownie jak nie kończę
Macie może jakieś lepsze sposoby na takie coś? : )
Z góry dziękuję za pomoc : )

0

Dawno nic na ARMa nie pisałem...
Masz plik syscalls.c lub podobny? Z tego co pamiętam w newlib nie ma syscallsów w ogóle, stąd powinienneś takowy plik mieć i tam będzie raczej jedyna implementacja, w bibliotece standardowej jest chyba tylko "stub" czy inny "placeholder".

i dla jasności: pytasz o __io_putchar czy _write? To zresztą mało ważne, zakładam, że oba są podobne, tzn. jakby poszukac prototypu write'a to będzie on weak, podobnie jak __io_putchar. A weak oznacza, że kiedy pojawi się funkcja o tej samej nazwie, ale "nie weak" to należy tę słabą zastąpić. I cała filozofia.

0

Mam plik syscalls.c i w nim jest funkcja _write która (tak jak wkleiłem w 1. poscie) ma w sobie wywołanie funkcji __io_putchar, i jak dobrze rozumiem to funkcja printf "szuka" funkcji _write (ta domyślna jest weak) i jak znajdzie inną to z niej korzysta tak ? : )

0

No w skrócie tak. Generalnie wszystko co jest weak może zostać zastąpione przez "nie-weak" o tej samej nazwie.

0

Dziękuję, do zamknięcia : )

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