三、e2studio VS STM32CubeIDE之瑞萨RA FSP5.0.0裸机printf重定向

2023-12-21 01:30

本文主要是介绍三、e2studio VS STM32CubeIDE之瑞萨RA FSP5.0.0裸机printf重定向,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、概述/目的
二、fsp4.6.0之前printf重定向方法
三、fsp5.0.0之后printf重定向方法
    3.1 升级后编译报错
    3.2 分析原因
        3.2.1 newlib和gcc版本
        3.2.2 参考stm32cube ide
    3.3 处理办法
        3.3.1 方法一
        3.3.2 方法二

三、e2studio VS STM32CubeIDE之瑞萨RA FSP5.0.0裸机printf重定向

一、概述/目的

在嵌入式系统中,实现printf函数重定向输入日志,这是优秀代码的前提,或者说是基础。
瑞萨RA升级到fsp5.0.0之后,原fps4.6.0及之前的版本的printf重定向功能编译报错。
所以,我们分析报错的原因和解决办法

二、fsp4.6.0之前printf重定向方法

引用野火瑞萨RA系列FSP19.5.2.6. 重定向printf输出到串口
https://doc.embedfire.com/mcu/renesas/fsp_ra/zh/latest/doc/chapter19/chapter19.html?highlight=printf

  • fsp 4.0.0

  • gcc 10.3

  • --specs=nano.specs

  • -u _printf_float/-u_scanf_float

  • --specs=nosys.specs(disable)

  • --specs=rdimon.specs(disable)

图片

图片

/* 重定向 printf 输出 */
#if defined __GNUC__ && !defined __clang__
int _write(int fd, char *pBuffer, int size); //防止编译警告
int _write(int fd, char *pBuffer, int size)
{(void)fd;R_SCI_UART_Write(&g_uart4_ctrl, (uint8_t *)pBuffer, (uint32_t)size);while(uart_send_complete_flag == false);uart_send_complete_flag = false;return size;
}
#else
int fputc(int ch, FILE *f)
{(void)f;R_SCI_UART_Write(&g_uart4_ctrl, (uint8_t *)&ch, 1);while(uart_send_complete_flag == false);uart_send_complete_flag = false;return ch;
}
#endif

三、fsp5.0.0之后printf重定向方法

3.1 升级后编译报错

图片

图片

3.2 分析原因

  • 差分源码

  • 分析newlib:
    文章:
    嵌入式科普(5)ARM GNU Toolchain相关概念和逻辑
    嵌入式科普(6)你听说过FreeRTOS heap6吗?
     

    图片

    图片

3.2.1 newlib和gcc版本

  • The Red Hat newlib C Library
    https://sourceware.org/newlib/libc.html#sprintf

  • Arm GNU Toolchain
    https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads

    图片

3.2.2 参考stm32cube ide

  • gcc 10.3

  • --specs=nano.specs

  • -u _printf_float/-u_scanf_float

  • --specs=nosys.specs
     

    图片

    图片

3.3 处理办法

  • 测试fsp5.1.0printf重定向

  • gcc 12.2
     

    图片

    图片

3.3.1 方法一

  • --specs=nosys.specs

  • 可用,但有警告
     

    图片

    图片

3.3.2 方法二

  • 增加syscall.c解决警告

    图片

    图片

  • 解决未定义警告

    图片

  • bsp_sbrk.c文件

    图片

  • 完美解决,新旧兼容
    源码整理:printf重定向、syscall函数声明、例程ra6m5_log

//fsp5.0.0
#ifdef __GNUC__
int __io_putchar(int ch);
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
int fputc(int ch, FILE *f);
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE
{fsp_err_t err = R_SCI_UART_Write(&g_uart0_ctrl, (uint8_t *)ch, 1);if(FSP_SUCCESS != err) __BKPT();while(uart_send_complete_flag == false);uart_send_complete_flag = false;return ch;
}
#if 1
void initialise_monitor_handles();
int _getpid(void);
int _getpid(void);
int _kill(int pid, int sig);
void _exit (int status);
__attribute__((weak)) int _read(int file, char *ptr, int len);
__attribute__((weak)) int _write(int file, char *ptr, int len);
int _close(int file);
int _fstat(int file, struct stat *st);
int _isatty(int file);
int _lseek(int file, int ptr, int dir);
int _open(char *path, int flags, ...);
int _wait(int *status);
int _unlink(char *name);
int _times(struct tms *buf);
int _stat(char *file, struct stat *st);
int _link(char *old, char *new);
int _fork(void);
int _execve(char *name, char **argv, char **env);
#endif

