嵌入式程序动态分配内存的调试方案设

2015-01-13 01:32:41陈宏君冯亚东文继锋周强
单片机与嵌入式系统应用 2015年9期
关键词:项目化模块化

陈宏君,冯亚东,文继锋,周强

(南京南瑞继保电气有限公司,南京 211102)

陈宏君,冯亚东,文继锋,周强

(南京南瑞继保电气有限公司,南京 211102)

提出一种嵌入式程序运行状态下动态分配内存的变量调试方案,将应用程序按照元件划分,元件数据通过结构体进行封装,嵌入式系统程序库记录动态分配结构体的首地址和实例名,上位机客户端调试软件分析结构体变量的相对地址,并将层次变量名和相对地址信息下发给嵌入式服务器端,服务器端由首地址、相对地址计算出变量的绝对地址,并根据变量类型信息访问该地址对应的内存数据,上传给调试工具显示。本文提出的调试方案已经应用在电力系统保护测控装置调试中,提高了程序诊断效率。

嵌入式程序;动态分配;内存调试;结构体分析

引 言

在软件开发维护过程中,调试是很重要的一个步骤,通过调试来诊断解决程序问题。在上位机(PC机)环境运行的程序,由于有集成开发调试的人机界面工具,可以方便地进行单步调试或输出中间运行信息。嵌入式软件独立运行在装置中,一般是通过仿真器连接调试线进行调试,这种模式需要人为预先知道变量的地址,并且系统通常是在STOR(停止实时运行)的模式下才能支持仿真器调试[1]。

调试一个变量,首先需要知道该变量的地址。编译器在编译程序时,对于全局变量,可以预先静态分配地址,形成全局变量的MAP文件,通过分析该文件,获取全局变量名和地址信息,进而调试全局变量。随着程序规模的增加,全局数据空间有限,无法把所有变量都放到全局区,并且有些数据需要根据具体情况动态分配。动态分配内存的变量是在程序构造函数中申请的,这些变量在程序运行前地址是未知的,由于CPU运行的是二进制指令,在运行过程中没有地址和变量名的对应关系,无法用传统的仿真器调试方法来调试嵌入式程序动态分配内存的变量在运行模式下的实际值。

本文设计了一种嵌入式程序运行状态下动态分配内存的变量调试方案,通过定义应用程序结构体编写规范、系统程序提供API接口注册结构体、调试软件分析头文件计算结构体成员变量的相对地址等方式,能得到变量的真正地址,在运行过程中装置上传变量实际值。

1 系统架构设计

嵌入式装置调试系统结构如图1所示,将应用程序和系统平台库编译为HEX目标文件,下载到装置。调试工具分析H文件、变量类型和相对地址等信息,下发调试请求,装置上传变量值。

图1 调试系统结构图

首先将应用程序按照文件进行封装。文件是完成特定应用功能的面向对象的一组数据和对数据进行处理的过程,处理完后输出的数据供其他文件进一步使用[2]。应用程序由若干文件组成,包括H文件和C文件,在H文件中定义数据结构体,在C文件中定义构造函数、任务函数,对结构体数据进行运算等操作。

其次对于动态分配内存的结构体变量,装置侧系统软件提供注册接口,可记录首地址,在C文件的构造函数中调用注册接口。

嵌入式装置上电后进入运行状态,调试软件和装置进行连接,用户可指定H文件存放路径,结合装置上传的CPU字节对齐信息,对相关的H文件进行词法分析和语法分析,计算出变量在结构体中的相对地址,并下发变量地址和类型信息。装置侧根据结构体实例名,在注册表中查询结构体首地址,加上变量相对地址,得到变量的绝对地址,并访问该地址对应内存,上传数据。完整的调试流程如图2所示。

图2 调试流程图

2 系统软件API接口

由于应用领域需求复杂和分工细化,嵌入式系统逐渐开始了平台化的开发模式[3],工程师基于通用的硬件平台、系统软件平台、工具软件平台开发应用程序。

