Silicon Labs

在前一节中,你了解了一些帮助你进行硬件原型设计的重要原则。在本节中,我们将分享在软件开发方面的经验教训。关键词extern,static和volatile都是什么?你应该在你的代码中使用递归还是malloc()?

根据下列重点步骤写好代码,一切都会更好!

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

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

二 编译器的代码

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

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

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

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

res= dir_sdi(dj, 0);
if (res == FR_OK) {
do{ /* Find a blank entry for the SFN */
res= move_window(dj->fs, dj->sect);
if(res != FR_OK) break;
c= *dj->dir;
if(c == DDE || c == 0) break; /*Is it a blank entry? */
res= dir_next(dj, 1); /*Next entry with table stretch */
} while (res == FR_OK);
}

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

// Load the first target_directory entrywithout table stretch
result = set_directory_index(target_directory,NO_TABLE_STRETCH)
if (result == FAT_RESULT_OK)
{
//Look for a blank entry for the Short File Name over all directories
do
{
result= find_next_window_offset(target_directory->file_system_object,target_directory->current_sector);
if(result != FAT_RESULT_OK)
break;

//Window offset was OK, check the entry
short_file_name= *target_directory->short_file_name;

//Is it a blank or unused entry?
if (short_file_name[0] == DELETED_DIRECTORY_ENTRY_BYTE
||short_file_name[0] == UNUSED_DIRECTORY)
break;

//Get the next entry with table stretch
result= get_next_directory(target_directory, TABLE_STRETCH);
}
while (result == FAT_RESULT_OK);
}

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

四 严肃的对待注释

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

五 使用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库设计师设计的便利性。

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

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

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

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

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

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

int foo; //Global variable, memory is on the heap

void some_function()
{
int bar; // Localvariable, memory is on the stack
}

七 全局静态变量和局部静态变量的差异

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

int foo1 = 1; // Global variable, initialized only once
static int foo2 = 2; // Global variable,initialized only once, private to this module

void some_function()
{
int bar1 = 3; // Local variable, initializedevery time the function is called,
//private to this function

staticint bar2 = 4;// Local variable, initialized only the first time thatthis function
// is called, private to this function

int foo1; // This is a bad idea. Local foo1 overrides global foo1 and makesthe
//global version unavailable inside this function
}

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

只要变量和函数在模块中未声明为static,它们就可以在该模块外部使用,并在其他模块中使用。为了告诉编译器你打算在模块中使用相同的变量,你在一个模块中定义一个常规方法的变量,并在设计中所有其他模块的定义之前添加关键字“extern”。现在,您设计中的所有模块都可以访问同一个变量。但是,如果设计中的其他模块中的一个模块意图修改最初定义的位置之外的变量的值,则必须在该变量前面添加关键字“volatile”。这个volatile关键字告诉编译器该变量可以在模块之外更改,并阻止优化器删除似乎没有效果的语句。
// Module A
int foo; //Meant to be modified in this module only
volatile int bar; // Value can changeunexpectedly outside of this module
// Optimizer must always evaluate the value ofbar

// Module B
extern int foo; // We can read this valuedefined in Module A, but should not modify it
extern int bar; // Since declared volatilein Module A, we can read and modify this variable

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

在下一节中,我们将继续介绍软件路径的最佳实践,了解内联函数,如何使用闪存,配置锁以及如何解决缓冲区溢出问题。

围观 433

在开发消费电子、工业控制、智能传感器和电信及数据通信设备等物联网(IoT)应用产品时,8位MCU是极为关键的半导体器件,因此芯科科技(Silicon Labs)近来持续扩展旗下高集成、高性能、低功耗的8位MCU系列──EFM8TM的产品阵容,近期更进一步推出经AEC-Q100认证的EFM8最新解决方案,达到了汽车电子要求的严格品质标准。

小型化,低功耗IoT设计理想之选

