BaseFlight printf - FabLabSeoul/WingProject GitHub Wiki
์ด ๊ธ์ MultiWii BaseFlight ์์ค๋ฅผ ๋ถ์ํ ๊ธ์ด๋ค. ์๋ณธ ์์ค๋ https://github.com/multiwii/baseflight ์์ ํ์ธ ํ ์ ์๋ค.
์์ ๋ STM32\stm32vldiscovery_package\Project\Examples\Printf_Baseflight ๊ฒฝ๋ก์ ์๋ค.
Stm32๋ ๋๋ฒ๊น ์ ์ํด, ์์ฒด printf ํจ์๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค. c ํจ์์ printf ๊ธฐ๋ฅ๊ณผ ๊ฑฐ์ ๊ฐ๊ณ , ์๋ฆฌ์ผํต์ ์ผ๋ก stm32์์ pc๋ก ์ ๋ฌ๋๊ฒํ๋ ๊ธฐ๋ฅ์ ๊ฐ์ง๋ค.
BaseFlight ํ๋ก์ ํธ์์๋ ์ด๋ฅผ ์ํด printf.c, printf.h ๋ฅผ ๋ง๋ค์๋ค. ์๋ฆฌ์ผ ํต์ ์ด ๊ฐ๋ฅํ ํ๊ฒฝ์ด๋ผ๋ฉด printf.c,h ์์ค๋ฅผ ๊ฐ์ ธ์ ๊ฑฐ์ ์์ ์์ด ์ฌ์ฉํ ์ ์๋ค.
baseflight์ drv_usart, drv_serial ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ ธ์๋ค๋ฉด USE_LAME_PRINTF๋ฅผ ์ ์ธํ์ง ์๊ณ , ๋ฐ๋ก fputc()
ํจ์๋ฅผ ๋ง๋ค์ด์ ์ฒ๋ฆฌํ ์ ์๋ค. ์๋ ์ฝ๋์ ๋์ค๋ g_mainport ๋ serialPort_t ํ์
์ ์ ์ญ ๋ณ์๋ค. USART1 ํฌํธ๋ฅผ ๊ฐ๋ฅดํค๋ค.
baseflight ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ด printf๋ฅผ ์ฐ๊ณ ์ถ๋ค๋ฉด, USE_LAME_PRINTF ๋ฅผ ์ ์ธํ๊ณ , putc()
๋ฅผ ๊ตฌํํ ํ, init_printf()
ํจ์๋ฅผ ํธ์ถํด ์ด๊ธฐํ ํด์ฃผ์ด์ผ ํ๋ค.
#include <stdio.h>
#ifndef __CC_ARM
// only need this garbage on gcc
#define USE_LAME_PRINTF
#include "printf.h"
#endif
#ifdef USE_LAME_PRINTF
// gcc/GNU version
static void _putc(void *p, char c)
{
(void)p;
serialWrite(g_mainport, c);
}
#else
// keil/armcc version
int fputc(int c, FILE *f)
{
// let DMA catch up a bit when using set or dump, we're too fast.
while (!isSerialTransmitBufferEmpty(g_mainport));
serialWrite(g_mainport, c);
return c;
}
#endif