其中系统软件屏蔽硬件差异,提供的通用接口服务(API)包括:元件注册、变量管理、任务调度、数据交换、定值设置、调试通信等功能。定义一套面向应用的开发规范,在嵌入式C语言程序中,数据通过结构体进行组织和重用。在结构体动态分配内存的函数中,调用系统软件API接口注册结构体信息。定义结构体信息表数据模型如下:

struct ComponentInfo{

void* addr; //结构体首地址

char* type_name; //结构体类型名

char* inst_name; //结构体实例名

};

将结构体信息组成一个hash表,可用结构体实例名为关键字,查找获取结构体的类型名、首地址信息。在文件构造函数中,通过调用registerComponent(void* addr, char* ptype, char* pinst),把动态分配的结构体信息注册到信息表中。

3 应用元件开发

应用程序基于系统库开发,将程序划分为若干文件和main.c文件。文件的头文件定义数据结构体,包括输入变量、输出变量、内部变量等。例如:

struct AND2{

#include"base.h"

unsigned char* in1;

unsigned char* in2;

unsigned char out;

int run_cnt;

…… };

在C文件中定义文件构造函数、任务函数。在构造函数中调用calloc函数分配数据结构体,并调用系统接口注册首地址信息:

AND2* newAND2(char* pinst){

AND2* dp = (AND2*)calloc(1, sizeof(AND2));

if(!dp) return NULL;

…… //其他变量初始化代码

registerComponent(dp, "AND2", pinst);

addTask(dp,runAnd2);

return dp;

}

按照上述方法开发各个应用元件后,在主程序中调用各个元件的构造函数,设置元件实例名:

int main(int argc, char** argv){

AND2* pand = newAND2("And2");

CURRENT* pcur = newCurrent("Cur3P1");

……//其他设置代码

return 1;

}

上述示例代码,创建了类型名AND2并且实例名为And2、类型名CURRENT并且实例名为Cur3P1的文件实例,在main函数中完成动态内存的申请分配和注册管理。

4 层次调试名模型

调试装置变量时,系统软件支持通过层次变量名XXSlot.XXComp.XXVar(插件名.元件实例名.变量名)访问数据。如图3所示,平台化软件结构中,将可插拔的插件按照面向对象的节点管理。对于带处理器的插件,支持设置对象名,例如B01(管理插件)、B02(运算插件)以及模拟量、开关量输入输出插件等,可在装置配置文件中定义各个插件的名字、总线地址。MCPU插件具备管理功能,给其他插件分配总线地址,并作为调试服务器。当下发B02.Cur3P1.IA的层次变量名给管理插件时,会通过总线转发给其他插件。故对动态分配元件的数据调试,最关键的一步是获取成员变量的地址。

图3 层次调试名示例

5 结构体成员相对地址计算

结构体实例dp的成员变量out相对地址在C语言中,可用类似(unsigned int)(&dp->out)-(unsigned int) dp的方式获取,而上位机调试软件需通过静态分析,离线计算不同字长类型的CPU所对应程序的变量相对地址。

分析结构体内变量地址分配信息前,需掌握结构体布局原理,了解总线宽度、自然边界的概念,编译器在分配结构体时根据这两个因素来计算偏移量和空间占用[4]。

每个C语言变量类型都有自然边界,如果某种类型数据所处地址是N的整数倍时,访问效率最高,则这种类型的自然边界是数字N[4]。

对于数据总线为32的处理器,short型为2字节,自然边界为2;int型为4字节,自然边界为4;double型为8字节,自然边界为8。本文所分析的处理器(包括PowerPC、SHARC、TI、Blackfin等),其编译选项都设置为结构体非压缩模式。对于非压缩模式结构体,内存布局遵循2个原则:

① 结构体的自然边界和成员变量中最大的自然边界一致,在不同变量类型之间可能存在空洞,用于变量自然边界对齐;

② 结构体的总大小是其自然边界的倍数,在结构体末尾可能需要填充字节。

