Witam
Napotkałem problem z retarget-owaniem funkcji printf w C (kompilator CodeSourcery ARM EABI).
W poniższym pliku (retarget.c - kod nie jest mój ) zawarta jest implementacja funkcji takich jak printf itd... chodzi mi właśnie o funkcję printf.
Otóż..
Funkcja działa poprawnie, łącznie z formatowaniem (np. %d) i znakami specjalnymi (\n \t... itd) tylko jeśli parametr funkcji kończy się znakiem '\n'!
Jeśli tak nie jest, to program (ogólnie mówiąc) wywala się (Hard Fault).
Do retargetingu wykorzystano wersje reentrant funkcji "write" - czyli :
W TYM miejscu znalazłem częściowo wyjaśnienie, lecz nie rozumiem go w 100%.
Zacząłem od reimplementacji funkcji write (zamiast jej wersji reentrant - powyżej) - bez efektu. Funkcja jakby nie była wcale wykonywana.
Równiez funkcja isatty jest poprawnie (moim zdaniem) zdefiniowana.
Blokowanie buforowania stdout też nie działa.
O czym zapomniałem? Gdzie robię błąd?
Jak poprawnie zaimplementować ten printf?
A oto kod:
Napotkałem problem z retarget-owaniem funkcji printf w C (kompilator CodeSourcery ARM EABI).
W poniższym pliku (retarget.c - kod nie jest mój ) zawarta jest implementacja funkcji takich jak printf itd... chodzi mi właśnie o funkcję printf.
Otóż..
Funkcja działa poprawnie, łącznie z formatowaniem (np. %d) i znakami specjalnymi (\n \t... itd) tylko jeśli parametr funkcji kończy się znakiem '\n'!
Jeśli tak nie jest, to program (ogólnie mówiąc) wywala się (Hard Fault).
Do retargetingu wykorzystano wersje reentrant funkcji "write" - czyli :
Code: c
W TYM miejscu znalazłem częściowo wyjaśnienie, lecz nie rozumiem go w 100%.
Zacząłem od reimplementacji funkcji write (zamiast jej wersji reentrant - powyżej) - bez efektu. Funkcja jakby nie była wcale wykonywana.
Równiez funkcja isatty jest poprawnie (moim zdaniem) zdefiniowana.
Blokowanie buforowania stdout też nie działa.
Code: c
O czym zapomniałem? Gdzie robię błąd?
Jak poprawnie zaimplementować ten printf?
A oto kod:
Code: c