基于源码组装技术的嵌入式软件系统的研究

发布时间:2024-05-11
在通用程序设计方法中 从面向过程程序设计方法 到面向对象程序设计方法 再到现在的 com 程序设计方法 软件工程的发展经历了一个长期的过程 在这个过程中 人们追求的一个重要目标 就是希望软件开发能象汽车制造那样 先按照标准制造零件和部件 后再用这些零件和部件组装成成品[1]
嵌入式系统是面向应用的系统 其硬件环境具有个性和多样性的特点 这要求相应的软件也具有个性和多样性的特点[2-3]然而 在不同的硬件环境中 有许多功能又是共性的 这些共性功能模块的代码 只需要经过简单修改 便可重用在新系统中 如何利用已开发的共性功能代码 加速软件的开发 这正是源码组装技术解决的问题
1 源码组装思想
在嵌入式应用中 使用 c 语言库 或者微软的 mfc 类库 有时会感觉它产生的目标代码太大 这是因为无论你用到某个库中的一个函数 该库的整个代码就被全部连接进入目标程序 造成应用程序的冗余代码较多
显然 利用包含函数库的方式并不*能适合嵌入式开发的要求 基于这种情况 作者提出一种既能减轻程序员的负担 又能满足代码尽可能少的一种开发方式 即源代码级装配方式
在源代码级进行装配 其基本思想是
1 建立一个由开发工具管理的源代码库函数使用情况登记表 s_code_used_tab
2 除 c 语言的基本函数库外 与应用程序 或者操作系统相关的一些功能函数以汇编语言 或者 c 语言的源代码的形式存放在源代码资源库中 通过数据库方式进行管理
3 通过装配方式移植并产生该嵌入式操作系统的源代码 在开发应用程序开发过程中 当用到某个函数时 源代码资源函数开发工具软件检索 s_code_used_tab 表 看是否已包含该函数代码 如果有 则设置好调用参数直接调用该函数 否则除了产生调用代码外 还需将该源代码添加到要求生成的应用程序源代码中 并在 s_code_used_tab 表中添加记录项
4 本文只是解决生成可重组的源代码问题 重组工具另做研究
2 源码组件
源码组装技术的第一步就是获得可用于组装的源代码组件 想要获得功能完整 独立 冗余度小的高质量源代码组件[4-5]首先要将整个软件系统合理的划分层次 解耦软件部件
2.1 嵌入式软件系统层次划分
根据嵌入式软件的特点 如图 1 所示 将嵌入式软件系统自下而上共分为四层 硬件层 基本实时内核层 操作系统服务层和用户应用层 各层之间通过各层的头文件进行声明和调用
硬件层在系统的下层 用于描述嵌入式系统的硬件资源情况 该层包括两部分内容 处理器资源及板级资源描述部分和操作系统基本内核与硬件相关部分
处理器资源 如 c8051f020.h 描述了处理器全部特殊寄存器 sfr 的定义 及部分 sfr 的各控制位 如 es,tro 等 的定义 板级资源 hard_layer.h 描述了电路板上的各种信息 如 晶振频率 各存储器容量和起止地址 各 i/o 口的类型 地址等 这部分信息是在建立项目之初 由开发工具软件做向导 由用户填写 再将它们定义为符号常量 供上层使用
操作系统基本内核与硬件相关部分是操作系统与硬件的接口 也就是移植操作系统需要改动的部分 以 uc/osii 为例 它包含了 os_cpu.hos_cpu_a.asm 和 os_cpu_c.c 三个文件[6]
基本实时内核层存放操作系统的基本的四个功能模块 内核初始化模块 中断管理模块 调度模块和任务管理模块
操作系统服务层向用户提供各种系统服务 包括 进程通信 内存管理 文件系统 网络系统 设备驱动等功能 该层的源码组件是根据应用需要由用户添加的 并且可以在开发中不断增加 构成具有用户特色的组件库
用户应用层是由用户编写的应用软件 它可以调用服务层的 api 完成自身的功能 然后以任务的形式 挂接到操作系统上 由操作系统调度运行
源码组件的结构
系统按功能划分后 为了实现组装 源码组件需要具有一定的结构和接口 从代码实现的角度看 源码组件的基本结构包括 代码体 数据体和声明体
代码体是源码组件的实现部分 程序中体现为 funx.c 文件 其中包含了功能模块的初始化函数和各种使用函数 数据体特指组件与组件调用者共同使用的变量 程序中体现为 funx_def.c 文件 声明体是源码组件对外部的使用声明 具体为组件中的数据体 各函数的声明以及自定义的数据结构 程序中体现为 funx.h 文件 通过这些变量 系统和用户可对组件进行信息查询和通信声明体和代码体是源码组件的*组成 数据体根据情况不同可能没有
源码组件的组装
在源代码块组装时 按照系统软件层次 从硬件层到应用层 分层次组织所有源代码功能组件 将同一层内所有组件的声明体组合成本层的头文件 layern.h 代码体组合成本层的代码文件 layern.c 数据体组合成本层的数据文件 layern_def.c 这样的组合使得软件代码结构清晰 便于阅读 调试 修改
基于源码组装技术的嵌入式数控系统的实现
嵌入式数控系统的介绍
本文所用的数控系统是电火花加工的三轴两联动数控系统 该系统不仅要求具有普通数控系统的轮廓控制功能 还需要实时检测工件与刀具间的间隙电压 并以此控制插补过程 同时 还要通过串行口与上位机进行实时通信
系统代码组织
按照图 1 嵌入式软件系统的层次划分 将整个系统的代码分四个层次 用五个文件夹组装 下面图 2 具体给出系统代码的组装后的结构
1 header files 文件夹 它包含了系统中的所有的头文件 其中 c8051f020.h是处理器 sfr 的定义 os_cpu.h 是与操作系统相关的文件 hard_layer.h 是板级资源的符号常量定义 os_core_layer.h os_service_layer.h 和 user_layer.h 是各层所有组件的声明体的集合 includes.h 是将其它五个头文件汇总的一个总头文件 这样使得在其它 c 语言文件中只需要简单的引用一个 includes.h 文件就可以了
2 os_asm files 文件夹 它包含了 os_cpu_a.asm 和 os_cpu_c.c 与操作系统相关的两个文件 以及 startup.a51 和 init.a51 两个文件 这两个文件在 main 函数之前调用的 完成初始化工作
3 os_core files 文件夹 它包含了五个文件 os_core_def.c 是本层所有组件数据体的集合 os_schedule.c 用于任务调度 os_task.c 用于任务管理 os_init.c 用于系统初始化 包括操作系统内核初始化和 2.2 中提到的功能模块的初始化 os_interruput.c 用于中断管理 主要是中断处理函数
4 os_service files 文件夹 它包含了使用到的系统服务的模块 共五个文件 os_service_def.c 是本层所有组件数据体的
集合 device.c 内含 a/d 定时器等设备的使用函数 interpolation.c 内含插补控制的实现函数 serial.c 内含串口控制和 sem.c 内含
信号量处理
5 user_c files 文件夹 它包含了由用户编写的用户应用层的文件 mymain.c 内含 main 函数 bandinit.c 内含系统上电后的对硬件自检程序 该程序在操作系统工作之前运行 剩下的是各任务的任务函数
测试
本软件按上述结构 在 uvision2 ide 中组装 编译 连接 并下载到自行设计的硬件系统中运行 经测试 系统运行正确 说明系统构件使用的成功 此体系结构和源码组件结构具有可行性
结论
本文将源码组装的思想引入到嵌入式软件的开发 以此为目标对嵌入式软件进行分解 提出了嵌入式软件四层体系结构硬件层 基本实时内核层 操作系统服务层和用户应用层 并以功能完整 独立 冗余度小为原则 将软件系统分解成多个源码组件不同应用可以根据自身需求 对软件系统的功能模块进行选择 减少重复性的工作 使开发工作简单 快速
本文由 伯特利数控文章 整理发表,文章来自网络仅参考学习,本站不承担任何法律责任。
/bethel/news/
上一个:肉块接触式液压平板速冻机设备装置性能特点,工作原理,应用范围详细介绍
下一个:线性模组应该如何清洁?

龙门加工中心与立式加工中心如何区分?
怎么扫码连wifi密码(扫码怎么连wifi解密码)
荷花机床维修讲义
苹果序列号查询入口,苹果序列号怎么查
电风扇摇头吱吱响怎么办视频(电风扇摇头吱吱响怎么回事)
旺诠薄膜RTX057502BDTP,0805 75KΩ ±0.1% 1/8W贴片电阻
5000块钱的电脑配置,5000元左右的电脑配置清单及详细性能指标
凯胜齿式联轴器的故障问题处理
MLCC啸叫怎么解决?大师只教一招!
西安科迈柯扫地车销售, 电动清扫车电瓶扫地机销售时的几个小技巧问题浅析