嵌入式实习报告基于wince个人通讯录开发.doc

上传人:文库蛋蛋多 文档编号:2392822 上传时间:2023-02-17 格式:DOC 页数:24 大小:323.50KB
返回 下载 相关 举报
嵌入式实习报告基于wince个人通讯录开发.doc_第1页
第1页 / 共24页
嵌入式实习报告基于wince个人通讯录开发.doc_第2页
第2页 / 共24页
嵌入式实习报告基于wince个人通讯录开发.doc_第3页
第3页 / 共24页
嵌入式实习报告基于wince个人通讯录开发.doc_第4页
第4页 / 共24页
嵌入式实习报告基于wince个人通讯录开发.doc_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《嵌入式实习报告基于wince个人通讯录开发.doc》由会员分享,可在线阅读,更多相关《嵌入式实习报告基于wince个人通讯录开发.doc(24页珍藏版)》请在三一办公上搜索。

1、淮阴工学院嵌入式系统开发与应用工程实习报告选题名称: 基于WinCE的个人通讯录设计 系(院): 计算机工程学院 专 业: 计算机科学与技术(嵌入式系统软件设计) 班 级: 嵌入式1091 姓 名: 邹敏文 学 号: 1091306437 指导教师: 刘 虎 肖绍章 学年学期: 2012 2013 学年 第 1 学期2012年 12 月 28 日设计任务书课题名称基于WinCE个人通讯录开发设计目的1. 了解个人通讯录的基本功能;2. 理解基于WinCE开发应用系统的基本思路及方法;3. 学习基于WinCE应用程序的开发过程及资料收集与整理,学会撰写课程设计报告;4. 学会对所学知识进行总结与

2、提高;实验环境1Windows 2000以上操作系统;2Windous CE开发环境;任务要求1. 利用课余时间去图书馆或上网查阅课题相关资料,深入理解课题含义及设计要求,注意材料收集与整理;制定完整的设计方案,结合框图进行说明。2. 在第17周末之前完成预设计,并请指导教师审查。通过后方可进行下一步工作;3. 按指导书要求设计软件,实现设计的功能,并显示正确的结果;4. 要求形成稳定的程序软件,可以在实验箱上进行下载验证,方可申请参加答辩;工作进度计划序号起止日期工 作 内 容12012.12.172012.12.18环境的安装和设置以及熟悉环境的操作和使用方法。22012.12.19201

3、2.12.24编写软件代码, 调试与完善,完成硬件调试。32012.12.252012.12.26测试程序,优化代码,增强功能,撰写课程设计报告。42012.12.272012.12.28提交软件代码、硬件电路成果和设计报告,参加答辩。指导教师(签章): 年 月 日 摘要:随着计算机技术的发展,嵌入式系统成为当前最热门最有发展前途的IT应用领域之一。高性能微处理器和嵌入式操作系统相结合的高端应用是嵌入式系统发展的必然趋势。WindowsCE是微软公司嵌入式、移动计算平台的基础,它是一个开放的、可升级的32位嵌入式操作系统,是基于掌上型电脑类的电子设备操作系统,它是精简的Windows 95,W

4、indows CE的图形用户界面相当出色。Windows CE中的C代表袖珍(Compact)、消费(Consumer)、通信能力(Connectivity)和伴侣(Companion);E代表电子产品(Electronics)。增进工作产能和效率的通讯录、日历行程、工作管理、Microsoft Pocket Excel与Microsoft Pocket Word控制台可以控制并管理Windows CE与办公室PC的连结。这让在您的PC与PDA之间转移资料并与他人透过电子邮件及红外线无线电通讯,同时与其他手携式设备交换资料。利用便携式Internet Explorer遨游网络,并使你的HPC达

5、到最大的功用。从随时随地的使用电脑及PDA,到智慧型家电用品及丰富的多媒体家庭剧院,Microsoft Windows CE为工作、家庭及其间的任何一部分开启了动态的、崭新的开发远景。这个模块化、可自订的作业系统将Windows平台延伸到桌面之外,到达更小、更机动性、更特别的装置之上,然而它的Windows血统则确保了它的相容性,并且支援了更广泛的开发基础。Microsoft Windows CE揭露了革命性的系统架构,可以让身为开发者或科技领导者的您,扩展消费者及工业电子上的新市场。关键词:嵌入式系统;Windows CE操作系统;个人通讯录目录1 课题综述11.1 课题来源、意义、预期目标

