嵌入式实训总结

嵌入式实训总结

2023年7月6日发(作者:)

实训总结

ARM体系结构

主要内容

(1) ARM简介

(2) ARM处理器模式

(3) ARM的寄存器

(4) ARM的异常

(5) 存储器I/O

参考资料

详细内容参加ARM体系结构PPT。

RealView的使用

安装破解详细过程

1. 将虚拟iso文件解压缩(或者用虚拟光驱装载),双击进行安装

2. 安装即将结束的时候,会出现一个窗口,上面有“下一步”按钮

3. 此时,将文件夹的内容,拷贝到C:Program FilesARM文件夹

4. 开始—运行—输入cmd,点击确定

5. 输入ipconfig/all,并回车

6. 记下“本地连接”的Physical Address,例如00-25-3D-5B-7C

7. 将C:Program FilesARM下的以记事本方式打开

8. 将“HOSTID=”后的字符串替换为6中找到的Physical Address, 不要横杠。

9. 保存关闭。

10. 在2中的窗口内点击下一步,之后点击“...”按钮,选择好之后,点击Add按钮,点击两次(或一次)“是”之后继续安装。

11. 最后运行C:Program FilesARM下的(齿轮) IDE的使用

开始—程序—ARM—ARM Workbench IDE v4.0启动RealViewIDE

File—New—Realview Project输入ProjectName点击下一步,调试和发行都选中,点击下一步,不需要选择Targets,直接点击下一步,体系结构选择Cortex-A8,其他不用改变,点击下一步,再点击下一步,之后选择Finish,即可创建一个RealView工程。

在工程上点击右键可以添加文件夹(例如src),也可以添加文件,注意汇编文件扩展名为.s,C语言文件为.c。

汇编语言的例子和C语言的例子见“ARM汇编语言实验”压缩包。

调试方法

首先编译工程(Project—BuildAll),之后点击菜单栏的Debug按钮(虫子样子),选择加载到RealView Debugger中,即可开始调试。点击Step in按钮,即可单步跳入,点击Step

over按钮即可过程调试。

有可能需要查看Register的内容,这时需要点击View菜单下的Register项,打开寄存器查看窗口。

指令集

常用指令集见参考资料“ARM指令集详解”。

ARM与C语言混合编程

共有四种混合编程方式,详细信息可以参考资料“ARM中C语言和汇编语言混合编程”中的内容。

串口通信方法

串口的基本概念,串口通信的方式,通信的数据包格式等。详细内容请参考“串口通信”PPT。

烧写板子的方法

由于各个开发板的使用方法并不相同,因此需要参考用户手册。一般使用过程为: 1. 调至NorFlash方式启动,连接超级终端。根据超级终端中的选项,选择操作

2. 格式化NandFlash

对于Linux系统

3. 选择下载bootloader,可能会使用到DNW,注意按照手册安装usb驱动

4. 选择下载操作系统内核

5. 选择下载根文件系统

6. 选择下载Logo

对于WinCE系统

3. 选择下载Bootloader或者STEPLDR

4. 下载EBoot到NandFlash

5. 调到NandFlash,并在开机时按空格键

6. 选择下载WinCE的镜像文件

QT程序编写

环境的安装

1. 解压缩交叉编译器(EABI),tar xvfj EABI….2 –C /

2. 用gedit /etc/profile 添加一条pathmunge,详细请参见手册

3. 解压缩qt-embedded-opensource…2,tar 2 –C /

7. 进入/opt/EmbedSky/qt-4.5下,./arm_qt4.5_build进行安装,需要大约1小时进行安装,之后使用source setARM_Env来设置环境变量。

8. qt-x11的安装:

a) 从ftp:///的ftp上下载

b) 解压缩tar xvzf -C /

c) 进入解压后的qt目录(qt-x11-opensource-src-4.5.3),运行命令./configure -qvfb

-prefix /opt/qt-x11-4.5.3

i) -qvfb参数说明需要编译qvfb设备

ii) -prefix /opt/Qt-x11-4.5.3为改变安装安装目录

d) 运行命令gmake e) 运行gmake install,大约需要1小时左右

f) gedit /etc/profile打开profile文件,在该文件的最末尾加上以下语句:

export PATH=/opt/qt-x11-4.5.3/bin:$PATH

export QTDIR=/opt/qt-x11-4.5.3

export MANPATH=/opt/qt-x11-4.5.3/man:$MANPATH