以EFM8LB Laser Bee系列为例,其将8位MCU的模拟性能和外设集成度推向业界最高峰,所带来的创新与妙用令人惊艳。EFM8LB1在仅为3mm × 3mm的QFN封装中集成了强大的模拟性能,包括高速模数转换器(ADC)、高精度温度传感器等多个元器件,非常适合空间受限、性能密集型应用,例如光模块、测试和测量仪器、工业控制设备和智能传感器等。

基于高度集成的设计,LaserBee与市面上其他竞争对手的8位MCU相比,各项性能都高出一截,例如最快时钟及更快的PWM,更多的传输量和MIPS,以及内置高分辨率ADC所实现的理想模拟功能。

另一款EFM8BB Busy Bee系列包括运行频率可达50MHz的通用MCU内核,并将先进的模拟和通信外围设备集成到小封装中来提供非凡价值,因而成为空间受限应用的理想之选。

对于空间要求更佳严格的物联网产品而言,EFM8UB Universal Bee系列是提供更小型的封装尺寸,其运行频率同样达到50MHz,包括带有低功率的USB外围设备接口、充电器检测电路、8 kV ESD保护和增强型高速通信接口的设备,可以帮助设计人员兼顾产品尺寸和性能。

EFM8SB Sleepy Bee MCU系列是Silicon Labs最节能的8位MCU,提供无与伦比的触摸性能、超低的休眠模式能耗(在内存内容保持和掉电检测使能条件下仅50nA)和快速的2μs唤醒时间,成为低功率和电池驱动系统的理想之选。其内核运转频率为25MHz,结合创新型低能耗技术和短暂的唤醒时间,提供最低能耗,还包括多达14个的高质量电容式感应通道。

高可靠度,高性能规格满足汽车级设计

近期,Silicon Labs再推出两个系列的汽车级EFM8 MCU产品,瞄准广泛的车内触摸界面和车身电子电机控制应用。经过AEC-Q100认证的、超低功耗的新型EFM8SB1 Sleepy Bee系列产品提供先进的片上电容式触摸技术,可以实现用触摸控制来轻松地替代物理按钮。EFM8BB1/BB2Busy Bee系列产品拥有高性能的模拟和数字外设,从而使这些器件可以作为一种通用的选择,来控制电动后视镜、车头灯和座椅等。

汽车级EFM8SB1器件支持-40℃~+85℃的环境温度范围,内核速度高达25MHz,闪存容量高达8KB。该系列MCU集成了12位模数转换器(ADC)、高性能定时器、温度传感器,以及增强型SPI、I2C和UART串行端口。片上高分辨率电容数字转换器(CDC)提供超低功耗的触摸唤醒能力(<1µA)和12路可靠的电容触摸感应通道,可以替换许多应用中的物理按键开关。该MCU非常适合用于基于触摸的控制装置,如顶灯和头顶按钮。电容式触摸控制为当今装载电子系统的车辆提供了更持久耐用且防潮的用户界面,以及更时尚的观感。

汽车级的EFM8BB1/BB2系列为成本敏感型应用提供了高性能、能效和价格等方面的良好平衡。除了高达50MHz的内核速率、2-64KB的闪存,该系列MCU还可在小至3mm x 3mm的封装内提供一系列高性能外设,包括高分辨率的12位ADC、高速的12位数模转换器(DAC)、低功耗比较器、内置基准电源、增强了吞吐量的通信外设和内部振荡器。这种非凡的单芯片集成设计消除了对分立模拟元器件的需求,同时缩减了系统成本和电路板占用空间。

更多Silicon Labs EFM8 MCU产品相关信息,欢迎访问中文官方网站相应网页: http://cn.silabs.com/products/mcu/8-bit

本文来源:Silicon Labs

围观 371

在本系列的第一部分中,我们介绍了修订控制系统,以及它如何安全地保存您的设计文件,并帮助您找到设计文件之间的差异。在本节的第二部分教学中,您将了解如何构建自己的硬件。

这个系列文章有六个部分:

1. 使用版本控制系统
2. 在面包板上开始开发
3. 原型构建
4. 写好代码,一切都会更好
5. 像专业人士那样构建源代码
像天才一样调试问题

开始使用面包板进行开发

当在EFM32上开始一个新项目时,您可能已经参考了本书的一些例子,并认为您有了足够在定制印刷电路板(PCB)上开发自己的EFM32解决方案的能力。但不要让步子太大,可以遵循下列步骤以确保开发的成效:

1. 一步步进行测试

为了获得最佳效果,每个项目都应该从“面包板”开始,在此阶段,您可以为设计中的每个主要设备组装入门工具包和分线板。虽然您可以多次阅读设计中的设备规格,但在您尝试通过软件与设备进行交互之前,您无法真正学习如何使用设备。只是将设备连接到您的入门套件,并尝试通过电气接口与之通信,都将帮助你获得许多从阅读规范得不到的经验。虽然一些规范开始时有很大的意义,但你很快就会发现规范没有涵盖启动设备并开始使用它所需要的一切,或者至少它掩盖了一些重要的信息,如需要额外的信号线,额外的外部电路或许多其他重要的细节。

2. 为每个设备找到或制作自己的分线板

为了使用外部器件,您需要在设计中为每个器件找到一个分线板,评估或开发套件。如果你不能找到一个设备(或者如果它太贵),你通常可以按照本书第9章的说明自己构建一个。如果这是不可行的,例如你的设备有一些难以焊接的器件封装,如BGA,你有时可以找到芯片的备用封装,其具有相同的电气性能与更容易焊接的封装。

如果您的设备需要大量的支持电路来运行,例如特殊的电压调节器,那么开发您自己的评估板是完全值得的,因为开发这样的板,可以证明在你构建整个系统PCB前,你对你设备的引脚分布,footprint和支持电路是完全理解的。这些footprint文件可以在您的系统设计中重复使用,它们已经完全验证。

3. 仅针对基本功能

一旦将评估设备连接到入门套件进行测试后,重点应该是让部件基本上起作用。由于您通过跳线进行连接,因此在某些情况下,信号接口的电气要求将不能全速工作,因此要将速度保持为电气接口最低的速度,并保持EFM32 GPIO输出的最低驱动强度。在进入进一步的功能之前,编写代码来做一些简单的事情,比如读取设备ID寄存器或者做一个简单的写操作。由于可能在跳线上发生的复杂的信号完整性问题,某些频率可能是不可达到的,所以不要对面包板模型有太多期望。

该过程的要点是在设计定制PCB解决方案并将设备驱动程序集成到系统软件之前,尽可能多地了解设备的要求。这将问题隔离到单个子系统,并使您的最终开发就像是系统集成的练习。

面包板成功的关键:

对于设计的每个子系统,使用隔离面包板启动所有项目
为任何棘手的footprint或需要大量板载电路的部件开发评估板
专注于让部件“正常工作”,而不是寄希望于在面包板上实现全面性能

规划原型设计

一旦你的面包板实验完成,你已经确定了将组成您的EFM32解决方案的设备,是时候开发一个自定义PCB,以将所有这些组件一起作为一个单一的系统了。虽然此时定义外壳并且开发一个适合目标外壳的微型板也是很有诱惑力的,但是将第一个定制PCB开发为一个仅专注于测试和开发的大型测试系统是一个更好的主意。

1. 严肃地使用测试点
内置测试PCB是最终解决方案的一个版本,包括访问设计中的所有信号作为测试点。具有测试点的设计中的任何信号都可以通过万用表,示波器或逻辑分析仪进行探测。测试点可以是铜的暴露的“焊盘”,允许应用插头引脚和跳线的通孔结,或者甚至用于探针夹的金属环。将所有组件和测试点放在内置测试板的顶部也是一个好主意,这样调试更容易,因为您可以无需翻转板子。

要查看测试点的类型,只需查看您的入门套件的背面。电镀通孔测试点是我们焊接插头引脚的测试点。小金圆焊盘是表面贴装测试焊盘,适用于探测或焊接其中可以连接小探针夹的小导线。

2. 计划硬件设计spin
通过规划内置的测试版本的PCB,它将需要至少一个“spin”或重新设计生产解决方案的板。设计一个从第一次测试到生产的电路板是非常罕见的,几乎是不可能的。内置测试PCB允许您在启动期间询问系统,并轻松地研究设备之间的电气接口,而无需依靠特殊的焊接技术将探测点连接到电信号。应添加一个全功能通孔JTAG调试器连接器,以便与Simplicity Studio IDE完全交互,就像您的设计是入门套件一样。尽管可以仅使用UART编程开发生产板,但是在没有JTAG调试头的情况下将丢失调试功能,点击此处查看3M N2520-5002RB。
http://eu.mouser.com/ProductDetail/3M/N2520-5002RB/?qs=QV10cN0MjFtnDIM27...

您可以通过在电源和每个器件之间放置1欧姆左右的精密电阻,然后测量(或选择范围)精密电阻上的电压差,来研究系统中每个器件的功耗。

3. 使用比您认为在生产中需要的更大,更好的EFM32零件版本
当您开发您的第一个定制PCB版本的设计时,使用一个比你认为最终解决方案需要更多的闪存和RAM的EFM32系列的部件。有时可以保持相同的引脚数和占用空间,但通过使用比最终生产解决方案更强大的部件构建您的设计,可以获得额外的闪存和RAM。与使用优化器减少内存占用的“发布”版本相比,Simplicity Studio中的“Debug”需要更多的闪存和RAM,因此通过在原型阶段升级到更高能力的部件,您将使调试成为可能。你也可以移动到更多功能强大的,有更多引脚的产品,如果它使得调试您的解决方案的工作更容易。只要小心不要依赖升级系列的功能,当您转移到您的生产解决方案时,这些功能将消失。此处提供了一个选择器指南,其中显示了每个系列中每个器件的功能,容量和引脚数。

