嵌入式实习报告基于Wince的个人通讯录开发.docx

上传人:b****5 文档编号:12391368 上传时间:2023-04-18 格式:DOCX 页数:28 大小:229.80KB
下载 相关 举报
嵌入式实习报告基于Wince的个人通讯录开发.docx_第1页
第1页 / 共28页
嵌入式实习报告基于Wince的个人通讯录开发.docx_第2页
第2页 / 共28页
嵌入式实习报告基于Wince的个人通讯录开发.docx_第3页
第3页 / 共28页
嵌入式实习报告基于Wince的个人通讯录开发.docx_第4页
第4页 / 共28页
嵌入式实习报告基于Wince的个人通讯录开发.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

嵌入式实习报告基于Wince的个人通讯录开发.docx

《嵌入式实习报告基于Wince的个人通讯录开发.docx》由会员分享,可在线阅读,更多相关《嵌入式实习报告基于Wince的个人通讯录开发.docx(28页珍藏版)》请在冰豆网上搜索。

嵌入式实习报告基于Wince的个人通讯录开发.docx

嵌入式实习报告基于Wince的个人通讯录开发

淮阴工学院

嵌入式系统开发与应用工程实习报告

选题名称:

基于WinCE的个人通讯录设计

系(院):

计算机工程学院

专业:

班级:

姓名:

学号:

指导教师:

学年学期:

2012~2013学年第1学期

2012年12月28日

设计任务书

课题

名称

基于WinCE个人通讯录开发

设计

目的

1.了解个人通讯录的基本功能;

2.理解基于WinCE开发应用系统的基本思路及方法;

3.学习基于WinCE应用程序的开发过程及资料收集与整理,学会撰写课程设计报告;

4.学会对所学知识进行总结与提高;

实验

环境

1.Windows2000以上操作系统;

2.WindousCE开发环境;

任务

要求

1.利用课余时间去图书馆或上网查阅课题相关资料,深入理解课题含义及设计要求,注意材料收集与整理;制定完整的设计方案,结合框图进行说明。

2.在第17周末之前完成预设计,并请指导教师审查。

通过后方可进行下一步工作;

3.按指导书要求设计软件,实现设计的功能,并显示正确的结果;

4.要求形成稳定的程序软件,可以在实验箱上进行下载验证,方可申请参加答辩;

工作进度计划

序号

起止日期

工作内容

1

2012.12.17~2012.12.18

环境的安装和设置以及熟悉环境的操作和使用方法。

2

2012.12.19~2012.12.24

编写软件代码,调试与完善,完成硬件调试。

3

2012.12.25~2012.12.26

测试程序,优化代码,增强功能,撰写课程设计报告。

4

2012.12.27~2012.12.28

提交软件代码、硬件电路成果和设计报告,参加答辩。

指导教师(签章):

年月日

 

摘要:

随着计算机技术的发展,嵌入式系统成为当前最热门最有发展前途的IT应用领域之一。

高性能微处理器和嵌入式操作系统相结合的高端应用是嵌入式系统发展的必然趋势。

WindowsCE是微软公司嵌入式、移动计算平台的基础,它是一个开放的、可升级的32位嵌入式操作系统,是基于掌上型电脑类的电子设备操作系统,它是精简的Windows95,WindowsCE的图形用户界面相当出色。

WindowsCE中的C代表袖珍(Compact)、消费(Consumer)、通信能力(Connectivity)和伴侣(Companion);E代表电子产品(Electronics)。

增进工作产能和效率的通讯录、日历行程、工作管理、MicrosoftPocketExcel与MicrosoftPocketWord控制台可以控制并管理WindowsCE与办公室PC的连结。

这让在您的PC与PDA之间转移资料并与他人透过电子邮件及红外线无线电通讯,同时与其他手携式设备交换资料。

利用便携式InternetExplorer遨游网络,并使你的HPC达到最大的功用。

