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文章
1608瀏覽量
82060 -
uart
+關注
關注
22文章
1305瀏覽量
106187 -
函數
+關注
關注
3文章
4409瀏覽量
66983 -
編譯器
+關注
關注
1文章
1670瀏覽量
51138
原文標題: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中的重定向
評論