软件架构.docx

上传人:b****0 文档编号:9474692 上传时间:2023-05-19 格式:DOCX 页数:22 大小:1.45MB
下载 相关 举报
软件架构.docx_第1页
第1页 / 共22页
软件架构.docx_第2页
第2页 / 共22页
软件架构.docx_第3页
第3页 / 共22页
软件架构.docx_第4页
第4页 / 共22页
软件架构.docx_第5页
第5页 / 共22页
软件架构.docx_第6页
第6页 / 共22页
软件架构.docx_第7页
第7页 / 共22页
软件架构.docx_第8页
第8页 / 共22页
软件架构.docx_第9页
第9页 / 共22页
软件架构.docx_第10页
第10页 / 共22页
软件架构.docx_第11页
第11页 / 共22页
软件架构.docx_第12页
第12页 / 共22页
软件架构.docx_第13页
第13页 / 共22页
软件架构.docx_第14页
第14页 / 共22页
软件架构.docx_第15页
第15页 / 共22页
软件架构.docx_第16页
第16页 / 共22页
软件架构.docx_第17页
第17页 / 共22页
软件架构.docx_第18页
第18页 / 共22页
软件架构.docx_第19页
第19页 / 共22页
软件架构.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

软件架构.docx

《软件架构.docx》由会员分享,可在线阅读,更多相关《软件架构.docx(22页珍藏版)》请在冰点文库上搜索。

软件架构.docx

软件架构

二、PITE3960软件(架构)综述

为实现多任务,系统使用了消息驱动方式,采用不可剥夺多任务机制(任务不能强行中止)。

主函数流程:

图2-1主函数流程(含消息循环)

消息队列优先级:

本架构任务切换是通过消息队列来实现的(如图2-3),保证了先触发先响应。

系统将会维护多个消息队列,所有产生的消息都会被插入相应队列中。

系统会依据队列优先级在队列中取出每一条消息,根据不同消息队列,而产生不同的消息,并将该消息发送给当前任务的消息处理函数。

队列优先级如下:

图2-2消息队列优先级

系统中使用的消息队列:

Queueg_sutIntQueue;中断消息队列(主要用于中断的切换)

Queueg_sutSysQueue;系统消息队列(主要用于各任务的切换)

Queueg_sutRecv0Queue;UART0接收数据队列

Queueg_sutTran0Queue;UART0发送数据队列

Queueg_sutRecv1Queue;UART1接收数据队列

Queueg_sutRecordQueue;放电电池记录指针索引数据队列

系统任务变量:

unsignedcharg_ucplay_back;数据回放标志0x0f:

yes0x00:

no

任务的基本架构:

任务由消息处理分支构成,根据分支语句执行不同的操作。

每个任务都有自己的消息处理分支,任务的消息处理函数执行完成后,才能返回主流程,响应其它消息,所以对于耗时较多的任务应尽量精简,或拆分成多个任务。

同时这种运行机制存在较大的局限性,目前适用于较小的应用平台。

较大的应用中消息检查机制应做相应修改,避免消息检测循环消耗太多的时间和资源。

任务中必须要包含的是PITE_DefTaskProc()函数,用于响应输入操作。

其余消息视具体任务添加。

图2-3任务消息循环及系统消息结构

任务的消息结构:

message:

是从当前消息队列中获得的消息值,消息值如图4所示。

para、para1、para1:

是本消息附带的参数。

 

系统中的消息:

图2-4系统中的消息

系统软件模块组织结构:

图2-5软件模块框图

系统中定义的任务:

PITE_RETMenuMain(PPITE_MESSAGEMsg);主菜单

PITE_RETMenuService(PPITE_MESSAGEMsg);系统管理菜单

PITE_RETMenuDataMenage(PPITE_MESSAGEMsg);数据管理菜单

PITE_RETMenuSysSet(PITE_MESSAGE*Msg);系统设置菜单

