当前位置:首页 > 原创 > 振南技术干货集(风云录)
[导读]memcpy函数的功能是用来作内存搬运,就是将数据从一个数组赋值到另一个数组。它的实现很简单:

memcpy的效率

memcpy函数的功能是用来作内存搬运,就是将数据从一个数组赋值到另一个数组。它的实现很简单:

但是这种实现方式,其实是比较肤浅而低效的。作为嵌入式或硬件工程师,如果对上面的代码看不出什么问题的话,那可能要好好找找自身的原因。

上面的代码,对CPU数据总线带宽的利用率不高,我们把它改成这样:

改进后的代码最大限度的利用了CPU数据总线带宽,每次传输多个字节(如32位平台为4字节)。这一实例告诉我们:C语言,尤其是嵌入式C语言很多时候需要考虑硬件层面的因素,如CPU总线、内存结构等。

[]的本质

当我们想取出一个数组中的某个元素时,我们会用到[],采用下标的方式。如下例:

int a[3]={1,2,3};

a[1]; //数组a的第2个元素

其实我们可以用其它方式取出这个元素,即*(a+1)。可以看到[]与*,在功能上有相似之处。其实[]并不限于与数组搭配访问数组元素,它的实质是:访问以指针所指向的地址为开始地址,以其下标为偏移量的存储单元中的数据,如图2.12所示。

图2.12 []的实质其实就是所谓的“基址偏移量取值”

上图可能颠覆了一些人对[]的认识,下标还能是负数?[]可以在一个开始地址后面去取数据,为什么不能在它前面取数据呢?我们可以理解[]是对指针加减和取值操作的综合。

认清了[]的实质,再加上对C语言的精髓--指针深刻的理解,我们编程将会非常灵活,肆意挥洒。

#与##(串化与连接)

C语言中的#与##可能很多人都不了解,更没有用过,因为在一般的教材上都没有对它们的介绍。但是把它们用好了,也能使我们的代码别有一番格调。

串化,在宏定义中#可以将宏参数转换为字符串,即在宏参数的开头和末尾添加引号。似乎有些鸡肋,但是如果看到别人的代码有用到串化的时候,我们需要能够看懂。

再来看一下连接符##,它用来将参数和其它的内容连接起来,如下例:

#define CON1(a, b) a##e##b#define CON2(a, b) a##b##00

printf("%f\n", CON1(8.5, 2));printf("%d\n", CON2(12, 34));

printf("%f\n", 8.5e2); //展开后的效果

printf("%d\n", 123400); //展开后的效果

我在很多ARM官方评估板的配套代码中看到过大量串化与连接的应用,当时我并不知道C语言还有串化连接这些东西(虽然我已经用C语言有十几年了),所以有些看不明白。通过百度学习了一下#与##,这才懂了。所以,C语言学得多精都不为过,很多知识我们可能一辈子都不会用到,但是不代表我们可以不知道,因为别人在用。

OK,关于C语言方面的一些常见问题、非常规操作以及认知误区振南就讲这么多。C语言其实是博大精深,还是那句话:“学得多精都不为过!”我一直把嵌入式工程师比喻成“能与硬件对话的灵媒”,我们所使用的语言就是C语言。我们自认为对C语言已经足够了解了,足够精通了,但是我们又会发现在实际开发过程中,会遇到很多新的问题,很多问题是与C语言本身相关的。

所以记住:“学海无涯!” 有C语言方面的问题,欢迎与振南来沟通交流,我自己也在不断学习的过程中。

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

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 隧道灯 驱动电源
关闭