export LD_LIBRARY_PATH=/opt/qt-x11-4.5.3/lib:$LD_LIBRARY_PATH

export QMAKESPEC=/opt/qt-x11-4.5.3/mkspecs/linux-g++

g) 注销重新登陆

h) 编译qvfb

# cd /qt-x11-opensource-src-4.5.3/tools/qvfb/

# make

9. Qtcreator的安装是图形化的,下一步即可,安装好后,打开QtCreator后,依次点击菜单Tools-Options-Qt4-QtVersion,之后需要设置编译器的路径,可参考手册设置。

QT工程创建

1. 打开QtCreator,点击File-new File or Project

2. 选择Qt4 Gui Application点击Ok

3. Name中填入项目名称,可任取;Create in中填入目录,可用Browse按钮选择一个路径,点击Ok

4. Required Modules中按需求选取,如果不需要可以不用选取,点击Next

5. Classname中填入类名,可任取;Base Class中选择QWidget,或根据需要选择其他,单击Next按钮继续

6. 点击Finish完成创建项目

QT程序编写

1. 在工程窗口中的Forms文件夹下,有至少一个.ui文件,是界面设计文件

2. 双击这个.ui文件,可以在右侧的窗体上添加按钮等控件

3. 可以修改控件的objName,Text等属性,注意,objName是程序中用的名字,而Text是显示给用户的

4. 在按钮等控件上单击右键,点击Go to slot,可以添加槽函数,可以根据自己需要选择信号和槽函数 5. 实现槽函数,完成需要的功能,例如响应用户按键信息等

QT示例程序

更多的示例程序请参见压缩包“qtshili”

QT与硬件编程

硬件编程最关键的是应用驱动程序。首先需要编写硬件驱动程序,或者利用已有的驱动进行QT程序编写。因此,需要仔细参阅驱动程序文档,认真查看每个函数各个参数的含义。开发硬件相关QT程序流程:

1. 添加fcntl.h、unistd.h和sys/ioctl.h三个头文件

2. 添加一个private变量,例如int fd;

3. 一般在构造函数中,使用open函数打开设备并存下设备标识符,如fd=open(“/dev/PWM-Test”, O_RDWR); O_RDWR是一种设备读取的方法,此处也可以为只读(O_RDONLY),只写(O_WRONLY),或者可读可写(O_RDWR)等

4. 可用ioctl函数操作设备,进行IO操作,也可用read函数进行读取,write函数进行写入,需要根据具体应用确定

5. 在析构函数中加入::close(fd); 关闭设备,这样在程序结束的时候自动关闭设备

6. 注意,如果需要判断设备是否可用,可以用if语句判断fd >= 0,例如在关闭设备时,经常需要这个操作,即,if (fd >= 0) { ::close(fd); }

硬件编程示例程序

示例程序见压缩包“apps”

嵌入式移植

Bootloader移植

1. 解压缩uboot源代码,例如tar xvfj 2 –C /

2. 在uboot目录下修改一些文件,并添加支持自己的板子的源代码,天嵌的uboot已经改好,我们不需要自己修改

3. 在uboot目录下执行make EmbedSky,配置uboot使它适用于我们的板子

4. 执行make进行编译,编译出文件即可烧录 Bootloader重要文件及函数

文件名

函数名

添加新的命令

1. include/cmd_confdefs.h中需要添加一个自定义命令的宏定义,例如

#define CFG_CMD_HELLOWORLD 0x8000ULL

2. 在common文件夹下创建一个命令的源码文件,如cmd_helloworld.c

3. 编写命令源码文件内容,可以参照cmd_cache.c等

4. 在include/configs/EmbedSky.h中的CONFIG_COMMANDS宏定义的最后一个元素,括号前加入| 添加刚才在cmd_confdefs.h中定义的宏,如添加CFG_CMD_HELLOWORLD以使能命令

5. 重新编译uboot即可使用新命令

添加命令的菜单栏显示

