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:
logview

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_.

 

 

C, STM32