PITE_RETMenuRevise(PITE_MESSAGE*Msg);计量校正菜单

PITE_RETMenuRadioSetup(PITE_MESSAGE*Msg);放电参数设置菜单

PITE_RETTaskCalibrationZero(PITE_MESSAGE*Msg)零点校正

PITE_RETTaskCalibrationCoef(PITE_MESSAGE*Msg)增益校正

PITE_RETTaskCalibrationSensor(PITE_MESSAGE*Msg);传感器选择

PITE_RETTaskCaliLoadFactoryPara(PITE_MESSAGE*Msg);载入缺省值(厂值)

PITE_RETTaskCaliSetFactoryPara(PITE_MESSAGE*Msg);设置缺省值(厂值)

PITE_RETTaskCaliSetDefault(PITE_MESSAGE*Msg);设置缺省值

PITE_RETTaskCalibrationLogin(PITE_MESSAGE*Msg);触摸屏校准

PITE_RETTaskCaliSetupRadioBoxId(PITE_MESSAGE*Msg);分机盒设置ID编号

PITE_RETTaskCaliSetupRadioBoxCoef(PITE_MESSAGE*Msg);分机盒校正

PITE_RETTaskDateSet(PITE_MESSAGE*Msg);设置日期时间

PITE_RETTaskVersionShow(PITE_MESSAGE*Msg);软件版本声明

PITE_RETTaskBackLight(PITE_MESSAGE*Msg);设置背光

PITE_RETTaskUpdateFont(PITE_MESSAGE*Msg);字库更新

PITE_RETTaskGetPassword(PITE_MESSAGE*Msg);设置密码任务

PITE_RETTaskFileList(PITE_MESSAGE*Msg);数据管理任务

PITE_RETTaskFlashFrame(PITE_MESSAGE*Msg);数据清除任务

PITE_RETTaskDisplayScreen(PITE_MESSAGE*Msg);屏幕数据回放任务

PITE_RETTaskGeneralTest(PITE_MESSAGE*Msg);综合测试任务

PITE_RETTaskVoltagePrecise(PITE_MESSAGE*Msg)稳压测试任务

PITE_RETTaskCurrentPrecise(PITE_MESSAGE*Msg)稳流测试任务

PITE_RETTaskRipple(PITE_MESSAGE*Msg)纹波测试任务

PITE_RETTaskBatteryDischarge(PITE_MESSAGE*Msg)电池放电任务

扫描触摸屏:

由定时器T0产生一个定时器消息(INT_TIMER),用于扫描触摸屏。

如有有效触摸屏按下将直接执行区域响应函数,具体说明见附录2、触摸屏坐标说明。

默认消息处理函数:

图2-6默认消息处理

默认的消息处理函数将负责处理那些任务中不处理消息。

PITE_RETPITE_DefTaskProc(PITE_MESSAGE*Msg)默认处理函数,包含时钟扫描、

按键处理和串口数据收发

voidRtcShow(void);默认RTC处理

voidScom485QueueDataCheck(void);485通信串口接收中断处理

voidRadioQueueDataCheck(void);无线通信串口接收中断处理

voidBatteryDischargeSendData2PC(void);串口发送数据处理

voidFAT_FileMsg(void);FAT消息处理

voidUSB_Msg(void);USB消息处理

综上所述,本系统是一个伪多任务操作系统,编程者了解后可以自定义消息和任务流程,实现特定的功能,但要注意该架构的使用中,消息处理函数一定要清晰。

关于任务的添加见附录5、任务添加说明。

六、附录

1、系统资源分配说明

图6-1片上FLASH空间分配图6-2片上RAM空间分配图6-3片外RAM空间分配

图6-4片外FLASH空间分配图6-5片外EEPROM空间分配

LPC2214内部共有256KFLASHROM和16KRAM,外部扩展512KRAM、16MFLASHROM和256KEEPROM。

