当前位置:首页 > 原创 > 振南技术干货集(风云录)
[导读]在实际项目中,我们经常需要提取一个数值的某些位的数码,比如用数码管来显示数值或将一个数值转成字符串,都会涉及到这一操作。

一、取出数值的各位数码

在实际项目中,我们经常需要提取一个数值的某些位的数码,比如用数码管来显示数值或将一个数值转成字符串,都会涉及到这一操作。

那如何实现这一操作呢?虽然这个问题看似很简单,但提出这一问题的人还不在少数。请看下面的函数。

它的主要操作就是除法和取余。这个函数只是取出一个整型数各位的数码,那浮点呢?其实一样的道理,请看下面函数(我们默认整数与小数部分均取4位)。

有人说,我更喜欢用sprintf函数,直接将数值格式化打印到字符串里,各位数码自然就得到了。

没问题。但是在嵌入式平台上使用sprintf函数,通常代价是较大的。作为嵌入式工程师,一定要惜字如金,尤其是在硬件资源相对较为紧张的情况下。sprintf非常强大,我们只是一个简单的提取数值数码或将数值转为相应的字符串的操作,使用它有些暴殄天物。这种时候,我通常选择写一个小函数或者宏来自己实现。

二、printf的实质与使用技巧

上面说到spintf,那我们顺便提一下printf。printf是我们非常熟悉的一个入门级的标准库函数,每当我们说出计算机金句”Hello World!”时,其实无意中就提到了它:printf(“hello world!”);

它可以某种特定的格式、进制或形式输出任何变量、常量和字符串,为我们提供了极大的方便,甚至成为了很多人调试程序时重要的Debug手段。我们并不太了解printf函数的具体实现细节,并认为无需关心这些。但是在嵌入式中,我们就需要剖析一下它的实质了。

printf函数的底层是基于一个fputc的函数,它用于实现单个字符的具体输出方式,比如是将字符显示到显示器上,或是存储到某个数组中(类似sprintf),或者是通过串口发送出去,甚至不是串口,而是以太网、CAN、I2C等接口。

以下是一个STM32项目中fputc函数的实现:

fputc中将ch通过USART1发出。这样,我们在调用printf的时候,相应的信息就会从USART1打印出来。

“上面你说的这些,我都知道,有什么新鲜的!”确实,通过串口打印信息是我们司空见惯的。那么下面的fputc你见过吗?

这个fputc将字符显示在了液晶上(同时维护了字符的显示位置信息),这样当我们调用printf的时候,信息会直接显示在液晶上。

说白了,fputc 就是对数据进行了定向输出。这样我们可以把printf变得更灵活,来应对更多样的应用需求。

在振南经历的项目中,曾经有过这样的情况:单片机有多个串口,串口1用于打印调试信息,串口2与ESP8266 WIFI模块通信,串口3与SIM800 GPRS模块通信。3个串口都需要格式化输出,但是printf只有一个,这该怎么办?我们解决方法是,修改fputc使得printf可以由3个串口分时复用。具体实现如下。

在调用的时候,根据需要将us赋以不同的值,printf就归谁所用了。

声明:该篇文章为本站原创,未经授权不予转载,侵权必究。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