物联网创客指南:MCU设计的最佳实践和除错技巧

发布者:楼高峰最新更新时间:2017-04-25 关键字:物联网  嵌入式 手机看文章 扫描二维码
随时随地手机看文章

在本节中,SiliconLabs将分享在软件开发方面的经验教训。关键词extern,staTIc和volaTIle都是什么?你应该在你的代码中使用递归还是malloc()?下面就随网络通信小编一起来了解一下相关内容吧。

1)查找硬件设备的现有软件示例

开发任何嵌入式解决方案的第一步是找到可以使您的任务更简单的示例。您在自定义解决方案中找到的特定部分的软件示例将帮助您以另一种方式“查看”设备,并帮助您重新解释设备规格,即使这些示例是针对其他计算机架构或软件语言的。

2)编译器的代码

没有完美的计算机软件语言。所有语言都有自己的优势和弱点。用于EFM32家族的Simplicity Studio中使用的软件语言是C。C语言有着很长的历史,它被广泛信任,并且在嵌入式设计上表现良好,但是其语法及特性很难掌握。当你在C中编码时,你实际上是为编译器和其他构建工具编写指令。记住这一点。C语言是“接近金属”的语言,因为您的代码在人类可读格式下编写的代码,汇编代码和二进制映像的构建过程的结果之间仅有几个步骤。

C代码具有严格的类型,要求某些变量匹配得足够好以执行安全赋值。这是为了保护你不要做愚蠢的事情,比如变量(即指针)的地址和变量的内容。但是经常在嵌入式开发中,您需要能够将纯数字转换为地址,以便指定寄存器地址。这需要你熟悉类型转换,以告诉编译器你真的知道你在做什么。

3)使用描述性变量和函数名称

你可以做的最好的事情是确保你的代码设计得很好,使用描述性的变量和函数名。在C代码中没有与长名称关联的运行性能损失。当构建工具将C代码转换为二进制机器码时,将删除所有标识符。请考虑在FAT文件系统(FF)库中找到的以下代码段:

上面的代码有一些注释,这当然有帮助,是一件非常好的事情,但是很难通过查看变量,函数,枚举和预处理符号知道这个代码的确切原因。考虑使用以下代码作为替代:

是的,代码有点宽,难以键入,但Simplicity Studio提供代码完成与CTRL +空格键的快捷键,你可以随时剪切和粘贴。代码可读性会增强,需要更少的寻找变量名。我们可以通过查看第二个例子来说明,这段代码旨在查看目标目录,并在找到目标目录中的已删除(先前已填充但现在可用)或零(从未填充)短文件名条目时中断。描述性名称允许您像读一段故事似得阅读代码,在你阅读时告诉你目的。

4)严肃的对待注释

一个好的软件开发人员在几个关键的地方给代码添加了很多注释。注释,如长变量名,不影响到运行时可执行二进制文件的文件大小,只是在那里,以帮助阅读文档的代码。解决方案中每个文件的顶部应说明该文件的目的,并且在每个函数的顶部应有较长的注释,说明函数的用途以及描述输入和输出。除了这些关键的地方,应该在逐行的基础上使用注释,无论代码的意图清不清楚。使用描述性变量名称可以帮助解释代码的目的,并减少必要的注释,使得那里的注释更突出。相信我,一年后你不会记得当初写代码的目的,所以要重视注释了!

5)使用emlib库

对于EFM32程序员,emlib库是你的朋友。接入EFM32外设时,尽可能的调用这些库。这些库经过良好测试,并有额外的代码来帮助寻找问题,而不仅仅是直接调整寄存器。

例如,以下代码使用emlib库:

TIMER_TopSet(TIMER3, 1000);

相同的事情可以通过预处理器定义寻址内存映射外设的寄存器来完成,定义TIMER3为0x40010C00。我们不使用这个地址,因为它很难被记住,但这是TIMER3映射在主内存中的地方。

TIMER3-》TOP = 1000;

所有外设以完全相同的方式映射到内存地址,因此有时您会看到使用此指针表示法的示例,而不是emlib库函数。如果您将看到em_timer.h中的TIMER_TopSet函数定义,您将看到该函数与此示例完全相同,因此在这种情况下,库函数没有提供任何附加值。然而,使用emlib库,有时会得到比简单操作映射寄存器更多的功能。例如,CMU_ClockEnable函数在最终使用“bit band”命令确保寄存器位自动地设置之前,小心地代表您做出很多决定。尽可能频繁地使用这些库函数,以获得所有EFM32库设计师设计的便利性。

6)定义变量以避免堆栈和堆的问题

C的许多方面对于非专业的程序员来说并不明显,但在嵌入式设计中运行代码时变得很重要。对于初学者,所有本地声明的变量都在栈上。这些是您在函数或任何代码块中定义的变量。

