您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

嵌入式开发:创建和使用可移植类型的7个技巧

时间:2022-08-01 15:43:01  来源:  作者:粤嵌教育

对于嵌入式开发人员来说,编写可重用、可移植且经得起时间考验的软件至关重要。下面是在C中创建和使用可移植类型的7个技巧。

技巧1 – 使用stdint.h

使用内置数据类型会导致不同编译器之间的可移植性问题。C标准没有指定整数的存储大小,这导致一些编译器供应商使用2或4个字节来存储整数,结果可能是灾难性的。

使用内置数据类型的安全替代方法是使用stdint.h固定宽度整数。这些数据类型uint8_t、int8_t、uint16_t、int16_t、uint32_t和int32_t指定存储数据所需的存储位数。移植这些数据类型中的任何一种都会在任何编译器中导致相同的行为,并且不会导致四个字节的存储突然变成两个字节。

技巧2 – 使用stdbool.h

开发人员有时可能会决定他们想要一种可以存储简单的真或假值的数据类型。通过包含stdbool.h,可以将标准布尔数据类型及其真或假定义引入到项目中。

提示3 – 不要自定义定义 TRUE、FALSE、bool

在上一个技巧中,推荐使用标准库文件 stdbool.h。一些嵌入式开发人员可能没有意识到 stdbool 的存在,或者可能决定不使用它。相反,他们自定义定义 bool、true 和 false。这样做的问题是,当移植具有自定义版本的代码时,可能会发生不匹配,即尝试重新定义 true、false 和 bool 并且编译器会抱怨。不要创建自己的版本,只需遵循技巧2。

技巧4 – 远离自定义整数类型

使用 typedef 创建简洁明了的类型名称是编写嵌入式软件的好方法。当开发人员开始定义看起来非常接近标准整数类型的非标准整数类型时,问题就出现了。例如,取下面的自定义类型

typedef volatile uint16_t vuint16_t;

在软件中看到 vuint16_t 会令人困惑。v是什么? 混淆 volatile 关键字可能很危险! 不应该强迫开发人员编写 volatile 以便阅读代码的开发人员知道该变量是 volatile 吗? 读取 vuint16_t 很容易被误读为 uint16_t 或更糟糕的是,嵌入式开发人员可能会意外键入 uint16_t 并完全错过 v。

坚持使用标准类型,并在任何阅读或维护代码的人面前直接使用 volatile 等重要关键字。

技巧5 – 自定义类型应该有 _t

定义自定义类型时,使用 _t 来匹配固定宽度的整数类型,它简单明了。以以下为例;

typedef enum

{

STATE_1,

STATE_2

}State_t;

很明显,State_t 是一个 typedef。

技巧6 – 使用枚举自定义类型

创建类似于技巧5中所示的自定义数据类型可以大大提高嵌入式软件的可读性和可维护性。在#define 定义上使用枚举有很多优点。enum 的使用易于维护,移植(甚至到 C++)和 enum 将显示在调试器监视窗口中。对枚举进行类型定义的能力是 C 语言中非常强大的工具,因此请明智地使用它!

技巧7 – 不要混淆底层类型

使用 typedef 的危险之一是很容易混淆底层类型。例如,如果新类型未正确命名,则结构的 typedef 可以隐藏数据是结构的事实。嵌入式开发人员应该能够阅读和识别数据的底层类型,而无需搜索文档或源代码。回顾技巧4,用 v 掩盖 volatile 是相同的想法,生成的数据类型需要以简洁明了的方式清楚地表明它所代表的内容



Tags:嵌入式开发   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
嵌入式开发:微服务架构的7大优势
当您想到嵌入式软件架构时,您可能会想到中断、模块以及输入到输出的映射。然而,嵌入式软件通常被设计和部署为单片应用。Monoliths是独立的应用程序,对嵌入式开发人员来说很方...【详细内容】
2023-07-07  Search: 嵌入式开发  点击:(93)  评论:(0)  加入收藏
嵌入式开发中宝藏级别的C语言代码,使用频率高,绝对值得珍藏
在嵌入式开发中,有一些常用的C语言代码片段被认为是宝藏级别的,因为它们在处理底层硬件和优化性能方面非常有用。以下是一些常见的宝藏级别的C语言代码和解释:1.位操作代码://...【详细内容】
2023-07-05  Search: 嵌入式开发  点击:(189)  评论:(0)  加入收藏
嵌入式开发中为什么选择C语言?它有哪些特点?
众所周知,C语言在嵌入式开发中占据着十分重要的地位,为什么嵌入式开发要选择C语言?嵌入式开发的方向可以分为单片机开发、Linx应用开发和现场可编辑逻辑门阵列(FPGA)开发,不同于...【详细内容】
2023-01-03  Search: 嵌入式开发  点击:(252)  评论:(0)  加入收藏
嵌入式开发如何入门?
嵌入式开发需要的基础,今天给大家简单分享一下:1、C语言学习C语言是嵌入式软件开发人员必须掌握的编程语言。作为C语言的初学者,重点要掌握一些基本数据类型、复合数据类型、过...【详细内容】
2022-10-07  Search: 嵌入式开发  点击:(287)  评论:(0)  加入收藏
嵌入式开发:防御性编程可缓解不可预见的问题
在实验室中起作用的东西并不总是在现场起作用,这通常是由于意外的交互和未发现的错误。防御性编程有助于使设计更具弹性,但开发能够处理不可预见情况的嵌入式软件并非易事,这需...【详细内容】
2022-09-08  Search: 嵌入式开发  点击:(356)  评论:(0)  加入收藏
嵌入式开发:提示和技巧——C 语言中要避免的8个保留字
 仅仅因为一个特性是用他们选择的语言提供给程序员的,并不意味着他们应该使用它!在使用C开发嵌入式软件时尤其如此。虽然C为嵌入式开发人员提供了大量不可或缺的工具,但有8个...【详细内容】
