瑞萨RA0单片机连载——实现串口重定向之printf

瑞萨RA0单片机连载——实现串口重定向之printf
2024年11月22日 09:22 电子产品世界

本文引用地址:

1   目的

在单片机的调试中,我们日常的日志输出,通常是通过串口来实现,而通过串口重定向来实现又是常规的操作之一。这次我在前面的基础之上增加了printf 的面向对象的增加这项功能。

2   实现步骤

1.在工程中添加printf.c 函数,并把他加入到libs的分组之中。

2.在工程的设置中,打开Use MincroLIB库。

3.在printf.c中,添加对输入输出的系统头文件的引用,当然由于我需要调用驱动库要添加以及的引用。

4.重写fputc输出,在此函数中,我先查找Log 这个串口的驱动,如果查找到,则使用他的write 进行串口输出,代码如下:

view plaincopy to clipboardprint?

1. int fputc(int ch, FILE *f)

2. {

3. (void)f;

4. struct UartDev *pLogDevice = UartDeviceFind

(“Log”);

5. pLogDevice->Write(pLogDevice, (unsigned

char*)&ch, 1);

6. return ch;

7. }

5.重写scanf 函数,在这个函数中,我也一样先查找以”Log”命名的串口,如果查找到,则使用这个驱动的write 进行输出。其代码如下:

view plaincopy to clipboardprint?

1. int fgetc(FILE *f)

2. {

3. uint8_t ch;

4.

5. (void)f;

6. struct UartDev *pLogDevice = UartDeviceFind

7. /* 启动接收字符 */

8. while(pLogDevice->Read(pLogDevice,

(unsigned char*)&ch, 1) != 1)

9. {}

10. /* 回显 */

11. {

12. fputc(ch, &__stdout);

13.

14. /* 回车之后加换行 */

15. if (ch == ‘r’)

16. {

17. fputc(‘n’, &__stdout);

18. }

19. }

20.

21. return (int)ch;

22. }

6. 驱动设置好后,就可以在工程中使用printf 进行串口输出了。

添加测试代码如下:

view plaincopy to clipboardprint?

1. void led_blink(void)

2. {

3. uint32_t cnt;

4. UartDevicesRegister();

5.

6. LedDevice *pLED = LedGetDevice();

7. if(NULL == pLED)

8. {

9. printf(“Error. There is no LED device!rn”);

10. return;

11. }

12. pLED->Init(pLED);

13.

14. while(1)

15. {

16. cnt++;

17. pLED->On(1);

18. R_BSP_SoftwareDelay(1,BSP_DELAY_

UNITS_SECONDS);

19. pLED->Off (1);

20. R_BSP_SoftwareDelay(1,BSP_DELAY_

UNITS_SECONDS);

21. pLED->On(2);

22. R_BSP_SoftwareDelay(1,BSP_DELAY_

UNITS_SECONDS);

23. pLED->Off (2);

24. R_BSP_SoftwareDelay(1,BSP_DELAY_

UNITS_SECONDS);

25. printf(“run cnt %drn”,cnt);

26.

27. }

28. }

测试结果如下:

3   总结

使用面向对象之编程,可以实现代码的快递移植,当然重写printf 也是非常之简单。

瑞萨
新浪科技公众号
新浪科技公众号

“掌”握科技鲜闻 (微信搜索techsina或扫描左侧二维码关注)

创事记

科学探索

科学大家

苹果汇

众测

专题

官方微博

新浪科技 新浪数码 新浪手机 科学探索 苹果汇 新浪众测

公众号

新浪科技

新浪科技为你带来最新鲜的科技资讯

苹果汇

苹果汇为你带来最新鲜的苹果产品新闻

新浪众测

新酷产品第一时间免费试玩

新浪探索

提供最新的科学家新闻,精彩的震撼图片