程序空间的分配如图6-1所示,前面8K(0—8192)存储的是用于更新主程序(8192之后248K程序存储空间)的代码,8K之后的248K程序存储空间存储的是应用程序代码。

数据空间的分配如图6-2、图6-3、图6-4、图6-5所示。

片上16KRAM主要用于堆栈空间。

片外512KRAM用于存储系统变量,数据队列,各种测量数据。

片外256K的EEPROMROM用于存储LCD对比度、管理员标志、触摸屏坐标基准值、BMP数字名、计量校正参数、电流传感器参数、监测设置参数和FDT首地址。

2、触摸屏坐标说明

(1)、坐标的获取

由于LCD屏大小为320×240像素,故ADS7846采用12位A/D转换,可精确到X或Y方向上的1/4096。

触摸屏中每一点经过ADS7846的转换后都会获得一组(X和Y)A/D值(触摸屏坐标),该值经过坐标变换后可转变为LCD屏坐标,转换过程如下:

①:

计算A/D值在触摸屏坐标中的偏移值OFFSET;

②:

乘上LCD坐标系相对于触摸屏坐标系的转换比率系数K;

公式如下:

式中:

A/D:

实际采样A/D值;

LCD_MAX:

LCD屏坐标最大值(对于X轴为319,对于Y轴为239);

LCD_MIN:

LCD屏坐标最小值(对于X轴为0,对于Y轴为0);

TOUCH_MAX:

触摸屏坐标(A/D值)最大值;

TOUCH_MIN:

触摸屏坐标(A/D值)最小值;

X轴坐标变换程序代码为:

TOUCH32AD2X(TOUCH32adx){

TOUCH32r;

r=adx-g_sScreenMinMax[COORD_X].Min;

r*=TOUCH_XSIZE-1;

return(r/(g_sScreenMinMax[COORD_X].Max-g_sScreenMinMax[COORD_X].Min));}

(2)、坐标的响应

图6-6触摸屏坐标

参考上图,屏幕中有一区域AREA,(X1,Y1)是其左上角坐标,(X2,Y2)是右下角坐标。

在点击屏幕时,触点只要在(X1,Y1)和(X2,Y2)矩形区域内均认为是触摸该区域有效,就可进行进一步的操作。

程序中屏幕中每个显示有效的区域点都按照结构AREA的大小连续存储在屏幕区域(坐标)列表g_stScrList中,当有有效的坐标产生时,通过调用FindScrList()函数来判断该坐标是否在g_stScrList存储的有效区域内,再做具体操作。

3、文件管理部分说明

文件管理采用简单FAT文件系统。

文件系统由以下3部分组成:

1:

文件分配表区(FAT);

2:

文件目录表区(FDT);

3:

数据区。

(1):

文件分配表存放Flash存储器上所有区块的占用与空闲情况以及每个文件的存储连接结构。

本Flash文件系统中使用15位FAT,最大可管理2的15次方(32768)个存储单元。

(2)文件目录表紧跟在FAT表之后,存放F1ash文件系统中每一个文件的名字、长度、属性、生成的时间,大小以及该文件的存储链在文件分配表中的入口。

(3)数据区域用于存放数据。

本Flash文件系统中,数据块分配的单位是512字节。

注意:

单次写入数据最大为256KB。

图6-7Flash文件系统

5、任务添加说明

图6-8任务的基本结构

1、任务结构

从主程序消息循环及消息切换中可知,本系统中包含消息队列,一个任务基本的框架包含有分支语句判断消息类型,并调用相应消息处理函数,不同的消息由任务的不同部分进行处理。

1处理新建任务消息处理函数(例如VoltagePreciseInitiate());

2按键消息处理函数;

3DSP中断消息处理函数(例如VoltagePreciseDspIntResponse());

4RTC中断消息处理函数(例如VoltagePreciseRtcResponse());

5默认消息处理函数(例如PITE_DefTaskProc());