6、11.2 面对问题22 系统分析22.1 基础知识22.2 基本思路32.3 功能模块框图43 流程图43.1 文件模块43.2 通讯录模块54 代码编写64.1 全局数据64.2 程序入口及初始化64.3 删除数据库模块84.4 退出模块84.5 新建模块84.6 编辑模块94.7 删除记录模块104.8 排序模块114.9 帮助模块114.10 列表显示模块115 程序调试126 运行与测试13总 结16致 谢17参考文献181 课题综述嵌入式系统是当今最热门的计算机应用领域之一,被广泛地应用到工业控制系统、仿真系统、医疗仪器、信息家电、通信设备等众多领域中。嵌入式产品的巨大需求不仅为嵌入

7、式市场展现了美好前景,注入了新的生命,同时也对嵌入式系统技术,特别是软件技术提出新的挑战,这主要包括:支持日趋增长的功能密度、灵活的网络联接、轻便的移动应用和多媒体的信息处理。该工程实习需要在ARM9的硬件平台和Windows CE操作系统下实现个人通迅录。首先,需要在理解Windows CE操作系统的工作原理的基础上知道如何在ARM9上移植。然后,在移植后的平台上实现个人通迅录。最终的实习结果需要Windows CE在ARM9上运行,并编程实现个人通迅录的开发。1.1 课题来源、意义、预期目标1.1.1 课题来源、意义广义地讲,凡是不用于通用目的的可编程计算机设备,就可以算是嵌入式计算机系统

8、。狭义上而言,嵌入式系统是以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗,严格要求的专用计算机系统国际电气与电子工程师协会(EIE)E对嵌入式系统的定义:嵌入式系统是用来控制或监视机器、装置或工厂等大规模系统的设备。嵌入式系统是软件和硬件的综合体,整个综合体的设计目的在于满足某种特殊功能,并应用于各类具体的应用系统中,其范围和领域都十分广泛,几乎包括了我们周围的所有电器设备,如:电视机顶盒、掌上PDA、移动计算设备、多媒体设备、医疗仪器乃至路由器、交换机等。通过对嵌入式课程的学习以及Windows CE开发的学习,本小组成员对在Windows C

9、E操作系统上的软件开发产生了极大的兴趣,在老师的帮助下,选择本课题,一方面为了提高我们的实践能力,让我们学以致用,能灵活运用所学的知识进行再创造,另一方面充分发挥我们的兴趣,在此基础上实现较为理想的成绩。1.1.2 预期目标在VS2005模拟终端上实现个人通迅录, Windows CE操作系统在ARM9上的移植,最终需要Windows CE终端所模拟的功能在ARM9上运行,包括编程实现个人通迅录的开发。基本功能实现添加、删除、编辑等。1.2 面对问题Windows CE 6.0的体系结构分为用户模式和内核模式,驱动程序也可以被加入到内核中,以前的.exe可执行模块都变成了.dll,它将所有系统

10、需要提供的服务部分“转移”到系统内核的虚拟机,这样当发生系统调用时,就变成了进程内的一个调用。虽然执行效率提高,但是稳定性降低了。很多服务已经不再是一个单独进程,而是一个个系统调用,Windows CE 5.0提供的各种功能将由kernel.dll来替代,NK.exe中仅仅包含一些OAL代码和保证兼容的程序体系结构的变化并没有对二次开发厂商造成很大影响,并保证了兼容性,其补救措施就是在内核中增加了K.Coredll.dll模块窗口是微软Windows操作系统的主要用户界面,在Windows操作系统中无处不在,桌面是一个窗口,任务栏是一个窗口,甚至 连任务栏上的开始按钮都是一个窗口,微软提供一系

11、列的预定义的用户界面元素,简单的像按钮,复杂的如多行文本编辑控件。Windows CE支持与其他版本Windows操作系统相同的标准的内置控件集。在本课题就是基于窗口的图形用户界面,在使用时首先解决界面的设计,窗口的创建包括设计一个窗口类、注册窗口类、创建窗口显示及更新窗口,这是首要的,另外,至关重要的就是数据库的设计。2 系统分析2.1 基础知识对于解决本课题,需要解决很多Windows CE操作系统的相关知识,窗口的创建就是其一,另外还有例如消息循环,Windows系统是一个消息驱动的操作系统,消息是应用程序与操作系统交互的手段,消息的产生来源于系统事件和用户事件,通过消息循环驱动应用程序