上述的“可能”是因为:根据前一个变量相对地址值和变量类型,递推当前变量相对地址值时,需判断当前已经占用分配的地址是否能整除该变量的自然边界,具体情况需要具体分析,这也是结构体变量分析的难点。

结构体中可以有子结构体、子联合体union,其中union大小是取其子成员中最大内存占用,而struct大小是所有成员大小的累次叠加。一个简单的结构体定义举例略——编者注。

由于应用程序功能复杂,在元件结构体中会使用子结构体、子联合体、条件预编译、数组、表达式、位段等,故对结构体成员变量的分析是递归下降的过程。其计算流程如图4所示。

图4 结构体成员变量相对地址计算流程图

在进行结构体分析时,定义了如下关键数据结构:

① 记号类, CToken是进行词法分析的最基本单元:

class CToken{

public:

CToken(QString&name): m_name(name){}

MainTokenType m_maintp; //主类型

SubTokenType m_subtp; //子类型

string m_name; //名字

};

其中记号的主类型定义为:

enumMainTokenType{

ErrorType=0, //错误类型

IdType, //关键字、变量名、类型名、运算符等

IntType, //整数常量类型

DoubleType, //浮点数常量类型

StringType, //字符串常量类型

EndLineType, //行结束符号

EndFileType, //文件结束符号

};

IdType的分若干子类型:

enum SubTokenType{

KeyWordType, //关键字

OperaterType, //运算符号

VariableType, //变量类型,包括数组

StructType, //结构体类型

UnionType, //联合类型

……

PreProcType //预处理符号 #include

};

词法扫描主要过程是读取H文件,处理注释后,逐个读取字符,通过表驱动的查找方法,并进行若干步探测,进行关键字、变量类型等匹配,提取出变量名、类型定义、常量等标记。

② 结构体数据建模:CStruct包括若干子结构体、联合体实例、定义的位置等,每分析完1个变量后,更新m_memorySize值,动态调整自然边界。程序语句略——编者注。

③ H文件数据管理类: CHFile通过调用parseText接口,读取文件,进行词法分析后,形成CToken实例,用m_tokens管理,并根据CToken的子类型,形成结构体、枚举定义、宏定义等实例。程序语句略——编者注。

完成上述关键数据结构定义后,计算第N个变量的相对地址,等价于计算N-1个变量所占用的结构体大小和第N个变量的自然边界调整,通过递归下降循环调用,便可实现图4的计算流程:

① 结构体初始大小为0,计算结构体内第1个变量的大小,得到数字为M1;

② 计算第2个成员变量占用大小M2,如果第2个变量类型自然对齐边界值为N, 定义空洞数S=(M1%N),则补齐S个字节,第2个变量计算完后,总的大小为M1+S+M2,第2个变量的相对地址为M1+S;

③ 顺次计算并累加各成员变量相对地址和空洞,直到计算出第N个变量的相对地址。

6 调试界面

工具软件作为客户端,向装置管理插件的进程发起TCP连接请求,连接成功后,可在调试界面输入变量名,设置需要分析的H文件目录,工具下发打开调试变量请求,装置上传CPU字长信息、变量结构体名字。工具调试第1个变量时,打开相关文件,分析结构体定义和变量声明信息,计算出相对地址后,将变量类型、相对地址下发给装置,装置从元件注册表中查找到该变量对应文件的首地址,加上相对地址,如果是本插件变量,则访问变量的绝对地址,如果是其他插件变量,则转发给其他插件,由变量所在插件的系统程序访问变量地址,并将信息传输给管理插件,由管理插件上传变量值。支持周期上传和关闭变量。调试界面略——编者注。

结 语

本文阐述了嵌入式系统动态分配内存的调试方案,基于结构体首地址+变量相对地址信息,实现了嵌入式程序在实时运行模式下调试动态分配内存。该方案可以对程序的每个变量进行实时跟踪,快速定位运行工况下的程序问题,缩短了开发周期,已经在电力系统相关装置中应用,显著提高了调试效率。

