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

审核编辑 黄宇

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

    关注

    5186

    文章

    20143

    浏览量

    328672
  • 嵌入式系统
    +关注

    关注

    41

    文章

    3716

    浏览量

    133071
  • API
    API
    +关注

    关注

    2

    文章

    2146

    浏览量

    66199
  • 数据库
    +关注

    关注

    7

    文章

    3993

    浏览量

    67715
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    一个面向单片机、事件驱动的嵌入式开发平台介绍

    EventOS,是一个面向单片机、事件驱动的嵌入式开发平台。它主要有两大技术特色:一是事件驱动,二是超轻量。EventOS以及其母项目EventOS,目标是开发一个企业级的嵌入式开发平台,以事件总线
    发表于 12-05 06:26

    嵌入式系统的定义和应用领域

    嵌入式系统,简而言之,就是一种专为特定设备或装置设计的计算机系统。它们通常配备一个嵌入式处理器,其控制程序被存储在ROM中。这些系统在许多日
    发表于 11-17 06:49

    嵌入式实时操作系统的特点

    实时嵌入式操作系统(Real-Time Embedded Operating System)是专门设计用于嵌入式系统的实时操作系统
    发表于 11-13 06:30

    新一代嵌入式开发平台 AMD嵌入式软件和工具2025.1版现已推出

    AMD 2025.1 版嵌入式软件和工具是面向新一代嵌入式系统开发而打造的综合平台,全面加速概念构想到部署落地。 2025.1 版嵌入式软件
    的头像 发表于 08-20 09:15 3616次阅读

    AMD 2025.1版嵌入式软件和工具的新增功能

    AMD 2025.1 版嵌入式软件和工具是面向新一代嵌入式系统开发而打造的综合平台,全面加速概念构想到部署落地。
    的头像 发表于 08-15 15:32 1023次阅读

    Linux嵌入式和单片机嵌入式的区别?

    Linux嵌入式与单片机嵌入式在多个方面存在显著的区别,以下是详细的比较和归纳: 一、基本概念 1. Linux嵌入式: 定义:将Linux操作系统运行在
    发表于 06-20 09:46

    运行在嵌入式系统上的emApps

    在当今快节奏的嵌入式系统世界中,灵活性和适应性是嵌入式系统实现的关键。SEGGER推出了其最新创新:Embedded apps(emApps)应用,类似于手机上的应用程序,可以运行在
    的头像 发表于 06-18 09:53 617次阅读
    运行在<b class='flag-5'>嵌入式</b><b class='flag-5'>系统</b>上的emApps

    嵌入式开发入门指南:从零开始学习嵌入式

    随着物联网、智能硬件的发展,嵌入式开发成为热门技能之一。以下将为初学者提供一份详细的嵌入式开发入门指南,涵盖学习路径、必备工具、推荐资源等内容。 1. 嵌入式系统的定义与应用
    发表于 05-15 09:29

    Python在嵌入式系统中的应用场景

    你想把你的职业生涯提升到一个新的水平?Python在嵌入式系统中正在成为一股不可缺少的新力量。尽管传统上嵌入式开发更多地依赖于C和C++语言,Python的优势在于其简洁的语法、丰富的库和快速的开发周期,这使得它在某些
    的头像 发表于 03-19 14:10 1184次阅读

    嵌入式系统开发圣经【干货】

    内容包括:嵌入式系统的介绍、嵌入式SoC硬件系统概论、嵌入式系统软件开发。适用于产品主管、
    发表于 03-12 13:58

    使用Lattice mVision打造嵌入式视觉系统解决方案

    嵌入式视觉是嵌入式系统与机器视觉技术的集合,嵌入式视觉系统硬件集成摄像头模组和处理板,将图像捕获和图像处理功能结合在一台设备中。
    的头像 发表于 03-06 16:09 1214次阅读

    嵌入式主板的概述与发展

    随着科技的迅猛发展,嵌入式系统在现代电子产品中扮演着越来越重要的角色。嵌入式主板作为嵌入式系统的核心组件之一,承担着控制、处理和通讯等多种功
    的头像 发表于 01-13 16:30 1179次阅读
    <b class='flag-5'>嵌入式</b>主板的概述与发展

    新手怎么学嵌入式?

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

    什么是嵌入式人工智能

    嵌入式人工智能是指将人工智能技术应用于嵌入式系统中的一种技术。嵌入式系统嵌入到其他设备或
    的头像 发表于 12-11 09:23 1516次阅读
    什么是<b class='flag-5'>嵌入式</b>人工智能

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

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