目录

前言

格式化函数

实验程序编写

stdio文件夹

main.c

Makefile修改

编译下载


前言

在学习实验12:imx6ull串口通信实验,我们实现了 UART1 基本的数据收发功能,虽然可以用来调试程序,但是功能太单一了,只能输出字符。

本讲实验我们就来学习如何将 printf 这样的格式化函数,移植到正点原子 I.MX6U-ALPHA 开发板上。

格式化函数

格式化函数说的是 printf、 sprintf 和 scanf 这样的函数,分为格式化输入和格式化输出两类函数。

我们刚开始学习 C 语言的时候,常常通过 printf 函数在屏幕上显示字符串,通过 scanf 函数从键盘获取输入。

在 I.MX6U-ALPHA 开发板上也可以,将 printf 和 scanf 映射到串口上,这样就可以使用 MobaXterm 作为开发板的终端, 完成与开发板的交互。

也可以使用 printf 和 sprintf 来实现各种各样的格式化字符串,方便我们后续的开发。

实验程序编写

stdio文件夹

在正点原子提供的源码资料里,有一个文件夹 stdio ,里面的文件就是我们要移植的源码文件。

stdio 里面有两个文件夹: include 和 lib,这两个文件夹里面的内容如图:

stdio 里面的文件其实是从 uboot 里面移植过来的,但stdio 中并没有实现完全版的格式化函数,比如 printf 函数并不支持浮点数。

main.c

移植好以后就要测试相应的函数工作是否正常,我们使用 scanf 函数等待键盘输入两个整数,然后将两个整数进行相加并使用 printf 函数输出结果。

int main(void)
{unsigned char state = OFF;int a , b;int_init(); 				/* 初始化中断(一定要最先调用!) */imx6u_clkinit();			/* 初始化系统时钟 			*/delay_init();				/* 初始化延时 			*/clk_enable();				/* 使能所有的时钟 			*/led_init();					/* 初始化led 			*/beep_init();				/* 初始化beep	 		*/uart_init();				/* 初始化串口,波特率115200 */while(1)					{	printf("输入两个整数,使用空格隔开:");scanf("%d %d", &a, &b);					 		/* 输入两个整数 */printf("\r\n数据%d + %d = %d\r\n\r\n", a, b, a+b);	/* 输出两个数相加的和 */state = !state;led_switch(LED0,state);}return 0;
}

Makefile修改

修改 Makefile 中的 TARGET 为 printf,在 INCDIRS 中加入“stdio/include”,在 SRCDIRS中加入“stdio/lib”,

在编译 C 文件的时候添加了选项“-Wa,-mimplicit-it=thumb”

否则的话会有如下类似的错误提示:

