18.8
UART在5.2.0版本E2S中的重定向
18.8.1
重定向失效原因
随着FSP库版本更新到5.2.0,在开发过程中就会发现4.0.0版本的串口重定义并不适用于最新版本。继续使用原来的重定向代码时,编译器就会报错。根据报错的信息发现,缺少了几个函数的定义,这里补全定义即可。

图19-20 串口重定义编译器报错
18.8.2
重定向代码
Uart重定向函数函数的内容修改成如下所示。
列表11:代码清单19-10:Uart重定向函数
左右滑动查看完整内容
#ifdefined __GNUC__ && !defined __clang__ int_write(intfd,char*pBuffer,intsize);//防止编译警告 int_read(intfd,char*pBuffer,intsize); /* 重定向 printf 输出 */ int_write(intfd,char*pBuffer,intsize) { (void) fd; R_SCI_UART_Write(&g_uart0_ctrl, (uint8_t*) pBuffer, (uint32_t) size); while(uart_send_complete_flag ==false) ; uart_send_complete_flag =false; returnsize; } /* 重定向 scanf 函数 */ int_read(intfd,char*pBuffer,intsize) { (void) fd; R_SCI_UART_Read(&g_uart0_ctrl, (uint8_t*) pBuffer, (uint32_t) size); while(uart_receive_complete_flag ==false) ; uart_receive_complete_flag =false; /* 回显 */ R_SCI_UART_Write(&g_uart0_ctrl, (uint8_t*) pBuffer, (uint32_t) size); returnsize; } #else intfputc(intch, FILE *f) { (void)f; R_SCI_UART_Write(&g_uart0_ctrl, (uint8_t*)&ch,1); while(uart_send_complete_flag ==false); uart_send_complete_flag =false; returnch; } #endif
Uart重定向头文件修改如下所示。
列表12:代码清单19-11:Uart重定向头文件
左右滑动查看完整内容
#ifndef__BSP_DEBUG_UART_H #define__BSP_DEBUG_UART_H #include"hal_data.h" #include"stdio.h" #include#include #include voidDebug_UART0_Init(void); #endif
补全缺失函数如下所示。
列表13:代码清单19-12:补全缺失函数
左右滑动查看完整内容
/*函数声明防止编译器警告*/
int_isatty(intfd);
int_close(intfd);
int_lseek(intfd,intptr,intdir);
int_fstat(intfd, structstat*st);
__attribute__((weak))int_isatty(intfd)
{
if(fd>= STDIN_FILENO && fd<= STDERR_FILENO)
return1;
errno = EBADF;
return0;
}
__attribute__((weak)) int _close(int fd)
{
if (fd >= STDIN_FILENO && fd <= STDERR_FILENO)
return0;
errno = EBADF;
return-1;
}
__attribute__((weak)) int _lseek(int fd, int ptr, int dir)
{
(void) fd;
(void) ptr;
(void) dir;
errno = EBADF;
return-1;
}
__attribute__((weak)) int _fstat(int fd, struct stat *st)
{
if (fd >= STDIN_FILENO && fd <= STDERR_FILENO)
{
st->st_mode = S_IFCHR;
return0;
}
errno = EBADF;
return0;
}
18.8.3
下载验证
保证开发板相关硬件连接正确,用Type-CUSB线连接开发板“USBTOUART”接口跟电脑。本次实验需要使用到串口调试助手,配置好串口参数并打开串口后,在调试助手的发送区域输入任意字符并点击发送,即可在接收区看见相同字符,如图19_17。

图19-21 实验1下载验证
-
串口
+关注
关注
15文章
1607浏览量
82041 -
uart
+关注
关注
22文章
1304浏览量
106174 -
函数
+关注
关注
3文章
4408浏览量
66967 -
编译器
+关注
关注
1文章
1670浏览量
51127
原文标题:UART在5.2.0版本E2S中的重定向——瑞萨RA系列FSP库开发实战指南(50)
文章出处:【微信号:瑞萨嵌入式小百科,微信公众号:瑞萨嵌入式小百科】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
STM8S如何在STVD环境下重定向printf函数实现UART简化输出?
芯海通用 MCU应用笔记 :在 IAR 及 MDK 开发环境下使用 printf 函数重定向移植差异指南
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】02、UART串口通信
【RA4E2开发板评测】FSP5.2之后的串口重定向问题解决方法
stm32系列单片机之printf重定向
请问S3C2440为什么在重定向时要注释掉u-boot自带的重定向代码呢?
如何将输出重定向到一个不同的UART
实现printf函数的重定向
使用printf()函数时默认UART0输出,请教如何重定向printf()到UART1?
STM32 hal_printf重定向操作
Keil下使用STlink重定向printf的配置
Linux I/O重定向详解
如何实现Printf()接口重定向到UART

UART在5.2.0版本E2S中的重定向
评论