Wykorzystując bibliotekę STM32 i system rtthread możemy wypisać w konsoli (UART) dowolne komunikaty, wystarczy podpiąć się pod UART (np. UART2 w przypadku Nucleo F103RB)
Musimy nadpisać funkcję:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | /* USER CODE BEGIN PV */ void rt_hw_console_output(const char *str) { HAL_UART_Transmit(&huart2, (uint8_t*)str, rt_strlen(str), 1000); if(str[ rt_strlen(str) - 1 ] == '\n'){ char back_r[2]; rt_strncpy(back_r, "\r", 1); HAL_UART_Transmit(&huart2, (uint8_t*)back_r, rt_strlen(back_r), 1000); } } //.... /* USER CODE END PV */ |
Od tej pory mamy do dyspozycji funkcję
1 | rt_kprintf("format %i...", 245); //tu używamy jak printf |
Zalety w stosunku do poprzedniej HALowej printfx() – brak biliotek string.h, stdio.h (rozmiar kodu), nie jest makrem, wadą jest to, że \n zamieniliśmy tylko na końcu na \n\r.
Wersja RT Thread
Można w main() przed główną pętlą sprawdzić, czy mamy logi w RT Thread wypisując wersję systemu:
1 2 3 | /* USER CODE BEGIN 2 */ rt_show_version(); /* USER CODE END 2 */ |
Powinniśmy otrzymać charakterystyczny rysunek widoczny u góry:
Oprócz tego dostajemy dostęp do wyjścia konsoli dla logów RT Thread.
Rozmiar programu (ograniczenie zewnętrznych bibliotek)
Dopisując w Opcjach projektu w zakładce C/C++ opcję
1 | --info=sizes |
Przy kompilacji pokazuje się rozmiar zajęty przez kod i dane. Rozmiar wyraźnie zwiększy się, gdy dodamy string.h, albo stdio.h i użyjemy wbudowanych tam funkcji zamiast tych z biblioteki rt_.