1. 打开common/cmd_menu.c文件,找到main_menu_usage函数,在printf("Enter your

selection: ");前面加入自己的printf,例如printf(“[h] Helloworld command”);

2. 找到menu_shell函数,在case ‘Q’: case’q’ {…} 之后添加自己的case ‘H’: case ’h’: {…}

3. 括号 { } 中填写run_command(“Helloworld”, 0); 即可

start.S

_start

board.c

start_armboot ()

main.c

main_loop()

内核移植

1. 使用命令tar xvfj 2 –C / 对内核进行解压缩

2. 在内核目录下,输入make menuconfig ARCH=arm CROSS_CMPILE=arm-linux-打开配置页面

内核的配置

3. 可用load an alternate file加入一个已经配置好的文件

4. 可使用键盘方向键和空格、Y、N、M对其中选项进行勾选和清除

5. 配置好后,在顶级菜单中选择Save an alternate,并将文件保存为.config文件

6. 退出

编译内核

使用make zImage即可编译内核,会花费一些时间,编译好的内核可通过超级终端及DNW烧写到板子中。

详细信息

更多的详细信息,请参考开发版的移植手册。

根文件系统移植

1. 文件系统移植需要工具BusyBox,需要先解压缩并编译BusyBos,使用命令tar xvfj

busybox…2 –C / 进行解压缩

2. 之后使用命令make menuconfig ARCH=arm CROSS_CMPILE=arm-linux- 对BusyBox进行配置,并用Save选项保存配置,名字任意

3. 之后使用make命令进行编译

4. 使用make install命令进行安装,会生成一个_install文件夹

5. 建立一个自己的文件夹,名为root-2.6.30.4(可任取)

6. 将_install文件夹全部内容拷贝到自己的root-2.6.30.4文件夹下

7. 添加一系列目录(文件夹),详细请参考开发板移植手册

8. 将一些必要的配置文件加入上述文件夹中

9. 进入root-2.6.30.4的上级目录,输入命令mkyaffs2image root-2.6.30.4 即可生成根文件系统

10. 可将自己的根文件系统烧写到板子上进行测试

驱动程序的移植

1. 编写驱动程序的源文件,如helloworld.c,并添加到内核源码(内核移植中解压缩出的)的相应目录下,例如,字符设备需要添加到drivers/char/

2. 修改drivers/char/中的Kconfig,在menu “Character devices”,后面加入一个菜单项,如

config HELLOWORLD

tristate “Helloworld driver”

depends on ARCH_S3C2440

3. 修改drivers/char/中的Makefile文件加入目标文件,如obj-$(CONFIG_ HELLOWORLD)

+= helloworld.o,注意文件名字的大小写

4. 使用make menuconfig ARCH=arm CROSS_CMPILE=arm-linux-配置内核,在Drivers菜单项下的Character Devices下会出现Helloworld驱动程序,用键盘M按键选中 5. 在内核源码目录下使用命令 make SUBDIR=drivers/char/ modules对驱动模块进行编译,会在drivers/char/生成文件

6. 通过超级终端发送到板子上,即可使用insmod命令加载,如insmod

7. 可以使用rmmod命令卸载驱动,如rmmod

项目——嵌入式电子书设计

程序解释见源码注释。

可能问的问题:

1. 程序如何运行?

程序首先运行的是mian函数,由main函数中创建一个应用程序类,和一个电子书的窗体类,通过调用电子书窗体类的show()方法,让这个电子书窗口显示出来,同时调用应用程序的exec()方法,让应用程序运行起来。

2. 电子书如何读取存储器中的文件?

首先调用QT中打开文件的函数,显示一个打开对话框,让用户选择一个文件,之后使用Qfile类对文件进行打开操作。由于需要支持中文,所以采用QTextStream类读取文本,采用QTextCodec类提供GBK的编码器,使用read函数进行读取。

3. 电子书如何显示文字?

采用QPlainTextEdit控件显示文字,并通过这个空间的QScrollBar(滚动条类)控制文字的位置,实现上滚和下滚。

4. 电子书如何翻页,如何查看上一行、下一行?

电子书翻页和上一行、下一行的实现靠嵌入式开发板的四个按钮实现,用户按上下按钮时,则实现上翻一行或下翻一行,按左右按钮时实现上翻一页或下翻一页操作

5. 电子书是如何响应按键操作的?

电子书采用按键驱动程序实现按键的响应。并且为了能够正常响应用户的操作,新建了一个线程专门用来监听是否有按键按下,如果有按键按下,则判断是哪一个按键按下了,并且针对不同的按键情况,选择不同的操作。例如上翻一行,下翻一行等。翻行或翻页通过改变QPlainTextEdit空间的QScrollBar的value属性实现。此外,驱动程序中,采用中断的方式取得按键信息,并用阻塞方式进行读取。

上文中可能存在表述不当地方,请见谅!谢谢。

发布者:admin,转转请注明出处:http://www.yc00.com/news/1688592719a153142.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信