12、的运行。与消息循环相关的函数:1GetMessage() 该函数从应用程序的消息队列中取得一条消息。如果当时没有消息,这个函数就等待,调用该函数的线程就阻塞直到有消息到来程序的生命靠该函数来维持,如果收到WM_QUIT消息,则该函数返回02TranslateMessage() 该函数用于将虚拟键消息转换为字符消息3DispatchMessage()该函数分派一个消息到窗口过程由窗口过程对消息进行处理具体过程,将消息回传给操作系统,由操作系统调用窗口过程对消息进行处理。此外,数据库也是必须掌握的基础知识。Windows CE数据库两种数据库:老的版本CE数据库(CEDB),支持4级数据库排序索引

13、;新的版本嵌入式数据库(EDB),能够高效地处理大数据集合,支持事务,拥有更加灵活的数据类型,也支持支持16级数据库排序索引,本课程实训中使用的就是第一种数据库。Windows CE提供一套基本的数据库功能来帮助应用程序组织和管理简单的数据结构Windows Mobile设备通过数据库API管理地址薄、任务列表、电子邮件消息,可能不能胜任比较复杂的数据库,仅能管理存在于小型个人设备上的相关数据,属性数目受到限制,属性值的大小也受到限制。2.2 基本思路首先使用VS2005模拟出基本的功能,再在Windows CE下仿真,最后移植到ARM开发板上。详细如下:安装基于WinCE的应用程序的开发工具

14、:Platform Builder,它能够产生Winindows CE 操作系统内核,能够用户开发WinCE 的应用程序以及动态链接库,一旦修改代码,必须重新编译,容易调试内核,不容易调试应用程序。使用Visual Studio.NET,开发基于.NET Compact Framework 1.0 和.NET Compact Framework 2.0 的托管代码,也可以使用C/C+ 语言来开发本机代码,VS.NET 具有完整的开发环境,目标平台上需要安装 .NET compact framework,于调试和测试 。获得特定Windows CE平台的SDK.在Windows CE 模拟器上编

15、辑和调试代码.在实际目标平台上,编译、运行程序,如果需要在设备上调试程序,可以通过 ActiveSync. 通过微软或第三方提供两种方法获得SDK。然后在模拟器下编程和调试,主要工具是Vs2005、Embedded Visual C+,使用这两种工具的编译和调试功能,完成对项目的模拟测试。接着在目标机上的运行和调试,根据目标机使用的CPU编译程序下载这个可执行文件到目标机上,然后运行该可知行文件,如果需要可以使用ActiveSync一步一步调试程序。 ActiveSync 提供了一种支持,用来同步基于桌面Windows 系统和基于CE.NET 的便携式系统间的数据,它使用时间标记(stamps

16、) 和用户参数来跟踪两个系统间的数据改变,并传送相应的数据使得每个系统上的数据都是最新的,过时的或者冗余的数据会被删除。 ActiveSync 支持USB、红外、调制解调器,以及 Ethernet等多种连接。不支持CE设备间的数据同步,也不支持CE 设备和服务器间的数据同步。 2.3 功能模块框图主要包括文件(删除整个数据库、退出),通讯录(增加、删除、编辑、按姓名排序、按号码排序、按分类排序)和帮助。2.3.1 文件文件菜单包括删除整个数据库和退出两个子菜单。功能模块图如2-1所示。文件删除整个数据库退出图2-1 文件模块功能图2.3.2 通讯录通讯录菜单包括增加、删除、编辑、排序等功能。功

17、能模块图如2-2所示。增加删除排序通讯录图2-2 通讯录模块功能图编辑按姓名按号码按分类2.3.3 帮助帮助模块显示帮助信息。3 流程图3.1 文件模块文件模块包括删除整个数据库和退出两个功能。顾名思义,删除整个数据库功能用来删除所有记录,即通俗意义上的清空通讯录。退出功能就是退出通讯录,结束所有编辑、添加等活动。3.1.1 删除全部数据库删除整个数据库功能流程图如3-1所示。开始进入文件模块删除全部数据库结束是否有记录跳出当前记录为空是否确定删除?是否取消删除成功图3-1 文件模块处理流程图3.1.2 退出退出功能流程图如3-2所示。开始进入文件模块退出结束是否退出返回否是退出成功图3-2

18、退出处理流程图3.2 通讯录模块通讯录模块包括添加、删除、编辑、按姓名排序、按号码排序、按分类排序等功能。删除功能流程图如3-3所示。开始进入通讯录模块删除某一条记录结束是否删除返回否是删除成功图3-3 删除处理流程图4 代码编写4.1 全局数据/ Global dataconst TCHAR szAppName = TEXT (AlbumDB);HINSTANCE hInst; / Program instance handleHANDLE g_hDB = INVALID_HANDLE_VALUE; / Handle to album databaseCEOID g_oidDB = 0; /

