友情提醒:1.本提纲仅适用于南京邮电大学李超老师的嵌入式系统开发课程。2.老师本人很认真地讲课,对于C语言和底层的讲述非常细致,如果可以请课堂仔细听讲,避免错过良师。3.实验课请动手,至少点亮LED灯!有问题请问老师!4.老师不会随便为难同学,请认真复习。根据提纲,作者期末获得97分。考试携带:1.教材2.带有答案的实验报告3.测试题和答案实验部分:离不开LED和看门狗的实验,仔细理解做起来很容易。考试题仅会是这两种程序的变种。而这两种程序老师课堂至少说5遍,哪怕认真听一遍也不可能做不出!最终声明:若有题型改变和书本变革,本提纲不负责任!嵌入式期末——理论部分CH1:1.嵌入式系统的定义、特点:定义:书P1:以系统为中心,以计算机技术为基础,软硬件可剪裁,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。特点:①微内核②专用性强③可裁剪④专用操作系统的支撑⑤专用的开发工具和环境2.嵌入式系统微处理器种类、典型代表:书P2:ARM微处理器,MIPS,68K/ColdFire、PowerPC举例列出一款ARM7TDMI微内核的嵌入式微处理器S3C44B0X,ARM920T微内核的嵌入式微处理器S3C2410,ARM11内核的嵌入式微处理器S3C6410,并列举2款64位ARM微内核Cortex-A53、Cortex-A57。3.嵌入式OS的种类及典型代表:书P7:VxWorks、RT-Linux、uClinux、ARM-Linux、WindowsPhone、iOS、Android4.开发模式书P10:宿主机——目标板模式了解基于ARM核的研究和商业运作模式。§企业运行的模式—chipless的生产模式§公司既不生产芯片,也不设计芯片,而是设计出高效的IP内核§全球有103家巨型IT公司在采用ARM技术,20家最大的半导体厂商中有19家是ARM的用户5.开发流程书P10流程图:CH2:1.ARM处理器的特点、构成特点:书P14:①体积小、功耗低、成本低、高性能。②支持Thumb(16位)/ARM(32/64位)双指令集,能够兼容8位和16位器件。③具有大量的寄存器,因而指令执行速度快。④绝大多数操作都在寄存器中进行,通过Load/Store的体系架构在内存和寄存器之间传递数据。⑤寻址方式简单。⑥采用固定长度的指令格式。ARM指令格式:(1)ARM汇编程序由机器指令、汇编指令和伪指令构成。(2)ARM伪指令可以分为以下几类:符号定义伪指令,数据定义伪指令,汇编控制伪指令,信息报告伪指令,宏指令以及其他伪指令。2.存储体系:大/小端模式书P20:大端模式:小端模式:测试题:假设存储数据0x12345678于ARM微处理器内存0X30000000开始的位置,则0X30000001内存位置的数据为C(A.0X12B.0X34C.0X56D.0X78)(采用小端模式进行存储)3.异常处理模式书P17:练习:一般情况下,ARM微处理器异常处理模式共有___7___种,机器启动后第一条指令执行的是__A___(A.复位异常处理函数指令B.中断异常处理指令C.IRQ异常处理指令D.指令预取终止异常)。4.传参原则书P30:调用函数FUN(X,Y,Z),则实参值分别通过r0、r1、r2寄存器来进行传递,如果参数超过4个,则参数传递规则为通过栈进行传递。5.R13、R14、R15的作用书P16:R13:用作堆栈指针R14:作用①:用户模式下,R14用做链接寄存器(LR),存放子程序被调用时的返回地址。作用②:异常处理模式下,R14用来保存异常的返回地址。R15:程序计数器,又被记做PC。由于ARM采用了流水线机制,因此PC的值为当前指令地址的值加8个字节,也就是说,PC指向当前指令的下两条指令的地址。CH3:1.S3C6410微处理架构2.软件操作、硬件方式非OS:端口寄存器(读、写)例子:端口的地址为0x7F008800。#definerGPKCON0(*((volatileint*)(0x7F008800)));rGPKCON0=0x55aa或(*((volatileint*)(0x7F008800)))=0x55aa;3.LED灯与看门狗(实验代码等见实验部分)看门狗的作用:书P37:系统软件或者应用软件都可能出错,导致整个系统无法继续正常工作,此时必须让整个系统重启以恢复其原有的功能,在S3C6410微处理器中集成的看门狗定时器就可以实现这个功能。CH4:1.交叉编译器核心部件gcc、make、gdb的安装。在PC机上Linux系统编译使用的编译器名为gcc,ARM处理器嵌入式编译器名为arm-linux-gcc。2.gcc的使用-o/-C/-l/-L/-I/-g/-O书P46:-o功能:制定目标名称,缺省的时候,gcc编译出来的文件是a.out例:arm-linux-gcc-ohello.exehello.c-c功能:只对文件进行编译和汇编,但是并不进行连接,也就是说只把程序做成obj文件。例:arm-linux-gcc-chello.c将生成.o的obj文件。-l,-I,-L-I:指定第一个寻找头文件的目录-L:指定第一个寻找库文件的目录-l:表示在库文件目录中寻找指定的动态库文件-g编译器在编译的时候产生调试信息。3.gdb操作步骤、常用命令。书P56:常用命令:(更多命令见P57)运行gdb调试程序时通常使用如下的命令:gdb文件名操作步骤:(1)运行程序在命令行上键入gdb并按回车键就可以运行gdb了,如果一切正常的话,gdb将被启动并且将在屏幕上看到类似的内容:GDBisfreesoftwareandyouarewelcometodistributecopiesofitundercertainconditions;typeshowcopyingtoseetheconditions.ThereisabsolutelynowarrantyforGDB;typeshowwarrantyfordetails.GDB4.14(i486-slakware-linux),Copyright1995FreeSoftwareFoundation,Inc.(gdb)当启动gdb后,可以在命令行上指定很多的选项。也可以以下面的方式来运行gdb:gdbfname当用这种方式运行gdb,程序员能直接指定想要调试的程序。这将告诉gdb装入名为fname的可执行文件。(2)设置/显示命令行参数设置命令行形式:setargsarglist显示命令行形式:showargs(3)程序运行相关命令…………gdb远程调试书P68:需要远程调试程序时,首先要对你需要进行远程调试的程序做一些改造,在程序的开始插入set_debug_traps()和break_point()函数,然后重新编译,并且将GDBStub,你的程序,还有串口驱动程序等能一起连接在一起成为新的可执行程序,将它的一份拷贝到远程主机上。然后按照如下的步骤:将两台机器用串口线连接起来将需要调试的程序拷贝到远程主机在本地主机启动GDB,读入需要调试的程序的符号表和程序代码使用targetremote命令建立和远程主机的连接然后就像和使用一般的GDB一样进行程序的调试了。4.Code::Blocks作用和基本操作书P68:作用:Code::Blocks是一个开放源码的全功能的跨平台C/C++集成开发环境。Code::Blocks是开放源码软件。Code::Blocks由纯粹的C++语言开发完成。基本操作:见书(P69-P77)完整流程。CH5:1.嵌入式Linux系统核心部件嵌入式Linux操作系统包括bootloader、内核、文件系统三部分组成。2.bootloader的功能、种类bootloader的功能:①引导操作系统内核启动②提供辅助命令工具。常见bootloader:redboot、lilo、uboot、grub、etherboot、vivi。3.U-boot常用命令书P82:复习题:在uboot中,打印开发板上环境变量值的命令为printenv,设置IP地址为192.168.1.1的命令为setenvipaddr192.168.1.1,假如嵌入式内核名为vmlinux,通过tftp加载内核的命令为tftpvmlinux内存地址,启动嵌入式Linux内核的命令为bootm。其他命令:参考教材。4.bootloader、内核、文件系统构建步骤嵌入式Linux内核裁剪命令为makemenuconfig;裁剪完成后生成配置选择文件.config;编译内核命令为makezImage。构建嵌入式Linux系统时,烧写bootloader的工具为hjtag;烧写Linux内核一般使用A(A.bootloaderB.文件系统C.交叉编译器)来烧写,烧写文件系统一般使用A(A.bootloaderB.文件系统C.交叉编译器)来烧写。从C语言角度来理解,嵌入式Linux内核仅是众多函数的集合体,其有一个类似于main的函数,名称为start_kernel。启动linux后常用的命令如ifconfig、cp、ls等通常位于C(A.bootloaderB.内核C.文件系统)中;嵌入式Linux环境下生成文件系统的常用工具为mkyaffs2img;以yaffs方法为例,将嵌入式文件夹压缩成一个yaffs2格式的文件系统命令为mkyaffs2img文件夹镜像文件名。具体内容见实验部分。CH6:1.开发板和PC机传输文件的方式2.移植步骤:configure、make、makeinstall嵌入式Linux应用程序移植常用configure命令生成Makefile,一般来说,指定安装目录为/opt/soft的命令为./configure--prefix=/opt/soft;如果待生成的可执行目标板为ARM处理器,则命令为./configure--prefix=/opt/soft--HOST=arm-linux。其余内容见实验部分或书P1023.Sqlite命令使用方式书P105:sqlite操作的基本步骤包括:打开数据库执行相关操作,如插入记录、删除记录、查询等关闭数据库(1)打开数据库函数原型:intsqlite3_open(constchar*filename,sqlite3**ppDb);filename:待打开(创建)的数据库文件名;ppDb:sqlite3数据库句柄的指针(2)操作数据库sqlite可以提供了接口,可以把SQL操作语句直接嵌入到sqlite函数中来执行。函数原型:intsqlite3_exec(sqlite3*ppDb,constchar*sql,int(*callback)(void*,int,char**,char**),void*,char**errmsg);第1个参数是open函数得到的指针。第2个参数constchar*sql是一条sql语句,以\0结尾。第3个参数sqlite3_callback是回调,当这条语句执行之后,sqlite3会去调用这个函数。第4个参数void*是你所提供的指针,你可以传递任何一个指针参数到这里,这个参数最终会传到回调函数里面,如果不需要传递指针给回调函数,可以填NULL。等下我们再看回调函数的写法,以及这个参数的使用。第5个参数char**errmsg是错误信息。(3)关闭数据库数据库不使用后需要关闭。函数原型:intsqlite3_close(sqlite3*ppDb);测试题:嵌入式数据库经常使用sqlite,为可以在开发板上运行的轻型数库。通常情况下sqlite提供命令和函数编程两种使用方式。在sqlite下创建数据库stu.db命令为sqlite3stu.db;创建包含学号,姓名和电话号码的数据表StuPhone命令为createtableStuPhone(idintegerprimarykey,nametext,phoneNotext);;插入10010201,wangming,13900