从随时随地的使用电脑及PDA,到智慧型家电用品及丰富的多媒体家庭剧院,MicrosoftWindowsCE为工作、家庭及其间的任何一部分开启了动态的、崭新的开发远景。

这个模块化、可自订的作业系统将Windows平台延伸到桌面之外,到达更小、更机动性、更特别的装置之上,然而它的Windows血统则确保了它的相容性,并且支援了更广泛的开发基础。

MicrosoftWindowsCE揭露了革命性的系统架构,可以让身为开发者或科技领导者的您,扩展消费者及工业电子上的新市场。

关键词:

嵌入式系统;WindowsCE操作系统;个人通讯录

目录

1课题综述1

1.1课题来源、意义、预期目标1

1.2面对问题2

2系统分析2

2.1基础知识2

2.2基本思路3

2.3功能模块框图4

3流程图4

3.1文件模块4

3.2通讯录模块5

4代码编写6

4.1全局数据6

4.2程序入口及初始化6

4.3删除数据库模块8

4.4退出模块8

4.5新建模块8

4.6编辑模块9

4.7删除记录模块10

4.8排序模块11

4.9帮助模块11

4.10列表显示模块11

5程序调试12

6运行与测试13

总结16

致谢17

参考文献18

1课题综述

嵌入式系统是当今最热门的计算机应用领域之一,被广泛地应用到工业控制系统、仿真系统、医疗仪器、信息家电、通信设备等众多领域中。

嵌入式产品的巨大需求不仅为嵌入式市场展现了美好前景,注入了新的生命,同时也对嵌入式系统技术,特别是软件技术提出新的挑战,这主要包括:

支持日趋增长的功能密度、灵活的网络联接、轻便的移动应用和多媒体的信息处理。

该工程实习需要在ARM9的硬件平台和WindowsCE操作系统下实现个人通迅录。

首先,需要在理解WindowsCE操作系统的工作原理的基础上知道如何在ARM9上移植。

然后,在移植后的平台上实现个人通迅录。

最终的实习结果需要WindowsCE在ARM9上运行,并编程实现个人通迅录的开发。

1.1课题来源、意义、预期目标

1.1.1课题来源、意义

广义地讲,凡是不用于通用目的的可编程计算机设备,就可以算是嵌入式计算机系统。

狭义上而言,嵌入式系统是以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗,严格要求的专用计算机系统国际电气与电子工程师协会(EIE)E对嵌入式系统的定义:

嵌入式系统是用来控制或监视机器、装置或工厂等大规模系统的设备。

嵌入式系统是软件和硬件的综合体,整个综合体的设计目的在于满足某种特殊功能,并应用于各类具体的应用系统中,其范围和领域都十分广泛,几乎包括了我们周围的所有电器设备,如:

电视机顶盒、掌上PDA、移动计算设备、多媒体设备、医疗仪器乃至路由器、交换机等。

通过对嵌入式课程的学习以及WindowsCE开发的学习,本小组成员对在WindowsCE操作系统上的软件开发产生了极大的兴趣,在老师的帮助下,选择本课题,一方面为了提高我们的实践能力,让我们学以致用,能灵活运用所学的知识进行再创造,另一方面充分发挥我们的兴趣,在此基础上实现较为理想的成绩。

1.1.2预期目标

在VS2005模拟终端上实现个人通迅录,WindowsCE操作系统在ARM9上的移植,最终需要WindowsCE终端所模拟的功能在ARM9上运行,包括编程实现个人通迅录的开发。

基本功能实现添加、删除、编辑等。

1.2面对问题

WindowsCE6.0的体系结构分为用户模式和内核模式,驱动程序也可以被加入到内核中,以前的.exe可执行模块都变成了.dll,它将所有系统需要提供的服务部分“转移”到系统内核的虚拟机,这样当发生系统调用时,就变成了进程内的一个调用。

虽然执行效率提高,但是稳定性降低了。

