《嵌入式系统课程设计基于嵌入式Linux系统的嵌入式数据库应用设计.doc》由会员分享,可在线阅读,更多相关《嵌入式系统课程设计基于嵌入式Linux系统的嵌入式数据库应用设计.doc(14页珍藏版)》请在三一办公上搜索。
1、*实践教学*兰州理工大学计算机与通信学院2014年秋季学期嵌入式系统课程设计题目:基于嵌入式Linux系统的嵌入式数据库应用设计专业班级:12级物联网(01)班姓名:学号:12280121指导教师:成绩:摘要随着移动计算时代的到来,嵌入式操作系统对移动数据库系统的需求为数据库技术开辟了新的发展空间。嵌入式数据库技术目前已经从研究领域逐步走向了广泛的应用领域。随着移动终端的普及,人们对移动数据的实时处理和管理要求不断提高,嵌入式数据库也越来越显示出其优越性。本课程设计利用实验室提供的ARM6410试验箱进行相应的设计,主要包括了解Linux环境下搭建嵌入式数据sqlite的基本方法,理解Linu
2、x下sqlite的基本使用方法,API接口函数,sqlite语法,掌握C语言编程的实现。 关键词:嵌入式、数据库、sqlite、API接口函数、C语言前言数据库的目标是实现对数据的存储、检索等功能。传统的数据库产品除提供了基本的查询、添加、删除等功能外,也提供了很多高级特性,如触发器、存储过程、数据备份恢复等。但实际上用到这些高级功能的时候并不多,应用中频繁用到的还是数据库的基本功能。于是,在一些特殊的应用场合,传统的数据库就显得过于臃肿了。在这种情况下,嵌入式数据库开始崭露头角。嵌入式数据库是一种具备了基本数据库特性的数据文件,它与传统数据库的区别是:嵌入式数据库采用程序方式直接驱动,而传统
3、数据库则采用引擎响应方式驱动。嵌入式数据库的体积通常都很小,这使得嵌入式数据库常常应用在移动设备上。由于性能卓越,所以在高性能的应用上也经常见到嵌入式数据库的身影。SQLite是一种采用C语言开发的嵌入式数据库。SQLite的目标是尽量简单,因此它抛弃了传统企业级数据库的种种复杂特性,只实现那些对于数据库而言非常必要的功能。尽管简单性是SQLite追求的首要目标,但是其功能和性能都非常出色。基本原理SQLite具有的特点1. ACID事务 2. 零配置 无需安装和管理配置 3. 储存在单一磁盘文件中的一个完整的数据库 4. 数据库文件可以在不同字节顺序的机器间自由的共享 5. 支持数据库大小至
4、2TB 6. 足够小, 大致3万行C代码, 250K 7. 比一些流行的数据库在大部分普通数据库操作要快 8. 简单, 轻松的API 9. 包含TCL绑定, 同时通过Wrapper支持其他语言的绑定 10. 良好注释的源代码, 并且有着90%以上的测试覆盖率 11. 独立: 没有额外依赖 12. Source完全的Open, 你可以用于任何用途, 包括出售它 13. 支持多种开发语言,C, PHP, Perl, Java, ASP.NET,Python由于SQLite具有功能强大、接口简单、速度快、占用空间小这样一些特殊的优点,因此特别适合于应用在嵌入式环境中。SQLite在手机、PDA、机顶
5、盒等设备上已获得了广泛应用。SQLite的SQL语法SQLite库可以解析大部分标准SQL语言。但它也省去了一些特性并且加入了一些自己的新特性。SQLite执行如下的语法ALTER TABLE ANALYZE ATTACH DATABASE BEGIN TRANSACTION 注释 COMMIT TRANSACTION COPY CREATE INDEX CREATE TABLECREATE TRIGGER CREATE VIEW DELETE DETACH DATABASE DROP INDEX DROP TABLE DROP TRIGGER DROP VIEW END TRANSACTIO
6、N EXPLAIN 表达式 INSERT ON CONFLICT子句 PRAGMA REINDEX REPLACE ROLLBACK TRANSACTION SELECT UPDATE VACUUM以上只是对SQLite实现的SQL语法的综述,有所忽略。SQLite C/C+接口由于早期的SQLite只支持5个C/C+接口,因而非常容易学习和使用,但是随着SQLite功能的增强,新的C/C+接口不断的增加进来,到现在有超过150个不同的API接口。这往往使初学者望而却步。幸运的是,大多数SQLite中的C/C+接口是专用的,因而很少被使用到。尽管有这么多的调用接口,核心的API仍然相对简单和便
7、于调用。以下举例常用的SQLite数据库与用户应用程序C/C+接口sqlite3_open()该接口打开与一个SQLite数据库文件的连接并返回一个数据库连接对象。这通常是应用程序调用的第一个SQLite API接口而且也是调用其他SQLite API接口前需要调用的接口。许多SQLite接口需要一个指向数据库连接对象的指针作为它们的第一个参数,因而这些接口也可以理解成是数据库连接对象的操作接口。该接口就是创建了这样一个数据库连接对象。sqlite3_prepare()该接口把一个SQL语句文本转换成一个预处理语句对象并返回一个指向该对象的指针。这个接口需要一个由先前调用sqlite3_ope
8、n()返回的数据库连接对象指针以及一个预处理的SQL语句文本字符串为参数。这个API并不实际解析SQL语句,仅仅是为后续的解析而对SQL语句进行的预处理。sqlite3_step()该接口用于解析一个由先前通过sqlite3_prepare()接口创建的预处理语句,直至返回第一列结果为止。通过再次调用sqlite3_step()可以返回下一列的结果,继续不断地调用sqlite3_step()直至整个语句完成为止。对于那些并不返回结果的语句(例如:INSERT,UPDATE,DELETE语句)一次调用sqlite3_step()就完成了语句的处理。sqlite3_column()该接口返回一个由
9、sqlite3_step()解析的预处理语句结果集中当前行的某一列数据。每次执行sqlite3_step()都返回一个新的结果集中的一行。可以多次调用sqlite3_column()接口返回那一行中所有列的数据。就像上面所说的那样,SQLite API中并没有sqlite3_column()这样的接口。取而代之的是一组用于从结果集中查询出各个列项各种数据类型数据的函数接口。在这组函数接口中,有些接口返回结果集的大小,有些返回结果集的列数。- sqlite3_column_blob() - sqlite3_column_bytes() - sqlite3_column_bytes16() - s
10、qlite3_column_count() - sqlite3_column_double() - sqlite3_column_int() - sqlite3_column_int64() - sqlite3_column_text() - sqlite3_column_text16() - sqlite3_column_type() - sqlite3_column_value()sqlite3_finalize()该接口销毁之前调用sqlite3_prepare()创建的预处理语句。每一个预处理语句都必须调用这个接口进行销毁以避免内存泄漏。sqlite3_close()该接口关闭一个由之
11、前调用sqlite3_open()创建的数据库连接。所有与该连接相关的预处理语句都必须在关闭连接之前销毁。一个应用程序可以通过执行以下几个步骤执行一条SQL语句:(1) 使用sqlite3_prepare()创建一个预处理语句。(2) 重复调用sqlite3_step()解析执行预处理语句。(3) 对于查询操作,两次调用sqlite3_step()之间通过sqlite3_column()接口查询返回的结果。(4) 最后,使用sqlite3_finalize()销毁预处理语句。上述就是有效使用SQLite所需要知道的知识,其余的仅仅是些需要补充的细节而已。sqlite3_exec()该接口是执行
12、上述四个步骤的一个方便的应用调用封装接口,传递给sqlite3_exec()的回调函数用于处理每一列返回的结果集。系统分析一、目的及意义嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可定制,适用于不同应用场合,对功能,可靠性,成本,体积,功耗有严格要求的专用计算机系统。它一般由嵌入式微处理器,外围硬件设备,嵌入式操作系统,用户应用程序4个部分组成。用于实现对其他设备的控制,监视或管理等功能。嵌入式系统已经广泛应用于科学研究,工业控制,军事技术,交通通信,医疗卫生,消费娱乐等领域,人们常用的手机,PDA,汽车,智能家电,GPS等均是嵌入式系统的典型代表。本课程设计要求利用实验室提供的ARM
13、6410试验箱进行相应的设计,主要包括了解Linux环境下搭建嵌入式数据sqlite的基本方法,理解Linux下sqlite的基本使用方法,API接口函数,sqlite语法,掌握C语言编程的实现。二、设计任务及要求利用 ARM6410实验箱和C语言来实现。完成如下的工作:1 熟悉ARM6410实验箱;2 掌握C语言的编程思路;3 了解嵌入式数据库SQLite在嵌入式中的应用4 编写用户应用程序对嵌入式数据库的访问和交互; 5 验证结果。三、 实验平台的认识认识博创经典实验箱 本次课设将以博创科技13年最新推出的UP-CUP210-II型嵌入式开发平台为硬件基础。UP-CUP210-II型教学科
14、研平台集成了USB、SD、LCD、Camera等常用设备接口,适用于各种手持设备、消费电子和工业控制设备等产品的开发。UP-CUP210-II型网关部分平台可以作为计算机、电子通讯、软件开发等专业开设嵌入式软件课程的教学平台,又可作为广大从事PDA和科研单位的参考设计平台。建立开发环境 1、平台硬件连接硬件:UP-CUP210-II型平台、12V电源线、串口线、网线、USB数据线 UP-CUP210-II型开发平台经常使用的硬件端口有调试串口UART0、DM9000网口及12V电源线。电源:12V电源(切勿插错电源!)。串口UART0:开发板DB9插座上引出了两个串口,串口0和串口1。其中UA
15、RT0排布在靠近15P VGA接口一端,是我们经常使用的调试串口,它连接开发板与PC机端(超级终端等),进行开发板的串口信息监视与控制。DM9000网口:开发板板载2个网卡芯片,我们使用的是DM9000A网卡,排布在开发板最外侧,主要使用该网卡进行文件传输及下载程序服务。平台启动运行软件:串口工具:超级终端、XSHELL、MINICOM等跳线:NANDFLASH启动开发板可以通过核心板端OM跳线选择启动方式,系统出厂模式使用NANDFLASH启动方式,启动前请确认跳线是否正确。建立串口超级终端:开发板主要使用串口0来进行信息输出与反馈,我们通常可以在PC机端使用一些串口工具连接开发板的串口,观
16、察开发板串口输出信息,乃至在串口终端中控制开发板上程序的行为。以下以Windows XP系统为例,配置该系统上的串口工具:超级终端。在 开始程序附件通讯超级终端 中配置。填入区号010,点击确定。填入名称COM210,选择串口设备COM1(根据实际硬件连接选择)。配置串口:波特率115200数据位0奇偶校验位无停止位1数据流控制无。进入终端:此时如果开发板没有上电,终端无信息输出。建立好超级终端后,连接好串口设备及12V电源,手动按下电源一侧的开关,即可启动开发板。系统上电同时,进入BOOTLOADER引导LINUX内核,如果在上电后的3秒内按下回车键即可进入U-BOOT控制界面(该功能界面可
17、以实现系统内核、文件系统的烧写,在烧写手册文档中有具体介绍),否则系统启动后默认引导LINUX操作系统并运行出厂自带的Qtopia图形集成环境。开发板上电启动后会自动登陆到/mnt/yaffs目录下,随机附带的接口测试程序存放在开发板的/mnt/yaffs/目录中。NFS服务器端的配置启动Fedora虚拟机后,在命令窗口使用文本编辑工具编辑服务配置文件/etc/exports,指定需要共享目录,需要通过NFS共享的目录为/UP-CUP210-II,允许子网192.168.12.*中的主机进行共享。挂载NFS共享目录宿主机端NFS服务目录建立好后,即可在UP-CUP210-II平台端运行moun
18、t命令挂载宿主机端NFS共享目录。启动开发板后,进入串口终端,先配置开发板IP(默认是192.168.12.199),再挂载:rootUP-TECH yaffs# ifconfig eth2 192.168.12.199rootUP-TECH yaffs#mount -t nfs -o nolock 192.168.12.200:/UP-CUP210-II /mnt/nfs/详细设计步骤:实验目录:/UP-CUP210-II/SRC/exp/basic/05_sqlite编译源程序1、进入实验目录:rootlocalhost /# cd /UP-CUP210-II/SRC/exp/basic/
19、05_sqlite/rootlocalhost 05_sqlite# lsMakefile SQLite.c SQLite.o consoleshell.h linuxpatch.h main.o sqliteRules.mak SQLite.h consoleshell.c consoleshell.o main.c readme.txtrootlocalhost 05_sqlite# 2、清除中间代码,重新编译rootlocalhost 05_sqlite# make cleanrm -f ./SQLite_test ./sqlite/SQLite_test *.elf *.elf2flt
20、 *.gdb *.orootlocalhost 05_sqlite# makearm-linux-gcc -c -o main.o main.carm-linux-gcc -c -o SQLite.o SQLite.cSQLite.c: In function sqliteDB_opt_select_all:SQLite.c:184: warning: assignment discards qualifiers from pointer target typeSQLite.c:185: warning: assignment discards qualifiers from pointer
21、target typeSQLite.c: In function sqliteDB_opt_select:SQLite.c:226: warning: assignment discards qualifiers from pointer target typeSQLite.c:227: warning: assignment discards qualifiers from pointer target typeSQLite.c: In function sqliteDB_opt_select_by_id:SQLite.c:268: warning: assignment discards
22、qualifiers from pointer target typeSQLite.c:269: warning: assignment discards qualifiers from pointer target typearm-linux-gcc -c -o consoleshell.o consoleshell.carm-linux-gcc -static -I ./sqlite/ -L ./sqlite/ -o SQLite_test main.o SQLite.o consoleshell.o -lsqlite3arm-linux-gcc -static -I ./sqlite/
23、-L ./sqlite/ -o sqlite/SQLite_test main.o SQLite.o consoleshell.o -lsqlite3rootlocalhost 05_sqlite# lsMakefile SQLite.c SQLite.o consoleshell.c consoleshell.o main.c readme.txtRules.mak SQLite.h SQLite_test consoleshell.h linuxpatch.h main.o sqliterootlocalhost 05_sqlite# 当前目录下生成可执行程序SQLite_test。NFS
24、挂载实验目录测试1、启动UP-CUP210-II型实验系统,连好网线、串口线。通过串口终端挂载宿主机实验目录。rootUP-TECH yaffs# mount -t nfs -o nolock 192.168.12.200:/UP-CUP210-II /mnt/nfs/2、进入串口终端的NFS共享实验目录。rootUP-TECH yaffs# cd /mnt/nfs/SRC/exp/basic/05_sqlite/rootUP-TECH 05_sqlite# lsMakefile SQLite.o consoleshell.o readme.txtRules.mak SQLite_test l
25、inuxpatch.h sqliteSQLite.c consoleshell.c main.cSQLite.h consoleshell.h main.orootUP-TECH 05_sqlite# 3、执行程序。rootUP-TECH 05_sqlite# ./SQLite_test此时会在当前目录下创建数据库test.db文件,用户可以根据终端菜单来对此数据库进行操作了,同样可以使用 ls l 命令观察数据库大小的变化致谢首先要感谢张玺君老师的授课与指导!感谢所有支持我完成嵌入式程序设计论文的老师和同学们!在这次课程设计中老师给了我很大的帮助,帮我解答疑难问题,给我提供资料,给我提供查阅
26、资料的信息,引导我该如何去思考问题,教会我解决问题的方法。同时又鼓励我自己学习,老师给我的不仅是知识,是帮助,更是学习的信心和智慧,在这里衷心感谢老师的耐心细心和一丝不苟的帮助。同时也感谢和我一起走过的同学,这是我们共同努力地结果,衷心的感谢大家对我的帮助和支持。参考文献1赵宏、王小牛、任学慧. 嵌入式应用教程. 人民邮电出版社2杨刚.嵌入式基础实践教程. 北京大学出版社3杜春雷. ARM体系与编程. 清华大学出版社4王宜怀、刘晓升. 嵌入式技术基础与实践. 清华大学出版社5博创公司. 270经典实验指导书1.1. 北京博创兴业科技有限公司 6博创公司. 2410经典实验指导书3.2. 北京博创兴业科技有限公司7王黎明、陈双娇、闫晓丽等. ARM9嵌入式系统开发与实践. 北京航空航天大学出版社8俞建新、王建、宋健健. 嵌入式系统基础教程. 机械工业出版社9 SamSung Electronics Co.The S3C2410A 32 bit RISC Microprocessor User ManualRKorea:Samsung10 Silicon Motion,IncSM501Mobile Multimedia Companion Chip Databook Version 102R台湾 :Silicon Motion