堆栈是从“内存顶部”或物理RAM中最高可用地址开始的内存区域,然后向下计数,直到达到堆栈限制。如果您定义了太多的局部变量,或者您的代码通过使用递归或其他嵌套函数动态创建这些变量,那么您的堆栈空间会被占满。

全局变量是在模块级别的所有函数和其他代码块之外定义的变量。编译器自动为heap上的全局声明的变量分配内存,这是堆栈外的主内存池的一部分,如果您尝试分配太多的RAM,将会产生编译器错误。但是,在代码中使用malloc()命令可以动态地在运行时在堆中分配RAM。

在具有有限RAM的嵌入式处理器上使用recursion或malloc()命令是一个冒险的任务!你必须理解你的代码将需要多少递归尝试(或malloc()调用)以便解决问题,然后设计一个永远不会用尽堆栈空间的解决方案。

如果您在代码中定义所有变量并让编译器确定如何自动管理内存,您将遇到较少的超出堆栈或堆的问题。即使有这样的预防措施,如果你的代码几乎是可用的RAM大小,当你编译和构建你的代码,你将需要学习如何监视堆栈和堆的大小,这部分内容超出本节的范畴。

7)全局静态变量和局部静态变量的差异

使用关键字“static”定义的变量表示不同范围的不同内容。在内部函数中,static关键字用在变量的前面,以记住它在函数调用之间的值。它具有一种“粘性”,你可以在函数的第一次调用时初始化它,然后让它保持其值,而不是每次函数执行时重新初始化非静态变量。在全局范围,所有变量都是“粘性”的,因为它们只在运行时开始时初始化一次,然后记住它们的值。但是,放置在全局变量前面的static关键字指示编译器该变量对于该模块是本地的,并且不被外部模块使用。对于同一个“static”关键字,这是一个完全不同的含义。

8)volatile和extern的含义及如何相互影响

只要变量和函数在模块中未声明为static,它们就可以在该模块外部使用,并在其他模块中使用。为了告诉编译器你打算在模块中使用相同的变量,你在一个模块中定义一个常规方法的变量,并在设计中所有其他模块的定义之前添加关键字“extern”。现在,您设计中的所有模块都可以访问同一个变量。但是,如果设计中的其他模块中的一个模块意图修改最初定义的位置之外的变量的值,则必须在该变量前面添加关键字“volatile”。这个volatile关键字告诉编译器该变量可以在模块之外更改,并阻止优化器删除似乎没有效果的语句。

此外,当使用Release版本和Debug版本时,使用volatile非常重要。当优化设置增加时,编译器将主动尝试压缩不必要的代码。这意味着您需要防止编译器这样做,通过使用volatile关键字可以改变当前范围之外的任何变量。

以上是关于网络通信中-物联网创客指南:MCU设计的最佳实践和除错技巧的相关介绍,如果想要了解更多相关信息,请多多关注eeworld,eeworld电子工程将给大家提供更全、更详细、更新的资讯信息。

关键字:物联网  嵌入式 引用地址:物联网创客指南:MCU设计的最佳实践和除错技巧

上一篇:物联网科技用途多 提升农民管理知识与能力
下一篇:6种让开发物联网解决方案更有效的方法

推荐阅读最新更新时间:2024-05-07 17:22