很多服务已经不再是一个单独进程,而是一个个系统调用,WindowsCE5.0提供的各种功能将由kernel.dll来替代,NK.exe中仅仅包含一些OAL代码和保证兼容的程序体系结构的变化并没有对二次开发厂商造成很大影响,并保证了兼容性,其补救措施就是在内核中增加了K.Coredll.dll模块

窗口是微软Windows操作系统的主要用户界面,在Windows操作系统中无处不在,桌面是一个窗口,任务栏是一个窗口,甚至连任务栏上的开始按钮都是一个窗口,微软提供一系列的预定义的用户界面元素,简单的像按钮,复杂的如多行文本编辑控件。

WindowsCE支持与其他版本Windows操作系统相同的标准的内置控件集。

在本课题就是基于窗口的图形用户界面,在使用时首先解决界面的设计,窗口的创建包括设计一个窗口类、注册窗口类、创建窗口显示及更新窗口,这是首要的,另外,至关重要的就是数据库的设计。

2系统分析

2.1基础知识

对于解决本课题,需要解决很多WindowsCE操作系统的相关知识,窗口的创建就是其一,另外还有例如消息循环,Windows系统是一个消息驱动的操作系统,消息是应用程序与操作系统交互的手段,消息的产生来源于系统事件和用户事件,通过消息循环驱动应用程序的运行。

与消息循环相关的函数:

1.GetMessage()

该函数从应用程序的消息队列中取得一条消息。

如果当时没有消息,这个函数就等待,调用该函数的线程就阻塞直到有消息到来程序的生命靠该函数来维持,如果收到WM_QUIT消息,则该函数返回0

2.TranslateMessage()

该函数用于将虚拟键消息转换为字符消息

3.DispatchMessage()

该函数分派一个消息到窗口过程由窗口过程对消息进行处理具体过程,将消息回传给操作系统,由操作系统调用窗口过程对消息进行处理。

此外,数据库也是必须掌握的基础知识。

WindowsCE数据库两种数据库:

老的版本——CE数据库(CEDB),支持4级数据库排序索引;新的版本——嵌入式数据库(EDB),能够高效地处理大数据集合,支持事务,拥有更加灵活的数据类型,也支持支持16级数据库排序索引,本课程实训中使用的就是第一种数据库。

WindowsCE提供一套基本的数据库功能来帮助应用程序组织和管理简单的数据结构WindowsMobile设备通过数据库API管理地址薄、任务列表、电子邮件消息,可能不能胜任比较复杂的数据库,仅能管理存在于小型个人设备上的相关数据,属性数目受到限制,属性值的大小也受到限制。

2.2基本思路

首先使用VS2005模拟出基本的功能,再在WindowsCE下仿真,最后移植到ARM开发板上。

详细如下:

安装基于WinCE的应用程序的开发工具:

PlatformBuilder,它能够产生WinindowsCE操作系统内核,能够用户开发WinCE的应用程序以及动态链接库,一旦修改代码,必须重新编译,容易调试内核,不容易调试应用程序。

使用VisualStudio.NET,开发基于.NETCompactFramework1.0和.NETCompactFramework2.0的托管代码,也可以使用C/C++语言来开发本机代码,VS.NET具有完整的开发环境,目标平台上需要安装.NETcompactframework,于调试和测试。

获得特定WindowsCE平台的SDK.在WindowsCE模拟器上编辑和调试代码.在实际目标平台上,编译、运行程序,如果需要在设备上调试程序,可以通过ActiveSync.通过微软或第三方提供两种方法获得SDK。

然后在模拟器下编程和调试,主要工具是Vs2005、EmbeddedVisualC++,使用这两种工具的编译和调试功能,完成对项目的模拟测试。

接着在目标机上的运行和调试,根据目标机使用的CPU编译程序下载这个可执行文件到目标机上,然后运行该可知行文件,如果需要可以使用ActiveSync一步一步调试程序。

ActiveSync提供了一种支持,用来同步基于桌面Windows系统和基于CE.NET的便携式系统间的数据,它使用时间标记(stamps)和用户参数来跟踪两个系统间的数据改变,并传送相应的数据使得每个系统上的数据都是最新的,过时的或者冗余的数据会被删除。

