首页 > 新闻详情

太原嵌入式开发比较厉害的培训机构

来源:中公优就业it培训学校太原校区

时间: 2023/9/22 15:18:00

      太原嵌入式开发比较厉害的培训机构 .小编程推荐中公优就业.优就业是中公教育IT培训品牌,致力于培养面向电商及互联网领域的人才,以学员就业为目的,优质就业为宗旨,是一家集网络营销师,ui合计师,SEO优化师,SEM竞价师,社会化媒体运营师,电商运营师,互联网产品经理,网页设计师,Web前端工程师,PHP工程师,Android工程师,IOS工程师,Java工程师,C/C++工程师,软件测试工程师等课程为一体的IT培训机构

  这是一篇好文章,打印这个函数有时候比什么调试工具都有用,内核的prink更加是神器中的神器,但是printf这个函数是怎么和uart驱动联系在一起的,这篇文章会给你解答,点赞,转发,收藏起来需要的时候看看吧。

  今天给大家分享的是IAR下调试信息输出机制之硬件UART外设。

  在嵌入式世界里,输出打印信息是一种非常常用的辅助调试手段,借助打印信息,我们可以比较容易地定位和分析程序问题。在嵌入式应用设计里实现打印信息输出的方式有很多,本系列将以 IAR 环境为例逐一介绍 ARM Cortex-M 内核 MCU 下打印信息输出方法。

  本篇是篇,我们先介绍较常见的输出打印信息方式,即利用 MCU 芯片内的硬件 UART 外设。本篇其实并不是要具体介绍 UART 外设模块使用方法,而是重点分析 IAR 下是如何联系 C 标准头文件 stdio.h 定义的 printf() 函数与 UART 外设底层驱动函数的。

  Note:本文使用的 IAR EWARM 软件版本是 v9.10.2。

  一、打印输出整体框图

  首先,介绍一下打印输出方法整体软硬件框图,硬件上主要是 PC 主机、MCU 目标板、一根连接线(连接线有两种方案:一种是 RS232 串口线、另一种是 TTL 串口转 USB 模块板)。

  软件上 PC 这边需要安装一个串口调试助手软件,然后目标板 MCU 应用程序需要包含打印输出相关代码,当 MCU 程序运行起来后,驱动片内 UART 外设实现打印字符数据 (hello world.) 物理传输,在 PC 上串口调试助手软件里可以看到打印信息。

  上图里的 MCU 应用程序是在 IAR 环境下编译链接的,因此我们的重点就是 stdio.h 头文件里的 printf() 在 IAR 下到底是如何与 UART 外设驱动函数“勾搭”起来的。

  二、C 标准头文件 stdio.h

  熟悉嵌入式工程的朋友应该都知道 stdio.h 头文件并不在用户工程文件夹里,无需我们手动添加该文件进工程目录,该文件是 C 标准定义的头文件,由工具链自动提供。

  stdio.h 是 C 语言为输入输出提供的标准库头文件,其前身是迈克·莱斯克 20 世纪 70 年代编写的“可移植输入输出程序库”。C 语言中的所有输入和输出都由抽象的字节流来完成,对文件的访问也通联的输入或输出流进行。

  stdio.h 原型:https://cplusplus.com/reference/cstdio/

  大部分人学 C 语言一般都是在 Visual Studio / C++ 环境下,在这个环境里 stdio.h 定义的那些函数底层实现都由 Visual Studio 软件直接搞定,我们通常无需关心其实现细节。

  在嵌入式 IAR 环境下,这些标准 C 定义的头文件大部分也都是可以被支持的,我们可以在如下 IAR 软件目录找到它们,当我们在工程代码里加入 #include等语句时,实际上就是添加 IAR 软件目录里的文件进工程编译。

  IAR SystemsEmbedded Workbench 9.10.2arminccstdio.h

  但是 IAR 目录下 stdio.h 文件里定义的诸如 printf() 函数具体实现我们是需要关注的,毕竟是要编译链接生成具体机器码下载进 MCU 运行的,但是 printf() 函数原型在哪呢?我们先留个悬念。

  三、UART 外设驱动函数

  说到 UART 外设驱动函数,这个大家应该再熟悉不过了。我们以恩智浦 i.MXRT1060 型号(ARM Cortex-M7 内核)为例来具体介绍,在其 SDK 包里有相应的 LPUART 驱动文件:

  SDK_2.11.0_EVK-MIMXRT1060devicesMIMXRT1062driversfsl_lpuart.h

  SDK_2.11.0_EVK-MIMXRT1060devicesMIMXRT1062driversfsl_lpuart.c

  这个 LPUART 驱动库里的 LPUART_WriteBlocking() 和 LPUART_ReadBlocking() 函数可以完成用户数据包的发送和接收,其实单纯利用 LPUART_WriteBlocking() 函数也可以实现打印信息输出,只是没有 printf() 函数那样包含格式化输出的强大功能。

  status_t LPUART_Init(LPUART_Type *base, const lpuart_config_t *config, uint32_t srcClock_Hz)

  status_t LPUART_WriteBlocking(LPUART_Type *base, const uint8_t *data, size_t length)

  status_t LPUART_ReadBlocking(LPUART_Type *base, uint8_t *data, size_t length)

优先领取试听课
版权所有:搜学搜课(wwww.soxsok com)