编者注:本文为期刊缩略版,全文见本刊网站www.mesnet.com.cn。

[1] 李志丹.嵌入式软件调试方法研究[J].计算机与数字工程,2012,7(2):192-194,236.

[2] 陈宏君,刘克金,冯亚东,等.新一代保护测控装置配套工具软件设计与应用[J].电力系统自动化,2013,37(20):92-96.

[3] 李响,刘国伟,冯亚东,等.新一代控制保护系统通用硬件平台设计与应用[J].电力系统自动化,2012,36(14):52-55.

[4] Colin Walls.嵌入式软件开发精解[M].何小庆,张浩中,何灵渊,译.北京:机械工业出版社,2014.

[5] 赵香,耿锐,黄光红.C语言源码级调试器的设计与实现[J].计算机与现代化,2011(5):157-160.

[6] 徐超坤,朱婷,李威宣.基于模型的嵌入式C代码的实现与验证[J].单片机与嵌入式系统应用,2011(12):15-18.

陈宏君(高级工程师),主要研究方向为嵌入式软件平台开发。

郭国法,宫瑶,张开生

(陕西科技大学 电气与信息工程学院,西安 710021)

摘要: 针对传统嵌入式课程教学平台教学模式单一、辅助实验设置有局限性等问题,采用了嵌入式课程递阶教学平台,从嵌入式课程验证性基础实验出发,基于CDIO工程教学模式理念实现理论教学与实践应用的一体化。硬件采用核心板和拓展底板分离插拔式设计,底板功能模块化程序可适用于多种微处理器芯片,实现单片机核心板与嵌入式核心板源程序代码共享,满足嵌入式系统分层次递阶教学的要求。

关键词: CDIO;嵌入式教学平台;项目化;模块化

Abstract: Aiming at the problems of the embedded teaching platform such as teaching mode single and experimental setup has limitation,an embedded teaching platform is proposed,which is based on CDIO engineering teaching mode idea and realizes the integration of theoretical teaching and practical application.The hardware uses separate and plug design of the core board and the expansion board.The expansion board function modular program is applicable to a variety of microprocessor chip,which can realize the core board source application code sharing with the embedded core board.It can meet the requirements of hierarchical teaching in the embedded system.

Key words: CDIO;embedded teaching platform;project;modular

引 言

在信息技术和网络技术飞速发展的电子科技时代,嵌入式系统已经渗透到现代生活的方方面面,包括硬盘驱动器、遥控器、汽车防锁刹车、农业大棚温湿度控制、智能家居等。整个社会对掌握嵌入式技术的创新性人才求贤若渴,各高校对嵌入式系统课程教学越来越重视,因此培养出合格的创新性嵌入式技术人才迫在眉睫。但目前嵌入式课程教学实验平台多采用成熟的嵌入式开发板[1],仅以验证性实验为主,并且开发板芯片与功能硬件已经确定不容更改,学生在其实验平台上只能依照厂商提供的板载程序运行,观察实验现象,不利于学生掌握硬件原理、程序编译和调试的方法,不能进行深度嵌入式系统的开发,动手实践能力不足,同时传统的课程教学实验平台也不能较好地引导学生接受和掌握单片机与嵌入式系统相关知识,尤其是从单片机学习过渡到嵌入式系统学习的过程显得尤为艰辛,究其根本,原因是缺乏一种快速引导学生进入嵌入式学习的实验平台。