19、 Object ID of the album databaseCEGUID g_guidDB; / Guid for database volumeCENOTIFYREQUEST cenr; / Notify request structure.int g_nLastSort = 0; / Last sort order usedCEDBASEINFOEX g_diex; / Sort order array/ These two variables represent a one-item cache for/ the list view control.int g_nLastItem =

20、 -1;LPBYTE g_pLastRecord = 0;/主窗口过程函数的消息映射表用到decodeUINT结构const struct decodeUINT MainMessages = WM_CREATE, DoCreateMain, WM_SIZE, DoSizeMain, WM_COMMAND, DoCommandMain, WM_NOTIFY, DoNotifyMain, WM_DESTROY, DoDestroyMain, WM_DBNOTIFICATION, DoDbNotifyMain,;/ Command message dispatch for MainWindowPro

21、cconst struct decodeCMD MainCommandItems = 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

22、_ABOUT, DoMainCommandAbout,;/ Album category strings; must be alphabetical.const TCHAR *pszCategories = TEXT (Family), TEXT (Friends), TEXT (collague), TEXT (mates);4.2 程序入口及初始化/程序的入口int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow) HWND hwndMain; MSG

23、msg; int rc = 0; / Initialize this instance. hwndMain = InitInstance (hInstance, lpCmdLine, nCmdShow); if (hwndMain = 0) return 0x10; / Application message loop while (GetMessage (&msg, NULL, 0, 0) TranslateMessage (&msg); DispatchMessage (&msg); / Instance cleanup return TermInstance (hInstance, ms

24、g.wParam);HWND InitInstance (HINSTANCE hInstance, LPWSTR lpCmdLine, int nCmdShow) HWND hWnd; WNDCLASS wc; INITCOMMONCONTROLSEX icex;#if defined(WIN32_PLATFORM_PSPC) | defined(WIN32_PLATFORM_WFSP) / For Windows Mobile devices, allow only one instance of the app hWnd = FindWindow (szAppName, NULL); if

25、 (hWnd) SetForegroundWindow (HWND)(DWORD)hWnd) | 0x01); return (HWND)-1; #endif / Save program instance handle in global variable. hInst = hInstance; / Create a guid for the database Ex functions that points / to the object store. CREATE_SYSTEMGUID(&g_guidDB); memset (&cenr, 0, sizeof (cenr); / Init

