0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

面向嵌入式系统的自诊断API

PCB线路板打样 来源:PCB线路板打样 作者:PCB线路板打样 2023-11-10 15:46 次阅读

迈向嵌入式系统的自诊断API
随着嵌入式系统需求的增长和开发周期的缩小,开发人员越来越多地集成商业应用程序编程接口(API)或软件工具的功能集合发布者提供在应用程序中使用该工具的功能。程序员选择这些预先构建的库,而不是手动编写所需的功能。常见示例是通信,消息传递,数据库和用户界面库。这些“中间件”API在便利性,可移植性,生产力和上市时间方面提供了诸多益处。但是,这些库通常还存在引入破坏性和极难发现的编程错误的风险。这种风险源于商业API的实施方式。包含API的软件功能几乎总是数据结构无知。通过使用void指针在API库和应用程序之间传递数据,他们处理数据而不“知道”他们运行的数据类型。

然而,创建API的潜力它捕获了更广泛的编程错误,并减少了API学习曲线的启动,内置于C ++和C语言中。通过利用每个ANSI C/C ++编译器的函数参数类型检查能力,可以创建一个数据感知的编程接口,从而实现自诊断。 C/C ++作为首选的嵌入式系统开发环境不断发展,因此基于环境固有功能的任何改进都具有广泛的适用性。

数据管理通常是核心应用程序需求,以及许多商业数据库API在解决嵌入式系统的性能和占用空间要求的同时,我们已经开始满足这一需求。

从历史上看,数据库SDK已经为数据库提供的服务提供了预定义的静态编程接口。对于嵌入式系统,这些API中的大多数都是导航的,具有排序,存储和检索数据的功能,同时一次浏览数据库的内容。开发人员必须学习这样一个数据库来完成一项任务,一般都是积极的,或者至少是中立的:虽然API提供了一个可以增加项目时间的学习曲线,但这种记忆在未来的项目中可能会有用。人们普遍期望这个API几乎可以处理任何类型和组织的数据。

然而,一个重要的缺点是,对于预定义的数据库函数库来说,能够管理任何数据库定义的数据,接口必须忽略所有数据的类型。换句话说,数据库编程接口必须将数据视为不透明或未键入的数据。简单来说,数据库库无法知道公司,人员,网络节点,传感器,高速公路或任何其他特定类型的信息是从数据库读取还是写入数据库。编程接口只能知道正在写入一些数据。

为了实现这一点,所有这些数据库都使用void指针在数据库库和应用程序之间传递数据。 void指针是一个C/C ++语言程序变量,可以合法地指向任何类型的数据。无效指针是什么叫做un-typed?正如其名称所暗示的那样,它没有类型。

没有类型,C/C ++编译器和数据库运行时都不能对它们执行任何验证。这开启了编程错误的可能性,这些错误源于将指针传递给错误类型的数据。这种错误的后果包括数据库中的无意义数据到损坏的(不可用的)数据库到崩溃的程序。

编写函数参数时出错的结果将导致数据库运行时放置将数据放入数据库中不适合的位置(例如,将数据放入数据库为模型数据指定的位置)。充其量,这会导致乱码存储在数据库中。更糟糕的是,数据库运行时可能会尝试超出程序堆栈的末尾并导致内存冲突(即崩溃)。

从数据库中读取数据会带来其他风险。尝试将N字节宽的数据读入一个小于N字节宽的程序变量将导致数据库覆盖内存中的随机位置。关键数据可能会被覆盖(例如程序调用堆栈),从而导致崩溃。重写数据库运行时结构也可能会被覆盖并导致数据库损坏。

引入错误有多容易?实际上,通过切割和粘贴代码块的省力实践,这种错误很快就会进入代码。任何与void指针相关的编辑错误,无论是传递指向错误主机程序变量的指针,还是传递指向已分配不足内存的指针,编译器或中间件都无法检测到。无论错误类型如何,使用void指针传递数据条C/C +编译器和中间件运行时它们检测错误的能力。纠正这些类型的错误的努力从最小到最大不等。