针对这种情况,采用软硬件资源完全开放的CDIO模式嵌入式课程递阶教学平台,CDIO代表构思(Conceive)、设计(Design)、实现(Implement)和运作(Operate)教学理念,倡导在工程基础知识、个人能力、人际团队能力和系统工程能力4个层面上进行综合训炼[2-5]。嵌入式课程递阶教学平台应用CDIO工程教育理念于理论教学与实验教学中,从实验项目策划设计到实验项目运行为教学实践全过程,采取多核硬件板与模块化软件设计相结合的方式,以满足不同层次的学生对嵌入式课程学习阶段的需求为目的,设置了相应的验证设计、综合设计及创新设计的进阶教学实验,让学生以主动的、实践的方式渐进式学习嵌入式课程,帮助学生快速从单片机的学习过渡到嵌入式系统学习当中,逐步具有设计开发嵌入式系统的能力,很好地解决传统嵌入式教学平台不能分层次递阶教学和实践的问题。

1 系统总体设计

嵌入式课程递阶教学平台主要由计算机和目标实验板两部分组成。目标实验板硬件采用多核心板适配通用功能拓展底板的双层结构设计思想,上层为核心板,下层为功能模块拓展底板,底层板与核心板的连接采用插拔的组合方式,插座的引脚与底层板的连接是固定的。底层板为通用功能模块拓展底板,使用过程中保持底层板不变,通过更换核心板使其分别当作嵌入式课程入门级单片机学习平台或者高层次的嵌入式系统学习平台使用,整体形成递阶式开放结构。

教学平台初期用于基于51系列单片机无操作系统教学模块,后期用于结合嵌入式操作系统的ARM7学习进程。在软件上,系统选用ARM公司推出的Keil μVision4作为开发工具,提供各个实验模块程序的主要框架及模块化程序函数调用入口。嵌入式操作系统选择性能稳定、可移植性好且功能强大的μC/OS-II操作系统。递阶教学平台模型框图如图1所示。

图1 嵌入式课程递阶教学平台模型图

上位机通过USB线与目标实验板串口相连,软件采用由VB编写的嵌入式递阶教学平台实验窗口,将嵌入式

课程教学所需的理论基础资源整合在上位机实验窗口下,构建一个完整的素材库,包括嵌入式课程教学PPT及实验演示视频、芯片和元器件数据手册、功能模块源代码库、嵌入式系统开发工具软件。软件系统平台还提供两个接口:教师接口和学生接口。教师接口用于添加素材库资源,学生接口便于学生进行理论化知识的学习和图形化编程的开发。学生根据自身掌握嵌入式知识的情况,有选择地访问上位机平台实验窗口中共享的素材库资源,在线学习理论化的嵌入式系统基础知识,也可将功能模块源代码下载到目标实验板上,完成相应实验项目。

1.1 核心板硬件设计

核心板由嵌入式微处理器、芯片最小系统、拓展板接口3部分组成,最小系统包括支持微处理器工作的时钟模块、Flash模块、复位模块[6-8]。核心板由易到难主要设置3种微处理器,分别为单片机AT89C51、STM32F103C8微处理器以及32位的ARM7微处理器LPC2103,并且将芯片全部I/O引脚引出来与通用功能拓展底板上留有的引脚接口相连。表1为单片机与嵌入式芯片对比表,通过3种学习难度递增的微处理器搭配底板形成层次教学平台。图2为硬件平台原理框图,其中虚线部分为需要安插的上层核心板位置。这3种芯片价格低廉、通用性强、功能完整,包括存储器、定时/计数器、可编程的I/O端口、可编程全双工串行端口、中断源,不同的芯片内集成了16位或32位中央处理器和ISP Flash存储单元,具有在系统可编程(ISP)特性,易于二次开发,能够满足教学平台基础实验和项目综合设计性实验的使用需求。

图2 硬件平台原理框图

表1 单片机与嵌入式芯片对比表

1.2 底层板设计

底层功能模块拓展板的设计主要以加强外围功能接口应用的学习为目的,设计了课程教学基础实验所需的多种不同功能模块和定向专业拓展模块。图2中实线部分为通用功能模块,主要包括:电源模块、I/O模块、串口模块、键盘模块、A/D转换模块、LED模块、LCD模块等。同时,底层板预留有可扩展I/O接口,学生可通过将自行设计的功能模块纳入下层拓展底板,构建个性化嵌入式系统。

