-
Data: 2018-09-12 16:47:51
Temat: Re: Biblioteka standardowa time.h i mikrokontrolery
Od: "Grzegorz Niemirowski" <g...@p...onet.pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]Atlantis <m...@w...pl> napisał(a):
> To rozwiązanie charakterystyczne dla STM32, czy stanowi ogólnie przyjęty
> standard i mogę się spodziewać, że tak samo będzie się to robiło także w
> przypadku innych rodzin MCU, a PIC32 jest tutaj jakimś wyjątkiem?
ARM, nie STM32, dla ścisłości. Kompilator (gcc-arm-none-eabi) nawet nie wie,
że jest takie coś jak STM32.
Nie wiem jak jest na innych architekturach, z 32-bitowych używam tylko
STM32. Ale w każdym razie z kompilatorem (jako programem) dostarczana jest
też biblioteka języka C. Popularną biblioteką C dla mikrokontrolerów ARM
jest newlib. I ona wymaga własnie _gettimeofday(), inaczej będzie błąd
linkowania. Widocznie w bibliotece rozprowadzanej z kompilatorem dla PIC32
to jest uproszczone, nie ma dodatkowych warstw w postaci _gettimeofday_r() i
_gettimeofday() i trzeba od razu napisać time().
> W ogóle istnieje gdzieś jakiś zasób, który tłumaczyłby w jaki sposób
> spiąć niskopoziomowo standardową bibliotekę C z własnym sprzętem?
Ogólnie jest tak, że w przypadku standardowych funkcji C komunikujących się
z tym, co jest na zewnątrz aplikacji (czas, pliki, standardowe we/wy,
dynamiczna alokacja pamięci), funkcje te wywołują funkcje systemu
operacyjnego (system calls - syscalls). Ponieważ na mikrokontrolerze nie ma
systemu operacyjnego, trzeba właśnie te funkcje systemowe napisać samemu.
Dlatego jeśli chodzi o ARM GCC, możesz napotkać na posty ludzi, którym
linker wywala brak funkcji _write(), _read(), czy _sbrk(). Więc odpowiadając
na Twoje pytanie, to nie znam takiego jednego zasobu, ale googlałbym po
słowach kluczowych newlib syscalls arm. Można znaleźć np.
https://balau82.wordpress.com/2010/12/16/using-newli
b-in-arm-bare-metal-programs/
Przykładowy plik syscalli z minimalnymi funkcjami:
https://github.com/ROBOTIS-GIT/OpenCR/blob/master/ar
duino/opencr_develop/opencr_bootloader/common/bsp/op
encr/cfg/syscalls.c
Dzięki temu, że piszesz własną implementację syscalli możesz np.
przekierować printf() (bo on woła pod spodem _write()) na port szeregowy
albo konsolę semihostingu:
int _write(int file, char *ptr, int len)
{
if (CoreDebug->DHCSR & CoreDebug_DHCSR_C_DEBUGEN_Msk) {
for (int DataIdx = 0; DataIdx < len; DataIdx++)
{
SH_SendChar(*ptr++);
}
}
return len;
}
--
Grzegorz Niemirowski
https://www.grzegorz.net/
Następne wpisy z tego wątku
- 12.09.18 20:58 Atlantis
- 12.09.18 21:53 Marek
- 13.09.18 00:07 Grzegorz Niemirowski
- 13.09.18 07:46 Atlantis
- 13.09.18 08:37 Jacek Radzikowski
- 13.09.18 09:03 Atlantis
- 13.09.18 09:05 Atlantis
- 13.09.18 09:14 Jacek Radzikowski
- 13.09.18 11:18 Grzegorz Niemirowski
- 14.09.18 09:33 Atlantis
- 14.09.18 11:00 Grzegorz Niemirowski
- 14.09.18 11:09 Marek
Najnowsze wątki z tej grupy
- pradnica krokowa
- Nieustający podziw...
- Coś dusi.
- akumulator napięcie 12.0v
- Podłączenie DMA 8257 do 8085
- pozew za naprawę sprzętu na youtube
- gasik
- Zbieranie danych przez www
- reverse engineering i dodawanie elementów do istniejących zamkniętych produktów- legalne?
- Problem z odczytem karty CF
- 74F vs 74HCT
- Newag ciąg dalszy
- Digikey, SN74CBT3253CD, FST3253, ktoś ma?
- Szukam: czujnik ruchu z możliwością zaączenia na stałe
- kabelek - kynar ?
Najnowsze wątki
- 2025-01-20 Gdańsk => Programista Full Stack .Net <=
- 2025-01-20 Gliwice => Business Development Manager - Dział Sieci i Bezpieczeńst
- 2025-01-20 Warszawa => Full Stack .Net Engineer <=
- 2025-01-20 huta ruszyla
- 2025-01-20 piece wodorowe
- 2025-01-20 Lublin => Programista Delphi <=
- 2025-01-20 Warszawa => Architekt rozwiązań (doświadczenie w obszarze Java, AWS
- 2025-01-20 Mińsk Mazowiecki => Area Sales Manager OZE <=
- 2025-01-20 Bieruń => Spedytor Międzynarodowy (handel ładunkami/prowadzenie flo
- 2025-01-19 Test - nie czytać
- 2025-01-19 qqqq
- 2025-01-19 Tauron przysyła aneks
- 2025-01-19 Nowa ładowarka Moya a Twizy -)
- 2025-01-18 Power BANK z ładowaniem przelotowym robi PRZERWY
- 2025-01-18 Pomoc dla Filipa ;)