18.8
UART在5.2.0版本E2S中的重定向
18.8.1
重定向失效原因
隨著FSP庫版本更新到5.2.0,在開發(fā)過程中就會發(fā)現(xiàn)4.0.0版本的串口重定義并不適用于最新版本。繼續(xù)使用原來的重定向代碼時(shí),編譯器就會報(bào)錯(cuò)。根據(jù)報(bào)錯(cuò)的信息發(fā)現(xiàn),缺少了幾個(gè)函數(shù)的定義,這里補(bǔ)全定義即可。

圖19-20 串口重定義編譯器報(bào)錯(cuò)
18.8.2
重定向代碼
Uart重定向函數(shù)函數(shù)的內(nèi)容修改成如下所示。
列表11:代碼清單19-10:Uart重定向函數(shù)
左右滑動查看完整內(nèi)容
#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 函數(shù) */ 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重定向頭文件
左右滑動查看完整內(nèi)容
#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
補(bǔ)全缺失函數(shù)如下所示。
列表13:代碼清單19-12:補(bǔ)全缺失函數(shù)
左右滑動查看完整內(nèi)容
/*函數(shù)聲明防止編譯器警告*/
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
下載驗(yàn)證
保證開發(fā)板相關(guān)硬件連接正確,用Type-CUSB線連接開發(fā)板“USBTOUART”接口跟電腦。本次實(shí)驗(yàn)需要使用到串口調(diào)試助手,配置好串口參數(shù)并打開串口后,在調(diào)試助手的發(fā)送區(qū)域輸入任意字符并點(diǎn)擊發(fā)送,即可在接收區(qū)看見相同字符,如圖19_17。

圖19-21 實(shí)驗(yàn)1下載驗(yàn)證
-
串口
+關(guān)注
關(guān)注
15文章
1603瀏覽量
81680 -
uart
+關(guān)注
關(guān)注
22文章
1295瀏覽量
105925 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4404瀏覽量
66626 -
編譯器
+關(guān)注
關(guān)注
1文章
1666瀏覽量
51007
原文標(biāo)題:UART在5.2.0版本E2S中的重定向——瑞薩RA系列FSP庫開發(fā)實(shí)戰(zhàn)指南(50)
文章出處:【微信號:瑞薩嵌入式小百科,微信公眾號:瑞薩嵌入式小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
STM8S如何在STVD環(huán)境下重定向printf函數(shù)實(shí)現(xiàn)UART簡化輸出?
芯海通用 MCU應(yīng)用筆記 :在 IAR 及 MDK 開發(fā)環(huán)境下使用 printf 函數(shù)重定向移植差異指南
【RA-Eco-RA4E2-64PIN-V1.0開發(fā)板試用】02、UART串口通信
【RA4E2開發(fā)板評測】FSP5.2之后的串口重定向問題解決方法
stm32系列單片機(jī)之printf重定向
請問S3C2440為什么在重定向時(shí)要注釋掉u-boot自帶的重定向代碼呢?
如何將輸出重定向到一個(gè)不同的UART
實(shí)現(xiàn)printf函數(shù)的重定向
使用printf()函數(shù)時(shí)默認(rèn)UART0輸出,請教如何重定向printf()到UART1?
STM32 hal_printf重定向操作
Keil下使用STlink重定向printf的配置
Linux I/O重定向詳解
如何實(shí)現(xiàn)Printf()接口重定向到UART

UART在5.2.0版本E2S中的重定向
評論