韩国新型自卫工具了解一下,类似口红便捷隐蔽
据韩国联合通讯社报道,韩国运营商SK Telecom周四表示,他们已经开始销售一款被称为“My Hero”的自卫物联网设备。   “My Hero”设计类似于一根口红,只有8厘米高,可以轻松携带,SK表示与市场上其他类型的自卫产品相比,它更便携而且隐蔽。   紧急情况下,当用户拔出口红时,“My Hero”可以发出90分贝的警报声,自动通知警方,它还可以把用户位置,通知给最多5个预先指定的电话号码。   SK表示,“My Hero”还能记录3分钟内的情况,作为潜在的调查证据。   至于价格,“My Hero”售价为25000韩元(约合人民币148元)。
[嵌入式]
物联网半导体销售额 未来4年CAGR达19.2%
市场研究机构IC Insights指出,物联网应用市场的强劲成长将带动相关半导体销售额,由2015年的154亿1,100万美元,大幅攀升至2019年的310亿8,300万美元,年复合成长率(CAGR)达19.2%。其中,光电、感测及离散(O-S-D)元件的销售额增长更为明显,CAGR高达26%。
[半导体设计/制造]
<font color='red'>物联网</font>半导体销售额 未来4年CAGR达19.2%
DHL将借助更多的物联网感应器和机器人来实现北美仓库的现代化
DHL是全球最大的物流,在全球220多个国家和地区拥有超过340,000名员工和众多营业办事处。 DHL旗下的物流部门DHL Supply Chain(供应链)周四宣布将投资3亿美元,DHL将借助更多的和机器人来实现北美仓库的现代化。自动化机器人用于减少工作流程,并会在物流管理中发挥作用。 DHL机器人 该技术已经在85家DHL的设施中投入使用,大约占北美地区仓库数量的20%。周四宣布的投资计划将把应用到DHL下属的430个工作点中的350个。 Locus Robocs等公司推出能与人类合作完成任务的机器人,目前已经在一些现代化程度很高的DHL设施中得到应用。DHL Supply Chain总裁Jim Geh
[机器人]
从工业物联网(IIoT)切入,安川加速全球化脚步
日本工业机器人大厂安川电机(Yaskawa Electric)旗下IT厂,安川情报系统(Yaskawa Information Systems),目前以物联网(IoT)为主力事业,随制造业扩大物联网应用,该厂也决定跟着强化物联网事业,同时为彰显数位化科技的重要,预定在2019年3月将公司改名为YE Digital。    据日本制造业专业媒体MONOist网站报导,安川情报系统在2018年6月21日召开经营方针说明会,以超越物联网为标题,说明该厂将以物联网及人工智能(AI)技术,将自己转变成先进IT技术企业,确保在工厂IT系统领域的事业优势。    虽然属于IT厂,但因出身工具机与工业机器人厂,安川情报系统过去的业务,偏重于基础I
[嵌入式]
NFC引爆物联网
物联网是继计算机、互联网和移动通信网之后的又一次信息产业浪潮。借助现代无线网络技术,物联网将更广泛地运用于城市公共安全、工业安全生产、环境监控、智能交通、智能家居、公共卫生、健康监测等多个领域。 由于NFC能在设备之间实现简单、安全的互连,同时操作简便,通常作用于移动设备、消费类电子产品、PC和智能控件工具。作为物联网中的典型应用,NFC在手机支付、区域监控、医院内就诊管理、快递库场管理等方面大有可为,未来将可见到许多终端产品采用NFC,并且应用在数字电视、智能手机、机顶盒、耳机、计步器、汽车中控等领域。 据统计,2011年全球NFC手机销量为3000万台,目前增长速度非常迅猛,预计在2016年将会增长到7亿台的销量
[网络通信]
中移动物联网应用调查:已深入住宅小区和农村
    在我国提出发展物联网两年多后,一直有人称物联网“雷声大雨点小”,为此,近日新浪科技派员赴山东跟随中国移动实际调查,调查结果显示,我国物联网应用已非虚言,不仅从城市深入农村,而且从政府企业应用向居民生活渗透。 物联网深入农村 7月底的一天中午,泰安市宁阳县葛石镇西杨村卫生所,这个村的卫生所占地260平方米,在一个村级卫生所中规模惊人,不过,让人们吃惊的并不在此,而是农村的看病方式的巨大变革。 该天,窗外正下着时断时续的雨,一个村民从手机里找出一条二维码信息,然后递给负责抓药的卫生所医生,一群媒体人士立刻围了上去观看。 只见医生把手机放在右手边的一个读卡器上,随着机器“嘟”的一声,电脑显示屏上出现了名为“基本公共卫生
[工业控制]
咱有物联网技术轻松实现
1785年,瓦特制成的改良型蒸汽机的投入使用,带领人类社会进入“蒸汽时代”。   1866年,德国人西门子制成了发电机,为后世人类社会电灯、电车、电影放映机等的相继问世提供了“电力”支撑。   而现在我们又迎来了一个全新的科技革命节点,被业界称为下一波破坏性浪潮的“物联网”。   日前,来自硅谷的物联网公司Ayla Networks艾拉物联宣布,其与小松鼠壁挂炉的生产厂家广州迪森(Devotion)合作打造的“物联网智能壁挂炉”,已顺利完成量产。   今日,我们约到了Ayla中国区市场战略总监Rachel Zhang,并用一个多小时的时间,谈了他对家庭供暖行业智能化趋势的理解。   家电们都智能化
[嵌入式]
从Witekio与FOTA,看安富利并购与转型的逻辑
随着对芯片的需求与日俱增,以及半导体供应链的吃紧,元器件分销商安富利因此获利颇丰。在安富利2022年一月公布的最近季报显示,公司当季营业收入为59亿美元,环比增长6%,同比增长27%。 除了芯片外,想介绍一下安富利的物联网云及软件服务。 2019年,在安富利宣布转型为物联网公司时,公司做出了两大重要举措:收购Witekio以及与微软云深度合作。借助安富利基于微软Azure物联网套件的IoTConnect平台,安富利推出了新的合作伙伴计划,通过去碎片化,为开发人员提供一个构建完整物联网解决方案的平台,使他们能够以快速且高成本效益的方式扩展业务。 微软自不必说,根据Gartner发布的2020年全球云计算IaaS市场追踪数
[物联网]
小广播
最新网络通信文章
换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved