微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 如何最大限度地提高物联网项目的效率

如何最大限度地提高物联网项目的效率

时间:07-31 来源:SiliconLabs 点击:

 

 

大幅提高物联网项目的效率

作者:Matt Gordon;Thom Denholm, Silicon Labs(亦称"芯科科技")

 

如果只研读最新的微控制器数据手册的话,开发人员会很容易认为高效使用CPU资源(包括内存和时钟周期),是目前硬件设计中的一个小问题。最新的32位MCU可以在嵌入式空间提供闪存和RAM分配,这在不久前都是闻所未闻的;并且其CPU与之前台式机独有的运行速度一样。然而,近来开发过物联网产品的人都知道,这些硬件的进步并非空穴来风;它们一直因应着最终用户的期望和设计要求显著地变化着。因此,现在比以往任何时候都更重要的是:开发人员要确保其软件以最大效率运行,并且有效地利用他们的时间。

 

在现代嵌入式系统中运行的软件往往有各种来源。应用开发人员编写的代码通常与RTOS(实时操作系统)提供商的现成软件组件相结合,而这些组件又可能利用最初由半导体公司提供的驱动程序代码。开发人员可以编写每段代码来优化效率,但本文更着重于现成的软件组件中的效率优化。特别是其中两个组成部分将作为审视本文给出的资源效率的基础:实时内核和事务文件系统(transactional file system)。Silicon Labs(亦"芯科科技")将通过本篇技术文章说明如何最大限度地提高物联网项目的效率,欢迎点击"阅读原文"观看完整文章。

 

实时内核:高效系统的核心

 

实时内核是当今许多嵌入式系统中运行的软件的核心。简单说,内核是一个调度程序;为基于内核的系统编写应用程序代码的开发人员将代码分为任务,内核负责安排这些任务。那么,内核是main()中无限循环的替代方法,它常常作为裸机(bare-metal)嵌入式系统中的主要调度机制。使用实时内核提供了重要优点,包括提高效率。选择将其应用代码基于内核的开发人员可以优化其系统中处理器资源的使用,同时更有效地利用自己的时间。然而,并不是所有的内核都生而相同,因此简单地决定在新项目中采用内核,并不能保证效率的提升。

 

调度是内核可能不同且CPU资源的使用效率可以有很大差异的关键领域。通过提供一种允许任务以响应事件的方式运行的智能调度机制,内核可帮助开发人员在无限循环中提升效率;其中以固定顺序执行任务(或换句话说,函数)。基于内核的应用程序的确切效率部分取决于其调度程序的实现方式。一个内核的调度程序(只是一段负责决定每个任务何时运行的代码)最终是种开销,这个开销必须不能蚕食掉通过摆脱裸机系统获得的好处。

 

通常,在实时内核中,调度是基于优先级的,这意味着应用程序开发人员为其任务分配优先级(通常为数字),并且在做出调度决策时,内核支持更高优先级的任务运行。在这种机制下,内核必须保持某种类型的数据结构、跟踪应用程序不同任务的优先级以及每个任务的当前状态。

 

从Micrium的­C/OS-II内核获取的一个例子如图1所示。在OSRdyTbl []中,这里显示的是8元素数组(每元素八位),每个位表示不同的任务优先级;其中:第一个元素中的最低有效位对应最高优先级;最后一个元素中的最高有效位表示最低优先级。数组的位值反映任务状态:如果相关优先级的任务准备就绪,则用值1表示;若任务未准备就绪,就用0表示。作为­C / O S - I I调度程序的一部分,附带的OSRdyTbl []是图中所示的单个八位变量—OSRdyGrp。

 

 

图1:在μC/OS-II调度程序中,每个任务优先级由数组中的位表示

 

该变量中的每个位表示数组中的一整行或元素:1位表示对应的行至少有一个就绪任务;0位表示该行的任务都没就绪。通过使用清单1中所示的代码首先扫描OSRdyGrp、再扫描OSRdyTbl[],­C/OS-II可以确定在任何给定时间已准备好运行的最高优先级任务。如列表所示,此操作很高效,只需要两行C代码。当然,紧凑、高效的代码只是开发人员在内核中寻求的特性之一。鉴于大多数新MCU提供的闪存要相对多于RAM,对于开发人员来说,考虑内核所占用空间的数据端也很重要。对于内核的调度程序来说,臃肿的RAM占用会导致过多开销,从而减少多任务应用程序代码通常带来的好处。

 

内核可以采用两种方法来分配多任务所需的基本资源:分配这些资源的责任可以留给应用代码;或者内核本身可以处理分配。在任何内核中必然会存在某些变量和数据结构,因为它们对于执行多任务服务至关重要,所以这些变量和数据结构完全放在内核中。然而,对诸如用于记录每个任务状态的TCB(或任务

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top