2022-08-08  Search: 嵌入式开发  点击:(430)  评论:(0)  加入收藏
嵌入式开发:创建和使用可移植类型的7个技巧
 对于嵌入式开发人员来说,编写可重用、可移植且经得起时间考验的软件至关重要。下面是在C中创建和使用可移植类型的7个技巧。  技巧1 – 使用stdint.h  使用内置数...【详细内容】
2022-08-01  Search: 嵌入式开发  点击:(302)  评论:(0)  加入收藏
NFS在嵌入式开发中安装和使用
nfs在嵌入式开发中的使用场景:1、使用nfs挂载ubuntu服务端目录方便文件传输和程序调试2、uboot启动后,使用nfs读取kernel和挂载rootfs,方便kernel和rootfs调试3、提取eMMC镜像...【详细内容】
2021-06-22  Search: 嵌入式开发  点击:(610)  评论:(0)  加入收藏
嵌入式开发内核编译zImage和uImage的区别
内核编译(make)之后会生成两个文件,一个Image,一个zImage,其中Image为内核映像文件,而zImage为内核的一种映像压缩文件,Image大约为4M,而zImage不到2M。那么uImage又是什么的?它是ub...【详细内容】
2020-07-26  Search: 嵌入式开发  点击:(479)  评论:(0)  加入收藏
▌简易百科推荐
Meta如何将缓存一致性提高到99.99999999%
介绍缓存是一种强大的技术,广泛应用于计算机系统的各个方面,从硬件缓存到操作系统、网络浏览器,尤其是后端开发。对于Meta这样的公司来说,缓存尤为重要,因为它有助于减少延迟、扩...【详细内容】
2024-04-15    dbaplus社群  Tags:Meta   点击:(3)  评论:(0)  加入收藏
SELECT COUNT(*) 会造成全表扫描?回去等通知吧
前言SELECT COUNT(*)会不会导致全表扫描引起慢查询呢?SELECT COUNT(*) FROM SomeTable网上有一种说法,针对无 where_clause 的 COUNT(*),MySQL 是有优化的,优化器会选择成本最小...【详细内容】
2024-04-11  dbaplus社群    Tags:SELECT   点击:(3)  评论:(0)  加入收藏
10年架构师感悟:从问题出发,而非技术
这些感悟并非来自于具体的技术实现,而是关于我在架构设计和实施过程中所体会到的一些软性经验和领悟。我希望通过这些分享,能够激发大家对于架构设计和技术实践的思考,帮助大家...【详细内容】
2024-04-11  dbaplus社群    Tags:架构师   点击:(2)  评论:(0)  加入收藏
Netflix 是如何管理 2.38 亿会员的
作者 | Surabhi Diwan译者 | 明知山策划 | TinaNetflix 高级软件工程师 Surabhi Diwan 在 2023 年旧金山 QCon 大会上发表了题为管理 Netflix 的 2.38 亿会员 的演讲。她在...【详细内容】
2024-04-08    InfoQ  Tags:Netflix   点击:(5)  评论:(0)  加入收藏
即将过时的 5 种软件开发技能!
作者 | Eran Yahav编译 | 言征出品 | 51CTO技术栈(微信号:blog51cto) 时至今日,AI编码工具已经进化到足够强大了吗?这未必好回答,但从2023 年 Stack Overflow 上的调查数据来看,44%...【详细内容】
2024-04-03    51CTO  Tags:软件开发   点击:(9)  评论:(0)  加入收藏
跳转链接代码怎么写?
在网页开发中,跳转链接是一项常见的功能。然而,对于非技术人员来说,编写跳转链接代码可能会显得有些困难。不用担心!我们可以借助外链平台来简化操作,即使没有编程经验,也能轻松实...【详细内容】
2024-03-27  蓝色天纪    Tags:跳转链接   点击:(16)  评论:(0)  加入收藏
中台亡了,问题到底出在哪里?
曾几何时,中台一度被当做“变革灵药”,嫁接在“前台作战单元”和“后台资源部门”之间,实现企业各业务线的“打通”和全域业务能力集成,提高开发和服务效率。但在中台如火如荼之...【详细内容】
2024-03-27  dbaplus社群    Tags:中台   点击:(14)  评论:(0)  加入收藏
员工写了个比删库更可怕的Bug!
想必大家都听说过删库跑路吧,我之前一直把它当一个段子来看。可万万没想到,就在昨天,我们公司的某位员工,竟然写了一个比删库更可怕的 Bug!给大家分享一下(不是公开处刑),希望朋友们...【详细内容】
2024-03-26  dbaplus社群    Tags:Bug   点击:(9)  评论:(0)  加入收藏
我们一起聊聊什么是正向代理和反向代理
从字面意思上看,代理就是代替处理的意思,一个对象有能力代替另一个对象处理某一件事。代理,这个词在我们的日常生活中也不陌生,比如在购物、旅游等场景中,我们经常会委托别人代替...【详细内容】
2024-03-26  萤火架构  微信公众号  Tags:正向代理   点击:(15)  评论:(0)  加入收藏
看一遍就理解:IO模型详解
前言大家好,我是程序员田螺。今天我们一起来学习IO模型。在本文开始前呢,先问问大家几个问题哈~什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll...【详细内容】
2024-03-26  捡田螺的小男孩  微信公众号  Tags:IO模型   点击:(10)  评论:(0)  加入收藏
站内最新
站内热门
站内头条