自我诊断API

创建更好的数据库API的潜力?一个捕获这样的编程错误,并减少API学习曲线启动?自从80年代首次将函数原型引入C和C ++以来,已经存在:通过利用每个ANSI C/C ++编译器的函数参数类型检查能力,创建一个数据感知的编程接口,从而实现自诊断。/p>

函数原型是函数的“签名”。函数原型声明函数的名称,函数的参数(参数)数,每个参数的数据类型以及函数返回值的数据类型。如果函数的实际使用与其签名不匹配,编译器将发出错误消息,并且必须先纠正违规代码,然后才能成功编译程序。

利用现代ANSI C/C ++编译器的函数原型设计功能要求我们放弃旧的想法,即数据库编程接口必须是程序员学习的静态函数库,然后应用于每个可能的数据库设计。相反,编程接口必须特定于每个数据库设计,因此了解每个特定数据库的数据类型。换句话说,填充模型记录以强制要求程序员传递模型信息的数据库函数的唯一方法是,该接口是从模型所参与的数据库设计派生的,也是特定的。

McObject的eXtremeDB是一种用于嵌入式系统的内存数据库系统(IMDS),它展示了如何将自诊断API应用于嵌入式系统中间件。 eXtremeDB有一个用于通用任务的小型静态API(打开并建立与数据库的连接,开始和结束事务等)。但是,大多数接口??关于填充,搜索和读取数据库定义中动态生成的数据的部分。

eXtremeDB数据库用户使用输入到文本文件中的eXtremeDB数据库定义语言(DDL)来描述数据库。编译器mcocomp处理此DDL,验证其语法,如果没有错误,则生成开发人员在其应用程序项目中包含的 .c和 .h文件。 .c和.h文件定义该唯一数据库的编程接口。

在生成的文件中有函数原型(.h文件)和实现(.c文件)创建,搜索和读取由数据库设计者定义的每种类型的类和索引。每个接口都是针对特定数据元素和操作的特定用途的;因此,在接口定义中考虑了元素的类型。

eXtremeDB还建立在利用ANSI C函数原型的基础上,提供了包含大量(和可配置)运行的数据库库的开发人员版本-time检查函数原型无法检测到的其他类型的编程错误,例如尝试使用事务范围之外的对象的句柄,或者使用无效的事务句柄。

直观的界面可以在项目的开始阶段提高程序员的工作效率,并延长软件的使用寿命。与基于模糊静态编程接口的非描述性代码相比,进入项目的维护程序员发现阅读和理解函数要容易得多。

为每个项目出现一个新界面,非常简单的规则管理它的产生和使用。掌握生成和使用此类API的基础知识可以提供比学习静态中间件API的100到250个功能更强大,更灵活的“生活工具”。

作者:Steven T. Graves,总裁兼首席执行官,McObject LLC,Issaquah,WA

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5082

    文章

    19111

    浏览量

    304878
  • 嵌入式系统
    +关注

    关注

    41

    文章

    3587

    浏览量

    129441
  • API
    API
    +关注

    关注

    2

    文章

    1499

    浏览量

    61975
  • 数据库
    +关注

    关注

    7

    文章

    3795

    浏览量

    64367