thumb conditional instruction should be in IT block -- `addcs r5,r5,#65536'

编译下载

使用 Make 命令编译代码,编译成功以后使用软件 imxdownload 将编译完成的 printf.bin 文件下载到 SD 卡中,命令如下:

烧写成功以后将 SD 卡插到开发板的 SD 卡槽中,打开 MobaXterm,设置好连接,然后复位开发板。

根据提示,输入两个整数,使用空格隔开,输入完成以后按下“回车键”,

本讲实验到此结束啦,是不是很简单~

我们下次见,比心~
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/88479.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/88479.shtml
英文地址,请注明出处:http://en.pswp.cn/web/88479.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CCF-GESP 等级考试 2025年6月认证C++三级真题解析

1 单选题(每题 2 分,共 30 分)第1题 8位二进制原码能表示的最小整数是:( )A. -127 B. -128 C. -255 …

【网络安全】服务间身份认证与授权模式

未经许可,不得转载。 文章目录 问题背景用户到服务的身份认证与授权系统对系统的通信服务与服务之间的通信需求分析Basic Auth(基本身份认证)优点缺点mTLS 证书认证优点缺点OAuth 2.0优点缺点JWS(JSON Web Signature)优点缺点结合 Open Policy Agent 的 JWS 方案优点缺点结…

【EGSR2025】材质+扩散模型+神经网络相关论文整理随笔(四)

An evaluation of SVBRDF Prediction from Generative Image Models for Appearance Modeling of 3D Scenes输入3D场景的几何和一张参考图像,通过扩散模型和SVBRDF预测器获取多视角的材质maps,这些maps最终合并成场景的纹理地图集,并支持在任…

Grid网格布局完整功能介绍和示例演示

CSS Grid布局是一种强大的二维布局系统,可以将页面划分为行和列,精确控制元素的位置和大小。以下是其完整功能介绍和示例演示: 基本概念 网格容器(Grid Container):应用display: grid的元素。网格项&#x…

学习C++、QT---21(QT中QFile库的QFile读取文件、写入文件的讲解)

每日一言把大目标拆成小步,每天前进一点点,终会抵达终点。QFile读取文件我们记事本要进行读取文件、写入文件、等等的操作,那么这个时候我们的QT有一个QT类叫做QFile这个类的话是专门对于文件操作的,所以我们来学习我们在QT的帮助…

AD736ARZ-R7精密真有效值转换器 高精度测量的首选方案

AD736ARZ-R7精密转换器产品概述AD736ARZ-R7是ADI(Analog Devices Inc.)推出的一款低功耗、高精度的真有效值(RMS)转直流(DC)转换器,采用SOIC-8封装,适用于需要精确测量交流或复杂波形…

【web应用】若依框架前端报表制作与导出全攻略(ECharts + html2canvas + jsPDF)

文章目录前言一、ECharts准备工作1. 检查ECharts安装2. 导入ECharts3. 创建饼图组件4. 模板部分二、报表导出功能实现1. 安装依赖2. 导入依赖3. 完整导出函数实现4. 样式优化三、完整组件实现四、常见问题与解决方案1. 图表截图不完整或模糊2. 图表背景透明3. 导出PDF中文乱码4…

vue3+express联调接口时报“\“username\“ is required“问题

我用node .js的express框架写的登录接口,发现postman可以调通,但是vue3前端报错vue3我发现是我后端node.js的app.js入口文件中配置的解析前端参数的解析中间件和前端请求头中的Content-Type配置不一致的原因 解决方案 因为我后端配置解析表单数据的中间件…

《月亮与六便士》:天才的背叛与凡人救赎的残酷辩证法

当满地六便士成了庸人的火葬场​​毛姆笔下的斯特里克兰德,是一把捅穿中产幻梦的利刃。这个抛妻弃子、背叛友人的证券经纪人,在伦敦客厅的茶香与银勺碰撞声中,突然听见了远方的惊雷——“我必须画画”。如书中所言:​​“在满地都…

vue2往vue3升级需要注意的点(个人建议非必要别直接升级)

将 Vue 2 项目升级到 Vue 3 的过程中,需要重点关注以下几个难点和关键点: 建议小项目直接用vue3重写更快,bug更少 文章目录1. **Composition API 的学习与应用**2. **全局 API 的变更**3. **模板语法的兼容性变化**4. **组件选项和生命周期的…

聚焦数据资源建设与应用,浙江省质科院赴景联文科技调研交流

7月10日上午,浙江省质科院标准化中心副主任蒋建平、应珊婷等一行领导带队莅临景联文科技调研指导工作。双方围绕工业数据展开深度交流。座谈会上,景联文科技详细汇报了数据资源建设与应用方面的成果与规划,介绍了公共数据授权运营与对外合作的…

【Linux】系统引导修复

目录 开机引导过程 一.通电 二.BIOS环境检测 三.磁盘引导阶段 四.文件引导阶段 自动引导配置文件丢失修复 内核参数文件丢失修复 内核镜像文件丢失修复 内核初始化文件丢失修复 boot目录误删丢失修复 开机引导过程 磁盘引导阶段 /boot/grub2/grub.cfg #读取自动引…

2023年全国青少年信息素养大赛C++编程初中组决赛真题+答案解析

2023年全国青少年信息素养大赛C++编程初中组决赛真题+答案解析 编程题 第一题 判断是否存在重复的子序列 题目描述 从m 个字符中选取字符,生成n 个符号的序列,使得其中没有2 个相邻的子序列相同。 如从1,2,3,生成长度为5 的序列,序列“12321”是合格的,而“12323”和“12123”…

MySQL5.78.0锁表确认及解除锁表完全指南

目录 一、MySQL锁机制基础 1.1 锁的分类与作用 1.2 关键锁类型详解 二、锁表的常见原因与风险 2.1 引发锁表的典型场景 2.2 锁表的业务影响 三、锁表状态确认方法 3.1 基础工具:SHOW PROCESSLIST 3.2 MySQL 8.0锁信息查询(推荐) 3.2…

springboot生成pdf方案之dot/html/图片转pdf三种方式

文章目录pdf生成方案dot转pdfhtml转pdfopenhtmltopdfaspose-pdf实践playwright实践图片转pdfApache PDFBox实践框架场景匹配后记前言:随着客户对报告审美的提升,需求也越来越五彩斑斓~ 原有的dot模板已经满足不了他们了!这篇文章主打列出各种…

前端开发—全栈开发

全栈开发者在面试前端或全栈岗位时,自我介绍需要巧妙融合“技术广度”与“岗位针对性”,避免成为泛泛而谈的“样样通样样松”。以下是结合面试官关注点和全栈特性的专业介绍策略:🧠 一、自我介绍的核心理念 突出全栈优势&#xff…

Redis生产环境过期策略配置指南:务实落地,避免踩坑

在生产环境中合理配置Redis过期策略是保障系统稳定性和内存效率的关键。以下配置建议基于实战经验,避免理论堆砌,直击核心要点:一、核心策略配置:惰性删除 定期删除(默认已启用)无需额外配置:R…

Ubuntu 20.04 安装 Node.js 20.x、npm、cnpm 和 pnpm 完整指南

🌐 Ubuntu 20.04 安装 Node.js 20.x、npm、cnpm 和 pnpm 完整指南 🚀 在本文中,我们将介绍如何在 Ubuntu 20.04 上安装 Node.js 20.x,以及如何安装 npm、cnpm 和 pnpm 来提高开发效率 ⚡。1️⃣ 安装 Node.js 20.x 为了确保使用最…

【时时三省】(C语言基础)通过指针引用数组元素

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省引用一个数组元素,可以用下面两种方法:( 1 )下标法,如a[i]形式;( 2 )指针法,如* ( a i )或* ( p i )。其中a是数组名,p…

Guava LoadingCache

LoadingCache 是 Google Guava 库提供的一个高级缓存实现,它通过自动加载机制简化了缓存使用模式。核心特性自动加载机制当缓存未命中时,自动调用指定的 CacheLoader 加载数据线程安全:并发请求下,相同key只会加载一次灵活的过期策…