Witam.
Podczas próby porównania implementacji aplikacji bare-metal i opartej na FreeRTOS natknąłem się na problem różnego czasu wykonania się tego samego kodu. Do testów utworzyłem funkcję foo:
którą wywołuje bezpośrednio z main, a następnie jako zadanie FreeRTOS:
Czas wykonania mierzę w cyklach zegara cpu. Uzyskane przeze mnie wyniki to:
Bare metal:
- czas inkrementacji zmiennej: 9 cykli
- czas wykonania całej pętli: 4195 cykli
FreeRTOS:
- czas inkrementacji zmiennej: 8 cykli
- czas wykonania całej pętli: 3797 cykli
Użyty mikrokontroler to STM32F429ZI. Kompilację przeprowadzam z wyłączoną optymalizacją. Kompilator to arm-atollic-eabi-gcc dostarczony wraz z Atollic TrueSTUDIO Toolchain. Wygenerowany kod asemblera jest identyczny (wszystko uruchamiane w jednym projekcie). Wersja FreeRTOS to 9.0.0. Korzystam z heap_4.
Podejrzewam, że "winnym" może być sposób zarządzania pamięcią przez FreeRTOS, jednak nigdzie nie mogę znaleźć dokładnego wyjaśnienia takiego zachowania lub informacji o konkretnej innej przyczynie. Czy spotkał się ktoś wcześniej z takim problemem i wie jak go rozwiązać lub byłby w stanie szczegółowo wyjaśnić co jest tego przyczyną?
Podczas próby porównania implementacji aplikacji bare-metal i opartej na FreeRTOS natknąłem się na problem różnego czasu wykonania się tego samego kodu. Do testów utworzyłem funkcję foo:
Code: c
którą wywołuje bezpośrednio z main, a następnie jako zadanie FreeRTOS:
Code: c
Czas wykonania mierzę w cyklach zegara cpu. Uzyskane przeze mnie wyniki to:
Bare metal:
- czas inkrementacji zmiennej: 9 cykli
- czas wykonania całej pętli: 4195 cykli
FreeRTOS:
- czas inkrementacji zmiennej: 8 cykli
- czas wykonania całej pętli: 3797 cykli
Użyty mikrokontroler to STM32F429ZI. Kompilację przeprowadzam z wyłączoną optymalizacją. Kompilator to arm-atollic-eabi-gcc dostarczony wraz z Atollic TrueSTUDIO Toolchain. Wygenerowany kod asemblera jest identyczny (wszystko uruchamiane w jednym projekcie). Wersja FreeRTOS to 9.0.0. Korzystam z heap_4.
Podejrzewam, że "winnym" może być sposób zarządzania pamięcią przez FreeRTOS, jednak nigdzie nie mogę znaleźć dokładnego wyjaśnienia takiego zachowania lub informacji o konkretnej innej przyczynie. Czy spotkał się ktoś wcześniej z takim problemem i wie jak go rozwiązać lub byłby w stanie szczegółowo wyjaśnić co jest tego przyczyną?