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下载验证