这篇关于三、e2studio VS STM32CubeIDE之瑞萨RA FSP5.0.0裸机printf重定向的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/518217

相关文章

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

【vue3|第28期】 Vue3 + Vue Router:探索路由重定向的使用与作用

日期:2024年9月8日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉在这里插入代码片得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^ - ^ 1.01365 = 37.7834;0.99365 = 0.0255 1.02365 = 1377.4083;0.98365 = 0.0006 说

VS Code 调试go程序的相关配置说明

用 VS code 调试Go程序需要在.vscode/launch.json文件中增加如下配置:  // launch.json{// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information,

在struts.xml中,如何配置请求转发和请求重定向!

<span style="font-size:18px;"><span style="white-space:pre"> </span><!--<strong>下面用请求转发action </strong>,<strong>这样过去id不会丢</strong>,如果用重定向的话,id会丢 --><result name="updatePopedom"<span style="color:#ff00

请解释JSP中的九大内置对象及其作用。什么是Java Web中的请求转发和重定向?它们有什么区别?

请解释JSP中的九大内置对象及其作用。 JSP(JavaServer Pages)中的九大内置对象(也称为隐式对象或自动对象)是JSP容器为每个页面提供的Java对象,这些对象在JSP页面被转换成Servlet时自动可用,无需显式声明。这些对象极大地简化了JSP页面的开发,因为它们提供了对Web应用程序中常见功能的直接访问。以下是九大内置对象及其作用的详细解释: request:javax.

解决服务器VS Code中Jupyter突然崩溃的问题

问题 本来在服务器Anaconda的Python环境里装其他的包,装完了想在Jupyter里写代码验证一下有没有装好,一运行发现Jupyter崩溃了!?报错如下所示 Failed to start the Kernel. ImportError: /home/hujh/anaconda3/envs/mia/lib/python3.12/lib-dynload/_sqlite3.cpython-

VSC++: 括号对称比较

括号的使用规则:大括号,中括号,小括号{[()]};中括号,小括号[()];小括号();大括号、中括号、小括号、中括号、小括号、大括号{[()][()]};大括号,中括号,小括号,小括号{[(())]};大括号,中括号,小括号,小括号{[()()]};小括号不能嵌套,小括号可连续使用。 {[]}、{()}、([])、({})、[{}]、{}、[]、{[}]、[(])都属非法。 char aa[

Apache Kylin VS Apache Doris全方位对比

1 系统架构 1.1 What is Kylin1.2 What is Doris2 数据模型 2.1 Kylin的聚合模型2.2 Doris的聚合模型2.3 Kylin Cuboid VS Doris RollUp2.4 Doris的明细模型3 存储引擎4 数据导入5 查询6 精确去重7 元数据8 高性能9 高可用10 可维护性 10.1 部署10.2 运维10.3 客服11 易用性 11.1

vs环境下C++dll生成和使用

动态库和静态库: 动态库:全名动态链接库,用于将你的函数封装,让别人只能调用,不能看你的实现代码。由引入库和dll组成:引入库包含导出的函数和变量名,dll包含实际的函数和数据,运行时加载访问dll文件。  Windows API中的所有函数都封装在dll里面,最重要的三个: Kernel32.dll:包含管理内存、进程和线程的各个函数。User32.dll:包含用于执行用户界面任务,如窗口和

VS Code与SVN关联

VS Code是一款轻量级的集成开发环境,可通过安装插件与SVN进行关联。以下是将VS Code与SVN关联的步骤: 安装SVN插件:在VS Code中打开Extensions(快捷键:Ctrl+Shift+X),搜索并安装"svn"插件。 安装SVN命令行工具:在计算机上安装SVN命令行工具,确保在命令行中可以运行svn命令。 配置SVN路径:在VS Code中打开用户设置(快捷键:Ct