4. 通过JTAG连接到您自己的PCB,就像它是入门套件一样
当您拿到内置测试PCB时,要使用PCB上的JTAG调试头,您可以将IDT电缆(如此处提供的Assmann H3CCH-2018G http://www.digikey.com/product-detail/en/assmann-wsw-components/H3CCH-20...)连接到入门套件上的JTAG连接器。然后,在Simplicity Studio中的Kit Manager下(将入门套件连接到计算机之后),选择Debug Mode:Out。

您可能必须返回Simplicity Studio的主页并选择“Target Part.”。这样做,右键单击检测到的入门套件,然后选择“Select Target Part...”

在打开的“Target Selectionfor EFM32 ...”窗口中,将目标接口更改为SWD,忽略其生成的任何警告(只要您连接到EFM32部件),然后单击Detect Target按钮。对于出现的任何弹出窗口,按Yes按钮,直到零件标签显示自定义PCB上的实际设备。这将证明从入门套件到自定义PCB上的EFM32部件的JTAG连接被计算机上的Simplicity Studio检测到。

完成所有这些步骤后,无论何时在Simplicity Studio IDE中启动项目,用于项目的部分必须与目标选择中找到的部分相匹配,以便开始闪存编程和调试。这允许您调试您的自定义PCB,就像它是一个入门套件。

原型设计成功的关键
不要跳过原型构建 - 您将不会在第一个PCB上“直接生产”。
添加一个JTAG连接到您的第一个版本,以及您可以找到的最大的,功能齐全的EFM32芯片。
为您的项目配置正确的设备,并将入门套件调试模式设置为输出以调试您自己的项目,就像它是入门套件。

在下一节中,我们将进一步介绍软件开发和调试的提示。

围观 440

来源:Silicon Labs

作为有着20年经验的计算机工程师和超过两年经验的EFM32TM项目开发人员,我很有着丰富的,开发复杂计算机工程项目的经验。感谢诸如芯科科技(Silicon Labs)的Simplicity StudioTM软件,和如EFM32入门套件的硬件调试工具,类似项目对于经验的要求大大降低了。通过这些平台,任何人都可以快速,低成本地开始嵌入式开发,在拿到入门套件后很短的时间内,您可以直接完成自己的硬件支持的嵌入式解决方案。欢迎点击“阅读原文”至芯科科技(Silicon Labs)中文论坛观看完整的物联网创客指南文章。

展开EFM32的设计旅程

本系列文章的主旨,就是帮助你开始使用EFM32芯片内的所有外设。 然而,只给你一些类似让LED闪烁的例子,和让电子元件在某一个例子中开始工作,并不意味着你自己项目的成功。我多年的经验,能够指导我预先决定如何连接硬件,如何构建软件,如果出现错误,我的直觉会告诉我下一步的解决问题的调试过程。但是如果你没有多年的经验呢?你如何在缺乏经验的前提下找到成功的解决方案呢?我对这个问题的回答将会出现在这个系列的文章中,我将尝试提炼我通过无数弯路积累的经验。

您可能需要先阅读本指南几次,然后当您遇到问题时再次阅读。这可能是解决不断出现的问题的关键。其中一些提示涉及Simplicity Studio集成开发环境(IDE)的错误和细微差别,可能随着Simplicity Studio版本的升级而改进。但是本指南中的大部分提示都是通用的,应该适用于设计的所有方面。

这个系列文章有六个部分:
● 使用版本控制系统
● 在面包板上开始开发
● 原型构建
● 写好代码,一切都会更好
● 像专业人士那样构建源代码
● 像天才一样调试问题

第1部分:使用版本控制系统

在开始使用新设计之前,请为所有设计工作设置版本控制系统。这对于许多人来说可能是显而易见的,因为这些系统在软件开发中应用非常广泛。但对于嵌入式开发来说非常重要,其中源代码文件中的单个字符差异,可能导致成功的解决方案和完全失败的方案。

● 查找修订版本之间的差异
版本控制系统允许您的工作随着设计的进展保存在各种快照中,并允许您比较每个快照的文件差异。这些系统是免费提供的,可以安装在所有类型的操作系统(Windows,Mac和Linux)上。今天最流行的工具是SVN和Git。我两个系统都用,但我更喜欢Git,因为它保留完整的仓储,包括在您计算机上所有的可用的本地修订历史记录,您可以完全离线工作,然后上传到远程服务器以备以后的更改。

另一方面,SVN只保留本地计算机上的最新修订版本,并需要与服务器进行活动连接,以获取过去的修订版本和其他历史记录信息。本系列的代码示例存储在一个在线Git仓储,Github中,所以你应该开始 “克隆” 该仓储到本地硬盘驱动器并进行更改,然后尝试使用Git命令行或GUI工具以查找文件中的差异。设置和使用Git超出了本指南的范围,但有很多教程可供学习。

● (可选)在Simplicity Studio中设置Git
Simplicity Studio可以配置为在Simplicity Studio IDE中使用Git。这允许您提交更改并在IDE中查找文件间的差异。有关如何获得该设置的详细信息,请访问Silicon Labs社区。请注意,集成不需要使用版本控制,我不使用我的计算机上的集成。我只是在我的本地文件夹上运行Git的命令行版本或GUI工具,以进行提交和差异审查。

● 将所有文件存储在仓储中,而不只是源代码
每当您启动一个新项目时,设置一个新的版本控制仓储(简称为“repo”),以存储与该项目相关的所有文件。在该repo继续存储所有的规格和数据表,设计文档,电子表格,等等。你永远不知道您在线查看的文档何时可能不可用或由制造商更改。在一个安全的地方将备份与设计文件放在一起是一件好事。也不要停留在文件本身。在版本控制中也存储项目的原理图和布局文件。

● 在线保存repo的备份
最好使用在线服务,如Github,Atlassian,Google Drive,Microsoft OneDrive或任何其他在线备份服务,以保留额外的备份副本的repo。当你的硬盘驱动器崩溃或你的笔记本电脑丢失,克隆Git repo的最后一个服务器副本就会是非常快速和容易的选项,让您的设计文件回到您的计算机上。

● 尽早的,经常性的提交
一旦你的repo设置并跟踪你的文件,确保在你达到项目中的每一个重要的步骤时,“提交”你的设计文件。当你刚刚能够第一次与某些芯片通信时,提交代码,并在日志消息中指定项目的当前状态,即使源代码是一片混乱的。例如,“通过SPI读取加速度计设备ID”是一个很有用的消息,它可以让你知道提交到repo的代码的基本功能。

接下来通常发生的是,你清理代码,使其更好,更可读,以及有更好的性能,但有时该过程会破坏代码。有时,为什么代码出问题的原因是显而易见的,但有时,你做的解决问题的尝试都不起作用了,你得到了一个不再工作的解决方案。如果您在repo中有一个已提交版本的正常代码,您只需首先将新代码提交给repo,然后在本地驱动器上回到您的更改,看看原来的解决方案是否仍然有效,这让您知道至少你没有出现特别大的错误。然后,您可以使用版本控制系统的差异工具来显示从第一个版本到第二个版本的差异,并最终隔离和修复该问题。

使用版本控制隔离硬件问题
嵌入式开发和纯软件开发之间的一个关键区别是,硬件可以在嵌入式应用程序上随运行而改变。当您第一次运行解决方案时,一切正常,然后您进行一些更改,这时就可能不正常了。这可能是软件的问题,但也许是因为一根电线在某个地方松动了?通过提交对repo的更改,然后回到最后正常工作的版本,你可以确保问题不在软件上,然后找到并修复松动的电线,更新,回到最新版本的repo并继续开发。

版本控制成功的关键
将修订控制系统集成到设计的所有方面。
将仓储的副本保留在联机备份中以便保管。
提前并经常提交有关代码状态的描述性消息。

围观 382

来源:电子技术应用

物联网时代渐行渐近,半导体厂商纷纷布局,MCU厂商自然不能置身事外。岁末年初之际,Silicon Labs首席营销官Michele Grieshaber女士接受了《电子技术应用》采访,对MCU的发展谈了其观点。


Silicon Labs首席营销官Michele Grieshaber

2017年微控制器技术的发展:连接、安全、能效

Grieshaber女士表示,现在和未来,连接能力都是用于物联网(IoT)连接设备中的微控制器的关键特性之一。强大的无线连接能力不仅对许多物联网应用而言是必需的,而且这些应用也需要更先进的特性,例如对多协议无线的支持,可用来处理诸如多种网络的调试和共存这样的问题。能够使通信信道安全对于保护物联网系统免受入侵也是至关重要的。安全性应该通过硬件加速来最大化效率、响应时间和电池续航能力,因为数量众多的物联网设备都是由电池供电的,或者拥有有限的能源。

高效的传感器接口、灵活计时外设和高集成度通信外设也是关键的构件,这些外设必须都能够在深能级模式中自主工作,以最小化能量损耗。

虽然这些特性对应用于物联网中的MCU来说都是非常重要的因素,但是物联网开发人员最需要的还是简便性。开发人员必须使自己的产品快速上市,为了实现该目标,他们需要能帮助自己去实现能效最大化、调试问题和优化网络的开发工具。强大的软件构件也是非常关键的,它可以使开发人员致力于实现产品的差异化,同时无须为每个设计项目进行重复性的工作。

Grieshaber女士表示,Silicon Labs主要通过持续优化产品特性,提供强大的工具和软件支持,以及扩展和深化产品线与应用领域等方法来实现产品的差异化。

在Silicon Labs,我们相信能效是应用在物联网中的元器件的一项至关重要的特性,并且我们也相应地创建我们的产品。为了实现最低功耗,您不仅需要让MCU、无线芯片和外设拥有极好的休眠电流和工作电流,也需要尽可能多地使用休眠模式。Silicon Labs的MCU和无线MCU拥有非常高的自主性,使它们在深度睡眠模式时依然可以运行。这种自主架构使一项应用能够优化其电池续航时间。

Silicon Labs持续地对开发工具和软件进行投资,以帮助我们的客户更快地创建出自己的产品,并有助于他们将精力集中于自身的创新。这种方法的核心就是Simplicity Studio,它是一套旨在帮助开发人员简化MCU和无线并行应用开发的工具。Simplicity Studio包括一个可选的、成熟的集成开发环境(IDE),可帮助开发人员创建和配置其应用的工具(例如,Simplicity Application Builder和Simplicity Configurator),以及可帮助调试和优化应用的工具(例如,用于能耗优化和调试的Energy Profiler,用于网络优化和调试的Network Analyzer)。Simplicity Studio也提供对文档、案例和客户支持的轻松访问。

此外,Silicon Labs也看到了对预验证无线模块的高度需求,该无线模块包含一个无线MCU,同时集成了包括天线在内的所有外部无线元件,从而使产品开发人员可以极其容易地将无线功能集成到自己的产品中。高集成度与我们所关注的简便性是一致的,使我们的客户可以将精力集中于最终产品的创新,而且可轻易地集成诸如无线连接等功能。

2017年市场格局与竞争态势

在接下来的两三年内,对基于ARM Cortex-M处理器的MCU的总需求将持续增长,我们也会看到对集成安全功能的节能型无线MCU的需求将显著增长。对8位MCU的需求将依然强劲,因为它们非常适合于成本敏感型应用,这些应用并不需要很大的处理带宽。Silicon Labs的EFM8系列8位MCU提供了高功能和低成本的独特结合,从而备受成本敏感型物联网设备的关注。目标应用也包括经常运行私有无线协议的简单无线设备。

对于具有一定复杂度的物联网连接设备,或者运行Bluetooth低功耗、ZigBee或Thread协议的设备,通常需要更高性能的32位MCU或无线MCU。32位MCU对于更多性能增强型应用来说是必要的,而且就信号处理而论,它们也拥有超越8位MCU的关键性优势。我们认为16位MCU将不再流行,因为它们不像8位MCU那样拥有高性价比,也不像32位MCU那样能够处理复杂的应用。

中国拥有世界上最大的MCU市场之一,但是与其它区域市场相比也是截然不同的。在宏观层面上,我们可以将中国市场划分为两部分,本地市场和出口市场。就本地市场而言,我们必须满足由我们的客户定义的需求或本地标准,而且价格竞争通常也很激烈。这方面很好的案例就是光收发模块,我们与客户紧密合作来定义规格,然后交付产品。就出口市场而言,我们必须开发适合全球市场的产品,并且为客户提供参考软件或软件库来帮助他们开发自己的产品。这方面很好的案例是ZigBee市场,我们不仅为我们的客户提供无线MCU,还提供经过完全认证的ZigBee协议栈。

中国市场上的价格竞争一直都很激烈!作为一家为中国市场提供MCU产品的领先供应商,我们倾向于考虑整个解决方案的总成本,而不是一个元件的成本。我们通过提供高度集成的解决方案来帮助客户降低总体物料清单(BOM)成本,这些解决方案中外部元件更少,而且小型化封装也可以减小电路板尺寸、降低电路板成本。为了帮助我们的客户实现其产品的差异化,我们不仅为客户们提供高性能的外围设备,而且提供一流的固件;这方面的案例之一就是我们的高性能电容感应解决方案,我们不仅为我们的客户提供了低功耗、高性能的硬件,还会结合一流的电容软件库。目前,客户正面临两大难题,产品复杂性和上市时间。在这方面,Silicon Labs正提供一流的工具来帮助我们的客户。我们的Simplicity Studio不仅允许我们的客户支持MCU,也允许他们在同一个开发环境中将Silicon Labs的无线产品和传感器添加到自己的产品中。

围观 478



新型汽车级8位MCU瞄准车内触摸界面和电机控制应用

Silicon Labs(亦名“芯科科技”,NASDAQ:SLAB)宣布推出两个系列的汽车级EFM8 微控制器(MCU)产品,设计旨在满足广泛的车内触摸界面和车身电子电机控制应用。经过AEC-Q100认证的、超低功耗的新型EFM8SB1 Sleepy Bee系列产品提供先进的片上电容式触摸技术,可以实现用触摸控制来轻松地替代物理按钮。

EFM8BB1/BB2 Busy Bee系列产品拥有高性能的模拟和数字外设,从而使这些器件可以作为一种通用的选择,来控制电动后视镜、车头灯和座椅等。

此次发布的所有EFM8 MCU都基于8051内核并实现了不同功能和性能的组合,这些功能包括高速流水线8051内核、超低功耗、精度模拟、增强的通信外设、片上振荡器、小尺寸封装,以及拥有专利的Crossbar架构,该架构可提供灵活的数字和模拟外设管脚复用,从而简化印制电路板(PCB)设计和I/O引脚路由。

EFM8SB Sleepy Bee MCU系列是Silicon Labs最节能的8位MCU,提供无与伦比的触摸性能、超低的休眠模式能耗(在内存内容保持和掉电检测使能条件下仅50nA)和快速的2μs唤醒时间。汽车级EFM8SB1器件支持-40℃~+85℃的环境温度范围,内核速度高达25MHz,闪存容量高达8KB。该系列MCU集成了12位模数转换器(ADC)、高性能定时器、温度传感器,以及增强型SPI、I2C和UART串行端口。片上高分辨率电容数字转换器(CDC)提供超低功耗的触摸唤醒能力(<1µA)和12路可靠的电容触摸感应通道,可以替换许多应用中的物理按键开关。该MCU非常适合用于基于触摸的控制装置,如顶灯和头顶按钮。电容式触摸控制为当今装载电子系统的车辆提供了更持久耐用且防潮的用户界面,以及更时尚的观感。

Silicon Labs利用集成在SimplicityStudio™开发工具套件中的Capacitive Sense Library(电容感应功能库)来支持触摸感应界面设计,提供了在汽车应用中添加电容感应按键所需的所有逻辑算法。SimplicityStudio为设计人员提供了可即刻用于量产的固件,包括从扫描按键到噪声滤波等。通过使用Capacitive Sense Profiler工具能够将实时数据和电容触摸按键的噪声等级可视化,开发人员可以轻松地自定义触摸和非触摸门限及噪声过滤配置,极大地简化了在车载用户界面中添加电容触摸功能的难度。

EFM8BB1/BB2 Busy Bee MCU系列为成本敏感型应用提供了高性能、能效和价格等方面的良好平衡。除了高达50MHz的内核速率、2-64KB的闪存,该系列MCU还可在小至3mm x 3mm的封装内提供一系列高性能外设,包括高分辨率的12位ADC、高速的12位数模转换器(DAC)、低功耗比较器、内置基准电源、增强了吞吐量的通信外设和内部振荡器。这种非凡的单芯片集成设计消除了对分立模拟元器件的需求,同时缩减了系统成本和电路板占用空间。

由于支持-40℃~+125℃的宽温度范围,EFM8BB1/BB2器件适合于那些必须满足严格的汽车资格认证,可在宽温度范围内工作,同时在所有温度下都可提供高性能的应用。EFM8BB1器件可为成本敏感型设计提供最优的性价比,而EFM8BB2产品可提供增强的模拟和数字外设性能。对于模拟密集型的汽车车身控制应用,诸如座椅调整、风扇控制、车窗升降和燃料箱传感器,EFM8BB1/BB2 MCU是一种良好的选择。

Simplicity Studio中的配置工具(Configurator)和能耗分析工具(Energy Profiler)等都可帮助开发人员加速设计进程,并优化能源效率。EFM8客户可以从Silicon Labs官方网站 www.silabs.com/simplicity-studio 免费下载Simplicity Studio工具。

价格和供货

现已可提供多种采用空间紧凑型QFN封装的汽车级EFM8SB1和EFM8BB1/BB2 MCU的样片,并可批量供货。在一万片采购量时,EFM8SB1 MCU单价为每片0.59美元起,EFM8BB1 MCU的单价为每片0.47美元起,EFM8BB2 MCU的单价为每片0.71美元起。这些汽车级MCU的入门级开发套件定价为每套29美元(厂商建议零售价)。关于经AEC-Q100认证的新型EFM8 MCU的更多信息,或者订购产品样片和入门套件,请浏览网站: www.silabs.com/efm8

围观 279

页面

订阅 RSS - Silicon Labs