26、ialize the notify request.4.3 删除数据库模块/ Command handler routines/ DoMainCommandDelDB - Process Program Delete command.LPARAM DoMainCommandDelDB (HWND hWnd, WORD idItem, HWND hwndCtl, WORD wNotifyCode) int i, rc; i = MessageBox (hWnd, TEXT (Delete the entire database?), TEXT (Delete!), MB_YESNO); if (

27、i != IDYES) return 0; if (g_oidDB) CloseHandle (g_hDB); rc = CeDeleteDatabase (g_oidDB); if (rc = 0) ErrBox (hWnd, TEXT (Couldnt delete database. rc=%d), GetLastError(); g_hDB = OpenDB (hWnd, NULL); / Open the database. return 0; g_hDB = INVALID_HANDLE_VALUE; g_oidDB = 0; ListView_SetItemCount (GetD

28、lgItem (hWnd, ID_LISTV), 0); return 0;4.4 退出模块/-/ DoMainCommandExit - Process Program Exit command.LPARAM DoMainCommandExit (HWND hWnd, WORD idItem, HWND hwndCtl, WORD wNotifyCode) SendMessage (hWnd, WM_CLOSE, 0, 0); return 0;4.5 新建模块/ DoMainCommandNew - Process Program New command.LPARAM DoMainComm

29、andNew (HWND hWnd, WORD idItem, HWND hwndCtl, WORD wNotifyCode) PCEPROPVAL pcepv; int i, rc; CEOID oid; HWND hwndLV = GetDlgItem (hWnd, ID_LISTV); / Display the new/edit dialog. pcepv = 0; rc = DialogBoxParam (hInst, TEXT (EditAlbumDlg), hWnd, EditAlbumDlgProc, (LPARAM)&pcepv); if (rc = 0) return 0;

30、 / Write the record. oid = CeWriteRecordProps(g_hDB, 0, NUM_DB_PROPS, pcepv); if (!oid) ErrBox (hWnd, TEXT (Write Rec fail. rc=%d), GetLastError(); ClearCache (); / Clear the lv cache. i = ListView_GetItemCount (hwndLV) + 1; / Increment list view / count. ListView_SetItemCount (hwndLV, i); Invalidat

31、eRect (hwndLV, NULL, TRUE); / Force redraw. return 0;4.6 编辑模块/ DoMainCommandEdit - Process Program Edit command.LPARAM DoMainCommandEdit (HWND hWnd, WORD idItem, HWND hwndCtl, WORD wNotifyCode) PCEPROPVAL pcepv = 0; int nSel, rc; WORD wProps = 0; DWORD dwRecSize, dwIndex; CEOID oid; HWND hwndLV = Ge

32、tDlgItem (hWnd, ID_LISTV); nSel = ListView_GetSelectionMark (hwndLV); if (nSel = -1) return 0; / Seek to the necessary record. oid = CeSeekDatabase (g_hDB, CEDB_SEEK_BEGINNING, nSel, &dwIndex); if (oid = 0) ErrBox (hWnd, TEXT (Db item not found. rc=%d), GetLastError(); return 0; / Read all propertie

33、s for the record. Have the system / allocate the buffer containing the data. oid = CeReadRecordPropsEx (g_hDB, CEDB_ALLOWREALLOC, &wProps, NULL, (LPBYTE *)&pcepv, &dwRecSize, 0); if (oid = 0) ErrBox (hWnd, TEXT (Db item not read. rc=%d), GetLastError(); return 0; / Display the edit dialog. rc = Dial

34、ogBoxParam (hInst, TEXT (EditAlbumDlg), hWnd, EditAlbumDlgProc, (LPARAM)&pcepv); if (rc = 0) return 0; / Write the record. oid = CeWriteRecordProps(g_hDB, oid, NUM_DB_PROPS, pcepv); if (!oid) ErrBox (hWnd, TEXT (Write Rec fail. rc=%d), GetLastError(); LocalFree (LPBYTE)pcepv); ClearCache (); / Clear

35、 the lv cache. InvalidateRect (hwndLV, NULL, TRUE); / Force redraw. return 0;4.7 删除记录模块/ DoMainCommandDelete - Process Program Delete command.LPARAM DoMainCommandDelete (HWND hWnd, WORD idItem, HWND hwndCtl, WORD wNotifyCode) HWND hwndLV; TCHAR szText64; DWORD dwIndex; int i, nSel; CEOID oid; hwndLV

36、 = GetDlgItem (hWnd, ID_LISTV); nSel = ListView_GetSelectionMark (hwndLV); if (nSel != -1) wsprintf (szText, TEXT (Delete?); i = MessageBox (hWnd, szText, TEXT (Delete), MB_YESNO); if (i != IDYES) return 0; / Seek to the necessary record. oid = CeSeekDatabase (g_hDB, CEDB_SEEK_BEGINNING, nSel, &dwIn

37、dex); CeDeleteRecord (g_hDB, oid); / Reduce the list view count by one and force redraw. i = ListView_GetItemCount (hwndLV) - 1; ListView_SetItemCount (hwndLV, i); ClearCache (); / Clear the lv cache. InvalidateRect (hwndLV, NULL, TRUE); return 0;4.8 排序模块/ DoMainCommandSort - Process the Sort comman

38、ds.LPARAM DoMainCommandSort(HWND hWnd, WORD idItem, HWND hwndCtl, WORD wNotifyCode) int nSort; switch (idItem) case IDM_SORTNAME: nSort = 0; break; case IDM_SORTARTIST: nSort = 1; break; case IDM_SORTCATEGORY: nSort = 2; break; if (nSort = g_nLastSort) return 0; ReopenDatabase (hWnd, nSort); / Close

39、 and reopen the database. return 0;4.9 帮助模块/ DoMainCommandAbout - Process the Help | About menu command.LPARAM DoMainCommandAbout(HWND hWnd, WORD idItem, HWND hwndCtl, WORD wNotifyCode) / Use DialogBox to create modal dialog. DialogBox (hInst, TEXT (aboutbox), hWnd, AboutDlgProc); return 0;4.10 列表显示

40、模块HWND CreateLV (HWND hWnd, RECT *prect) HWND hwndLV; LVCOLUMN lvc; hwndLV = CreateWindowEx (0, WC_LISTVIEW, TEXT (), WS_VISIBLE | WS_CHILD | WS_VSCROLL | LVS_OWNERDATA | WS_BORDER | LVS_REPORT, prect-left, prect-top, prect-right - prect-left, prect-bottom - prect-top, hWnd, (HMENU)ID_LISTV, hInst, NULL); if (hwndLV) lvc.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_FMT | LVCF_SUBITEM;

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号