Eclipse搭建stm32+jlink开发环境全攻略(高级篇)

Eclipse搭建stm32+jlink开发环境全攻略

高级篇

一、问题概况

通过初级篇的学习,我们知道了一个Eclipse工程的配置以及调试,貌似使用也没什么问题,然而。当我们抛弃掉Eclipse自带的工程模版是,也抛弃的他的一些其他的功能,比如c库函数的支持。所以,如果我们按照这初级篇的内容建立一个工程,我们会发现,当我们使用了printf等C库的函数时,工程编译会报错。

这是没有加入printf是的编译情况,没有任何错误

而这个图就是加上了printf后编译的情况,当然stdio.h还是要加上去的,

可以看到,只要加上了printf后编译就会出问题。

二、问题分析

为了解决这个问题,我们先探索一下这个问题产生的原因。众所周知,printf调用的是标准的C库函数,那么我们搭建的GNU环境是否有C库呢?通过查阅GNU ARM ToolChain官网,我们可以知道,gun工具链支持C库,默认的是newlib库。

那么,什么是newlib?摘录一段百度百科的介绍,当然这段介绍是对newlib引文手册的一段翻译,英文可以的同学可以看看英文的。

既然我们搭建的环境中存在了C支持库,那么为什么还会编译错误呢?我们接着看。

什么意思?就是说我们的newlib是存在了,但是newlib的20个桩函数还没有实现,即只是存在newlib,但是还没有移植。为什么gnu不帮我们移植好呢?正如上面介绍的那样,这20个桩函数是与运行的平台息息相关的,也就是说,如果我用的是51,可能这些函数是一种实现方式,如果我用的STM32,可能是另外一种形式(举个例子而已,并不准确)。所以我们现在的工作就是要把newlib没有完成的工作完成就可以了,即实现20个桩函数。

难道真的要我们自己写吗?不会写啊!不用担心,如果真的要我们自己写,那么这个教程的实用性就太低了。

通过上面的教程我们可以知道,我们的文件都是通过st官方中的TrueSTUDIO编译器的文件提取过来的,但是遗憾的是标准库中对TrueSTUDIO没有一个完整的范例,所以有一些文件其实是缺失的。而且标准库也很久没有更新了,但是st官方还有一个hal库,这个库是标准库的升级版,我们可以从hal库中得到我们想要的东西。

下载官方stm32f1的hal库,全文件夹下搜索一下syscalls,我们就可以搜到我们想要的syscalls.c文件,比如在STM32Cube_FW_F1_V1.4.0\Projects\STM32F103RB-Nucleo\Examples\UART\UART_Printf\TrueSTUDIO文件夹下就有一个syscalls.c,打开这个文件

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值