收藏 人收藏

    评论

    相关推荐

    新手怎么学嵌入式?

    。但面对这个复杂的领域,很多人可能会感到迷茫,不知从何处入手。别担心,本文将为你提供一些入门学习嵌入式技术的建议。 新手入门学习嵌入式技术的途径 1. 了解基础知识 首先,要对嵌入式系统
    发表于 12-12 10:51

    嵌入式系统开发与硬件的关系 嵌入式系统开发常见问题解决

    嵌入式系统开发与硬件的关系 嵌入式系统是专为特定应用设计的计算机系统,它们通常嵌入在所控制的设备
    的头像 发表于 12-09 09:38 238次阅读

    嵌入式系统与物联网的结合

    随着科技的飞速发展,嵌入式系统和物联网(IoT)已经成为现代技术领域的重要组成部分。嵌入式系统是指嵌入到设备或
    的头像 发表于 11-06 10:23 289次阅读

    什么是嵌入式?一文读懂嵌入式主板

    在现代科技浪潮中,嵌入式技术已成为支撑各种智能设备和系统运行的核心力量。那么,究竟什么是嵌入式嵌入式系统,顾名思义,是将计算机的硬件和软件
    的头像 发表于 10-16 10:14 937次阅读

    AMD 面向嵌入式系统推出高能效 EPYC 嵌入式 8004 系列

    领先地位。   AMD EPYC 嵌入式 8004 系列处理器专为计算密集型嵌入式系统所设计,可为高需求工作负载提供卓越性能,同时以紧凑的尺寸规格最大限度为空间和功率受限型应用提升能效。它还集成了一整套
    发表于 10-11 13:58 714次阅读

    嵌入式系统的原理和应用

    嵌入式系统是一种专用的计算机系统,其设计初衷是执行特定任务,而非作为通用计算机使用。这类系统通常作为更大系统的一部分,起到控制、监控或辅助的
    的头像 发表于 10-05 17:03 834次阅读

    嵌入式系统是什么?

    分包含软件运行环境以及操作系统,硬件部分包含信号处理器、存储器以及通信模块等多方面内容。与传统的计算机系统相比,嵌入式系统与之相差很大,它并不能实现大容量的存储功能,软件部分则以
    的头像 发表于 08-29 16:26 369次阅读

    嵌入式工控主板在智慧医疗诊断设备中的应用

    嵌入式工控主板在智慧医疗诊断设备中的应用广泛且深入,其高集成度、低功耗、高性能等特点使得它成为现代医疗设备中不可或缺的一部分。以下是对嵌入式工控主板在智慧医疗诊断设备中应用的详细阐述:
    的头像 发表于 07-11 10:51 411次阅读
    <b class='flag-5'>嵌入式</b>工控主板在智慧医疗<b class='flag-5'>诊断</b>设备中的应用

    嵌入式系统怎么学?

    嵌入式系统怎么学? 随着物联网、智能制造等新技术的兴起,嵌入式系统的应用范围更加广泛。包括但不限于工业控制、汽车电子、医疗设备、智能家居、智慧城市、消费电子、通信设备等。学习
    发表于 07-02 10:10

    入门嵌入式系统这些知识你知道吗?

    嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通常,嵌入式系统是一个控制程序存储在ROM中的
    发表于 05-03 09:54 555次阅读

    再谈嵌入式实时操作系统

    由于嵌入式处理器早期功能单一且运算能力不高,嵌入式应用已不能满足各个领域不断增长的需求。嵌入式操作系统应运而生,嵌入式操作
    的头像 发表于 04-09 17:27 791次阅读
    再谈<b class='flag-5'>嵌入式</b>实时操作<b class='flag-5'>系统</b>

    嵌入式fpga是什么意思

    嵌入式FPGA是指将FPGA技术集成到嵌入式系统中的一种解决方案。嵌入式系统是一种为特定应用而设计的计算机
    的头像 发表于 03-15 14:29 1249次阅读

    fpga是嵌入式

    FPGA(现场可编程门阵列)不是嵌入式系统,但FPGA在嵌入式系统中有着重要的应用。
    的头像 发表于 03-14 17:19 2286次阅读

    嵌入式系统发展前景?

    嵌入式系统发展前景? 嵌入式系统,从定义上来说,是一种专用的计算机系统,它被设计用来控制、监视或者帮助操作一些设备、装置或机器。在过去的几年
    发表于 02-22 14:09

    嵌入式系统的应用实例

    嵌入式系统的三个基本要素是嵌入性、专用性与计算机系统
    的头像 发表于 01-22 09:57 1062次阅读