定向专业拓展模块底板包括:ZigBee模块、蓝牙模块、传感器模块、GSM模块。各个功能模块为独立单元,由微处理器直接控制,同时各模块之间也可根据实验项目要求进行组合与拓展,来适配电子、控制、电气等不同专业学生的特定嵌入式系统综合实验与开发。

2 软件平台设计

在软件教学过程中经常会忽略模块化程序的深度应用,而模块化编程是组织良好程序结构的有效方法之一。复杂的工程都是由若干相对独立的功能模块嵌套组合而成,模块化编程设计可以化繁为简,并且为程序模块间的相互调用以及数据传递提供了便捷的途径,有助于程序的调试,增强了程序的可读性。

基于CDIO模式的嵌入式递阶教学平台采用ARM公司推出的Keil μVision4进行程序编译。针对底层板上不同的功能硬件,例如串口模块、键盘模块、A/D转换模块、LED模块等,教学平台将各个功能模块源程序模块化封装后生成的特定功能模块函数或文件集中存放在上位机教学平台实验窗口素材库中,便于使用者下载、编译。

2.1 功能程序模块化设计

在系统软件平台中,程序模块化封装过程略——编者注,由学生完成软件环境相关设置,并对芯片的各个功能进行配置,根据实验目的构思软件架构,有选择性地从模块素材库中下载所需的模块源文件。源文件由教学平台提供,根据功能的不同,编写模块源文件所需要的宏定义或结构体,提供C语言模块程序接口,方便学生调用。各功能模块程序由教学平台封装后得到唯一的封装函数或文件,并且仅实现对该功能模块硬件的驱动。不同的功能模块程序可以相互嵌套、调用和编译。考虑到预处理程序能够提供条件编译的功能,可以按不同的条件编译不同的程序部分,产生不同的目标代码。基于此,在同一模块的源文件中使用条件编译,软件系统根据宏定义及芯片配置,有选择性地编译单片机程序的代码部分或者嵌入式系统程序的代码部分,实现单片机核心板与嵌入式核心板源程序代码共享,提高两种代码的对比学习,有助于学生对知识的理解。

2.2 程序模块化编译举例

以矩阵键盘数码显示实验为例,实验系统包括硬件模块和软件模块。硬件模块包括2×8矩阵键盘输入模块、数码显示模块和74HC595级联模块。软件模块包括74HC595级联模块硬件驱动程序、数码管显示程序、按键扫描程序、取键值程序。

74HC595_Send Dat()为74HC595级联模块驱动程序函数,负责发送一个字节的数据到74HC595。Key.c文件对应2×8矩阵键盘功能模块目标代码,包括键扫描程序和取键值程序,此Key.c文件是教学平台窗口下提供2×8矩阵键盘驱动的预编译程序,平台软件系统需要根据实验所选微处理器为单片机AT89C51芯片或嵌入式LPC2103芯片的配置,以及I/O硬件接口设置对原始Key.c文件中的预编译目标代码重新宏定义,再条件编译生成新的模块化封装文件Key.c。Num show.c文件实现数码管显示功能,它的软件系统条件编译过程同Key.c,这里不再赘述。

学生实验时,在递阶教学平台软件系统工具软件窗口下打开Keil μVision4并新建工程,将已经依据实验要求重新条件编译生成的功能模块Key.c和Num show.c文件添加到工程中。打开main.c文件,依照键盘显示程序流程图编写主程序,定义头文件Key.h与Num show.h,并将其添加到main.c中。编译显示函数main.c时,只需根据接口的定义合理嵌套74HC595_Send Dat()、键扫描函数和取键值函数,然后通过调用数码管显示函数Num show()对结果进行显示,最终准确快速地完成整个程序代码的编写过程。

3 教学平台的CDIO应用模式分析

3.1 递阶教学平台CDIO模式的实现