ActiveSync支持USB、红外、调制解调器,以及Ethernet等多种连接。

不支持CE设备间的数据同步,也不支持CE设备和服务器间的数据同步。

2.3功能模块框图

主要包括文件(删除整个数据库、退出),通讯录(增加、删除、编辑、按姓名排序、按号码排序、按分类排序)和帮助。

2.3.1文件

文件菜单包括删除整个数据库和退出两个子菜单。

功能模块图如2-1所示。

 

2.3.2通讯录

通讯录菜单包括增加、删除、编辑、排序等功能。

功能模块图如2-2所示。

 

2.3.3帮助

帮助模块显示帮助信息。

3流程图

3.1文件模块

文件模块包括删除整个数据库和退出两个功能。

顾名思义,删除整个数据库功能用来删除所有记录,即通俗意义上的清空通讯录。

退出功能就是退出通讯录,结束所有编辑、添加等活动。

3.1.1删除全部数据库

删除整个数据库功能流程图如3-1所示。

 

 

3.1.2退出

退出功能流程图如3-2所示。

 

3.2通讯录模块

通讯录模块包括添加、删除、编辑、按姓名排序、按号码排序、按分类排序等功能。

删除功能流程图如3-3所示。

 

4代码编写

4.1全局数据

//Globaldata

constTCHARszAppName[]=TEXT("AlbumDB");

HINSTANCEhInst;//Programinstancehandle

HANDLEg_hDB=INVALID_HANDLE_VALUE;//Handletoalbumdatabase

CEOIDg_oidDB=0;//ObjectIDofthealbumdatabase

CEGUIDg_guidDB;//Guidfordatabasevolume

CENOTIFYREQUESTcenr;//Notifyrequeststructure.

intg_nLastSort=0;//Lastsortorderused

CEDBASEINFOEXg_diex;//Sortorderarray

//Thesetwovariablesrepresentaone-itemcachefor

//thelistviewcontrol.

intg_nLastItem=-1;

LPBYTEg_pLastRecord=0;

//主窗口过程函数的消息映射表用到decodeUINT结构

conststructdecodeUINTMainMessages[]={

WM_CREATE,DoCreateMain,

WM_SIZE,DoSizeMain,

WM_COMMAND,DoCommandMain,

WM_NOTIFY,DoNotifyMain,

WM_DESTROY,DoDestroyMain,

WM_DBNOTIFICATION,DoDbNotifyMain,

};

//CommandmessagedispatchforMainWindowProc

conststructdecodeCMDMainCommandItems[]={

IDM_DELDB,DoMainCommandDelDB,

IDM_EXIT,DoMainCommandExit,

IDM_NEW,DoMainCommandNew,

IDM_EDIT,DoMainCommandEdit,

IDM_DELETE,DoMainCommandDelete,

IDM_SORTNAME,DoMainCommandSort,

IDM_SORTARTIST,DoMainCommandSort,

IDM_SORTCATEGORY,DoMainCommandSort,

IDM_ABOUT,DoMainCommandAbout,

};

//Albumcategorystrings;mustbealphabetical.

constTCHAR*pszCategories[]={TEXT("Family"),TEXT("Friends"),

TEXT("collague"),TEXT("mates")};

4.2程序入口及初始化

//程序的入口

intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,

LPWSTRlpCmdLine,intnCmdShow){

HWNDhwndMain;

MSGmsg;

intrc=0;

//Initializethisinstance.

hwndMain=InitInstance(hInstance,lpCmdLine,nCmdShow);

if(hwndMain==0)

return0x10;

//Applicationmessageloop

while(GetMessage(&msg,NULL,0,0)){

TranslateMessage(&msg);

DispatchMessage(&msg);

}

//Instancecleanup

returnTermInstance(hInstance,msg.wParam);

}

