韦老师视频–嵌入式学习
0.首先下载资料,百问官网上去下载。(韦老师的是JZ2440)
1.然后买一个烧写器(100块)–EOP-100块,接着安装驱动,插上EOP之后,更新驱动程序,三遍之后可以安装成功。
然后安装oflash的烧写程序,openOCD with GUI setup,安装好了在cmd里面运行oflash。
如果运行失败,则需要将安装目录添加到环境变量里面去。(Windows的环境变量添加)
使用的软件是oflash.exe 可以烧写所有的bin文件(uboot.bin led.bin ***.bin),可以烧写到nandflash 和norflash .裸机程序都要烧写到nand ,烧写到0地址,uboot可以烧写到两个flash。
使用oflash烧写时,在cmd里面先进入目标盘符,如d: c: 这样,再使用cd命令进入目标目录,使用命令:oflash ***.bin就可以烧写了。烧写完后,要把EOP拔掉,(EOP上面有复位引脚,不拔看不到效果哟),然后启动板子。
烧写报错,看笔记(有写)
2.Bin文件的烧写
Uboot烧到nor,然后使用uboot的USB下载网线下载,uboot接收到文件在烧写到nandflash,设置为nandflash启动,运行bin文件。
百问网定制的uboot在资料光盘里面,menu进入选择菜单。
使用网线下载,TFTP软件,可以在Ubuntu里面安装TFTP服务器Ubuntu12.04已经装好了,或者在Windows上面使用TFTP软件。
使用USB下载,要用到dnw的软件(测试USB实现,运行zadig软件,安装USB驱动libusb-win32)
安装完成后,可以看见uboot里面提示已经连接USB。
接下来就是使用dnw软件下载裸机bin文件。下载完成后,断点开发板,nand启动,重新上电。由于板子不一样,所以所有的bin文件都得自己写或者更改地址。*********
4.2440内部存储资源
根据手册来看,mini2440上面nand 只有128M
启动流程:
Nandflash启动,nor不可访问。
5.字节序
编程操作:
置位1操作:
清位0操作:
补充知识:
1.gcc编译过程
链接就是将汇编生成的OBJ文件、系统库的OBJ文件、库文件链接起来,最终生成可以在特定平台运行的可执行程序。
动态链接使用动态链接库进行链接,生成的程序在执行的时候需要加载所需的动态库才能运行。
动态链接生成的程序体积较小,但是必须依赖所需的动态库,否则无法执行。
静态链接使用静态库进行链接,生成的程序包含程序运行所需要的全部库,可以直接运行,不过静态链接生成的程序体积较大。
gcc和arm-linux-gcc的常用选项
gcc的使用方法:
gcc [选项] 文件名
gcc常用选项:
-v:查看gcc编译器的版本,显示gcc执行时的详细过程
-o Place the output into
指定输出文件名为file,这个名称不能跟源文件名同名
-E Preprocess only; do not compile, assemble or link
只预处理,不会编译、汇编、链接
-S Compile only; do not assemble or link
只编译,不会汇编、链接
-c Compile and assemble, but do not link
编译和汇编,不会链接
一般应用程序才需要系统标准启动文件和标准库文件。裸机/bootloader、linux内核等程序不需要启动文件、标准库文件。
gcc -M c.c // 打印出依赖
gcc -M -MF c.d c.c // 把依赖写入文件c.d
2.Makefile语法
(1)Makefile的核心—规则 :
目标 : 依赖1 依赖2 …
[TAB]命令
当"目标文件"不存在, 或某个依赖文件比目标文件"新",则: 执行"命令"
(2)
a. 通配符: %.o
$@ 表示目标
$< 表示第1个依赖文件
$^ 表示所有依赖文件
b. 假想目标: .PHONY
(3)简单变量(即时变量) :
A := xxx # A的值即刻确定,在定义时即确定
B = xxx # B的值使用到时才确定
:= # 即时变量
= # 延时变量
?= # 延时变量, 如果是第1次定义才起效, 如果在前面该变量已定义则忽略这句
+= # 附加, 它是即时变量还是延时变量取决于前面的定义
(4)Makefile函数
a. $(foreach var,list,text) #将list列表里的var全部变为text格式
b. $(filter pattern…,text) # 在text中取出符合patten格式的值
$(filter-out pattern…,text) # 在text中取出不符合patten格式的值
c. $(wildcard pattern) # pattern定义了文件名的格式,# wildcard取出其中存在的文件
d.
(
p
a
t
s
u
b
s
t
p
a
t
t
e
r
n
,
r
e
p
l
a
c
e
m
e
n
t
,
(patsubst pattern,replacement,
(patsubstpattern,replacement,(var)) #从列表中取出每一个值# 如果符合pattern# 则替换为replacement
3.Makefile小bug
当函数有头文件的时候,我们一定要将目标和依赖写上,如a.c 依赖a.h 那么在Makefile里面一定要加上 a.o:a.c a.h这是一个只有目标和依赖的语句,规则是空的(一定要把规则行的tab删掉,否则会出错)但是有个问题,文件的依赖不可能每个打开看,所以用到一下语句。
gcc -M c.c // 打印出依赖
gcc -M -MF c.d c.c // 把依赖写入文件c.d
gcc -c -o c.o c.c -MD -MF c.d // 编译c.o, 把依赖写入文件c.d
*.d里面都是依赖文件。
在Makefile里面这样改写 .表示隐藏文件
定义一个即时变量,用函数来patsubst 来生成空的.%.o.d文件,并判断是否为空(下面用-MD -MF来生成所需要的依赖文件放到生成的空的.%.o.d文件)不为空则添加进来(include)。
CFLAGS-编译选项 CFLAGS = -Werror (将所有的警告当做错误)
CFLAGS = -Werror -I. 指定找头文件的目录为当前目录 -Iinclude指定找头文件的目录为include目录。