嵌入式课程递阶教学实验平台是基于CDIO思想,即从构思、设计到实施、运作这一工程教学理念来实现嵌入式课程教学与实践一体化。整个教学平台以“实验”为核心,旨在让学生在学习实践过程中,逐步地从8位51系列经典单片机基础过渡到功能齐全的综合性单片机,最后递阶到ARM7体系,学习过程从简单到复杂、逐步深入[9-10]。

初级教学阶段对应于CDIO模式中的构思阶段,以运行LPC2103、STM32F103C8芯片模块程序,学生观察实验结果为主。将51单片机微处理器的硬件核心板与嵌入式微处理器的硬件核心板对比使用,采用统一的软件结构搭建起嵌入式的学习平台,保证能够快速进入嵌入式学习中。

第二阶段为设计阶段,教学平台为学生构思、搭建实验硬件电路提供完整的资料与环境支持。通过对嵌入式教学实验系统各个模块:UART、USB、LCD、触摸屏和矩阵键盘等常用接口操作实践,模仿改编实验程序,熟悉ARM7的无操作系统基础应用,为后续应用系统的开发做好铺垫。

在实施和运作阶段,从教学平台实验素材库提供的应用开发实验(例如D/A、A/D实验,LCD显示实验,触摸屏实验)切入,探索研究交叉编译环境的建立、调试方法和编程技术。熟练掌握51、ARM7基本编程,同时,学习编写系统的Bootloader程序以及实现μC/OS-II操作系统在STM32F103C8芯片上的移植和WinCE操作系统的移植,实现了操作系统各接口电路驱动程序和应用程序的编写也作为教学实验平台的一个重要功能。

3.2 CDIO应用模式下递阶实验设置

CDIO模式化设计的递阶实验系统有利于教师改革教学方法,从传统的纯理论教学改为理论与实践并重的项目教学,取得了较好实践效果。

教学平台基于AT89S51芯片、STM32F103C8芯片和LPC2103芯片,设置了基础教学实验,适用于多核实验平台和无操作系统实验平台的基础实验,包括:LED 8流水灯实验、LCD显示实验、2×8键盘显示实验、液晶显示实验、外部中断实验、串口通信实验、A/D 与D/A转换实验[11]。基于简单操作系统的综合实验包括:μC/OS-II操作系统移植;μC/OS-II操作系统任务的创建、挂起、恢复、删除实验;任务的中断和时钟实验;任务的同步和通信实验等。实验软件部分按照模块化进行设计,在实验教学中,使用软件模块化让学生可以自主选择实验项目内容,如:输入接口实验,可以根据自己的能力选择独立按键和矩阵键盘中的一个或者多个;输出接口实验,同样可以选择LED、数码管、点阵和液晶中的一个或者多个,这样有利于充分发挥学生的主观能动性,让学生自主设计实验项目以完成综合性、设计性实验[12]。

基于学生不同的研究方向可以设计创新性实验,有ZigBee模块配套的岛屿安防系统实验、基于温湿度传感器的农业大棚环境监控系统设计实验等。

结 语

嵌入式课程递阶教学平台经过调试和测试,实现了多核心板适配多功能扩展底板的使用模式,各个实验模块工作均比较稳定。实践教学结果证明,教学平台提供了丰富的接口资源,可进行二次开发,完全能够满足实验课程的要求,并帮助学生快速从单片机的学习过渡到嵌入式系统学习当中。基于CDIO理念设计了一系列配套的实验,以符合大众学生为目的,设置了普遍需要的基础实验以及综合实验,针对嵌入式专业的学生设置了更为专业的基本的嵌入式操作系统实验,以满足不同层次的学生。教学平台针对性强,教学效果明显,拥有广阔的教学应用前景,更重要的是能够增强高校大学生的形象思维与创新能力,为学生今后进一步深造或踏入社会进行相关系统的开发奠定扎实的基础。

编者注:本文为期刊缩略版,全文见本刊网站www.mesnet.com.cn。

参考文献

[1] 刘泉,李方敏,吕锋,等.现代嵌入式实践教学平台在实践教学中的应用[J].理工高教研究,2006,25(2):96-97.