HWNDInitInstance(HINSTANCEhInstance,LPWSTRlpCmdLine,intnCmdShow){

HWNDhWnd;

WNDCLASSwc;

INITCOMMONCONTROLSEXicex;

#ifdefined(WIN32_PLATFORM_PSPC)||defined(WIN32_PLATFORM_WFSP)

//ForWindowsMobiledevices,allowonlyoneinstanceoftheapp

hWnd=FindWindow(szAppName,NULL);

if(hWnd){

SetForegroundWindow((HWND)(((DWORD)hWnd)|0x01));

return(HWND)-1;

}

#endif

//Saveprograminstancehandleinglobalvariable.

hInst=hInstance;

//CreateaguidforthedatabaseExfunctionsthatpoints

//totheobjectstore.

CREATE_SYSTEMGUID(&g_guidDB);

memset(&cenr,0,sizeof(cenr));//Initializethenotifyrequest.

4.3删除数据库模块

//Commandhandlerroutines

//DoMainCommandDelDB-ProcessProgramDeletecommand.

LPARAMDoMainCommandDelDB(HWNDhWnd,WORDidItem,HWNDhwndCtl,

WORDwNotifyCode){

inti,rc;

i=MessageBox(hWnd,TEXT("Deletetheentiredatabase?

"),

TEXT("Delete!

"),MB_YESNO);

if(i!

=IDYES)

return0;

if(g_oidDB){

CloseHandle(g_hDB);

rc=CeDeleteDatabase(g_oidDB);

if(rc==0){

ErrBox(hWnd,TEXT("Couldn\'tdeletedatabase.rc=%d"),

GetLastError());

g_hDB=OpenDB(hWnd,NULL);//Openthedatabase.

return0;

}

g_hDB=INVALID_HANDLE_VALUE;

g_oidDB=0;

}

ListView_SetItemCount(GetDlgItem(hWnd,ID_LISTV),0);

return0;

}

4.4退出模块

//----------------------------------------------------------------------

//DoMainCommandExit-ProcessProgramExitcommand.

LPARAMDoMainCommandExit(HWNDhWnd,WORDidItem,HWNDhwndCtl,

WORDwNotifyCode){

SendMessage(hWnd,WM_CLOSE,0,0);

return0;

}

4.5新建模块

//DoMainCommandNew-ProcessProgramNewcommand.

LPARAMDoMainCommandNew(HWNDhWnd,WORDidItem,HWNDhwndCtl,

WORDwNotifyCode){

PCEPROPVALpcepv;

inti,rc;

CEOIDoid;

HWNDhwndLV=GetDlgItem(hWnd,ID_LISTV);

//Displaythenew/editdialog.

pcepv=0;

rc=DialogBoxParam(hInst,TEXT("EditAlbumDlg"),hWnd,

EditAlbumDlgProc,(LPARAM)&pcepv);

if(rc==0)

return0;

//Writetherecord.

oid=CeWriteRecordProps(g_hDB,0,NUM_DB_PROPS,pcepv);

if(!

oid)

ErrBox(hWnd,TEXT("WriteRecfail.rc=%d"),GetLastError());

ClearCache();//Clearthelvcache.

i=ListView_GetItemCount(hwndLV)+1;//Incrementlistview

//count.

ListView_SetItemCount(hwndLV,i);

InvalidateRect(hwndLV,NULL,TRUE);//Forceredraw.

return0;

}

4.6编辑模块

//DoMainCommandEdit-ProcessProgramEditcommand.

LPARAMDoMainCommandEdit(HWNDhWnd,WORDidItem,HWNDhwndCtl,

WORDwNotifyCode){

PCEPROPVALpcepv=0;

intnSel,rc;

WORDwProps=0;

DWORDdwRecSize,dwIndex;

CEOIDoid;

HWNDhwndLV=GetDlgItem(hWnd,ID_LISTV);

nSel=ListView_GetSelectionMark(hwndLV);

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

当前位置:首页 > 农林牧渔 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1