当然可根据实际需要增加或减少,例如PITE_RETTaskDisplayScreen(PITE_MESSAGE*Msg)中就没有按键消息处理函数。

需要注意的是按键消息处理函数,仅在menu.c中有保留(MenuResponse()),其余的在本架构中被触摸屏区域处理函数替换。

任务对外只提供一个接口函数。

2、任务添加

⑴、在Msg.c中定义任务的显示菜单(如果需要显示为菜单)。

参考菜单结构的命名(例如l_sutMenuSysMain和l_apucMenuMain)

⑵、在具体任务C文件中定义任务的接口函数。

例如

PITE_RETTaskVoltagePrecise(PITE_MESSAGE*Msg)

{

……………..

}

⑶、在具体任务H文件中声明任务的接口函数。

例如PITE_RETTaskVoltagePrecise(PITE_MESSAGE*Msg);

⑷、在需要切换任务的地方调用函数PITE_StartNewTask()来切换任务。

例如PITE_StartNewTask(TaskVoltagePrecise);

6、ADS编译设置说明

在分散加载文件mem_c.scf中需设置加载域和运行域地址为0x0002000,如果不是使用USB更新而是使用ISP更新,则需设置为0x0000000。

在拷贝的工程目录中找到*.mcp工程文件并打开,之后先在ADS工程生成目标选择

DebugInChipFlash,接着点击工程设置图表按钮

参考下文进行工程的地址设置、输出文件设置、编译选项等设置,之后再点击同步修改日期图表按钮

检查文件更新情况(是否需要编译),检查工程中每个文件的修改日期,若发现有更新,则在Touch栏标记

,最后点击编译连接图表按钮

完成编译连接。

ADS编译环境编译器设置中,TargetSettings设置Linker下拉列表中选择ARMLinker,Post-Linker下拉列表中选择ARMFromELF。

图6-9

 

ADS编译环境编译器设置中,ARMLinker设置Output选项卡中Linktype单选框选择Scatterd,Scatter编辑框中输入mem_c.scf文件所在目录。

图6-10

ADS编译环境编译器设置中,ARMLinker设置Option选项卡中Imageentrypoint参数需设置为0x0002000

图6-11

DS编译环境编译器设置中,ARMfromELF设置,Outputformatz下拉列表中选择Intel32bitHex,Outputfilename中设置输出文件名为3980B.HEX(内容自定,最好与应用程序相关)

图6-12

7、汉字显示说明

1、汉字取摸

以汉字中为例,使用宋体12,字体对应的点阵为:

宽x高=16x16。

生成字模时,横向取模,对点阵中有笔画的取1,无笔画(背景)的取0,每行可生成2个字节数据,16x16点阵可生成32字节数据。

图6-13中字点阵图图6-14中字数字化图6-15中字字模

2、汉字显示

在GB2312-80标准中每个汉字(图形符号)采用双字节表示,第一个字节的范围从1-87(区码),0xA1-0xF7(机内码),共87种,第二个字节的范围从1-94(位码),0xA1-0xFE(机内码),共94种,利用这两个字节共可定义出87*94=8178种汉字,实际共用6763个汉字。

if0xA1<=高字节<=0xF7:

则是GB2312字符

在GBK编码(不是国家标准,而只是规范)兼容GB2312字符集及其编码,共收录汉字21003个、符号883个,并提供1894个造字码位,简、繁体字融于一库。

第一字节的值在0x81~0xFE之间,第二字节的值在0x40~0xFE,除去0x7F一线。

if0x81<=高字节<=0xFEand(0x40<=低字节<=0x7Eor0x7E<=低字节<=0xFE):

则是GBK字符。

在Windows95/98/NT/2000(简体中)中使用的都是GBK字符集。

字符显示是按从左到右,从上到下一点一点的在显示缓冲区显示,主要代码说明如下:

字符显示流程如下图所示:

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2