[2] 郭明良,王朋,郭松林.基于CDIO模式的电类本科实践教学体系构建[J].中国电力教育,2014(2):158-159.

[3] 刘会英,盖玉先,徐宁.探索适合我国国情的CDIO工程教育模式[J].实验室研究与探索,2011,30(7):119-120.

[4] 朱向庆,黎东涛,苏超益,等.适合于项目教学法的三合一单片机实验箱设计[J].实验技术与管理,2013,80(7):55-59.

[5] 王朋,郭明良,王越明.“单片机原理及应用”课程的CDIO教学模式探索[J].中国电力教育,2014(14):83-84.

[6] 王朋.“单片机原理”实验教学体系建设[J].电气电子教学学报,2010,32(5):107-108.

[7] 桑静,徐金宏,赵伟.嵌入式辅助教学平台的构建[J].科学技术与工程,2010,10(36):9115-9117.

[8] 王高鹏,朱宁西.基于LPC2368嵌入式实验平台的构建[J].微计算机信息,2008,24(6-2):18-20.

[9] 章民融,徐亚锋.嵌入式教学关键点的研究和嵌入式实验教学平台的设计[J].计算机应用与软件,2009,26(3):160-162.

[10] 李东.提高单片机应用系统可靠性的研究[J].信阳师范学院学报:自然科学版,1999,12(3):354-357.

[11] 蒋跃文.以设计实验为主线的单片机实验平台的开发与应用[J].苏州大学学报:工科版,2010,30(1):28-31.

[12] 贾萍,丁向荣,胡美兰.“教、学、做”一体化单片机教学实验平台的设计与应用[J].实验技术与管理,2012,29(6):139-142.

(责任编辑:薛士然 收稿日期:2015-04-15)

Debugging Scheme of Dynamic Allocation Memory in Embedded Program※

Chen Hongjun,Feng Yadong,Wen Jifeng,Zhou Qiang

(NR Electric Co.,Ltd.,Nanjing 211102,China)

This paper proposes a variable debugging scheme of dynamic allocation memory in the embedded program.The application program is organized by the component,and the component's data is encapsulated by structure.The embedded system program provides the interface to record the head address and instance name of the structure.The upper computer debugging software analyzes the structure variable's relative address,then sends the information of name and relative address to the embedded server.The server calculates the absolute address by adding the head address and relative address,then accesses to the address and reads the data,sends the data to the debugging tool for displaying lastly.The debugging scheme has been used in the protection and monitoring device of the power system,which improves the diagnostic efficiency of the program.

embedded program;dynamic allocate;memory debugging;structure analysis

Platform Teaching Mode of Embedded Project Teaching Platform※

Guo Guofa,Gong Yao,Zhang Kaisheng

(College of Electrical and Information Engineering,Shanxi University of Science and Technology,Xi,an 710021,China)

TP393

A

士然

2015-04-20)

陕西省西安未央科技区项目“基于物联网的信息监控平台研究”(项目编号:2012-03);陕西校地合作项目-基于无线传感器网络的矿井环境及人员监测系统研究(项目编号:2011K-29)。

文献标识码: A

猜你喜欢
项目化模块化
模块化自主水下机器人开发与应用
模块化住宅
现代装饰(2020年5期)2020-05-30 13:01:56
ACP100模块化小型堆研发进展
中国核电(2017年2期)2017-08-11 08:00:56
模块化VS大型工厂
流程工业(2017年4期)2017-06-21 06:29:50
家居空间设计项目化教学模式改革的国际比较研究
浅谈项目化教学对中职学生技能水平提升的影响
职业(2016年11期)2016-11-23 21:36:23
基于市场营销应用型人才培养的项目化教学模式研究
大经贸(2016年9期)2016-11-16 16:17:32
基于生产过程在电动汽车专业的项目化教学研究
企业导报(2016年6期)2016-04-21 16:57:35