嵌入式arm实习报告
嵌入式系统开发与应用概述
在今日,嵌入式ARM 技术已经成为了一门比较热门的学科,无论是在电子类的什么领域,你都可以看到嵌入式ARM 的影子。如果你还停留在单片机级别的学习,那么实际上你已经落下时代脚步了,ARM 嵌入式技术正以几何的倍数高速发展,它几乎渗透到了几乎你所想到的领域。由于嵌入式系统具有体积小、性能强、功耗低、可靠性高以及面向行业具体应用等突出特征, 目前已经广泛地应用于军事国防、消费电子、信息家电、网络通信、工业控制等各个领域。嵌入式的广泛应用可以说是无所不在。
linux系统
linux系统主要是由用户空间和内核空间再加上外部的硬件平台构成,用户空间就是用户应用程序的运行空间,主要包括两方面的内容:用户应用程序和GNU C Library(glibc)。而内核空间有三方面的内容,一是系统调用接口,它作为用户空间和内核空间相互转移的一种方式,二是内核空间,三是体系相关内核代码,在linux内核代码中,可以看到arch目录下有许多子目录,其中每一个子目录代表一种硬件平台。
而为什么要把linux系统划分为用户空间和内核空间呢?主要是一旦用户空间和内核空间没有分开,那用户将拥有很大的权限去操控内核或用户应用程序的崩溃将会造成系统的崩溃,而linux系统是利用cpu的模式分级来分别运行用户空间和内核空间,这样就可以使操作系统得到充分的保护。而现代的cpu通常实现了不同的工作模式,以ARM处理器为例实现了7种运行模式,分别为:
1)用户模式(usr):ARM微处理器正常程序执行模式
2)系统模式(sys):运行具有特权的操作系统任务
3)中断模式(irq):用于通用的中断处理
4)外部中断模式(fiq):用于高速数据传输或通道处理
5)数据访问终止模式(abt):当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护
6)管理模式(svc):操作系统使用的保护模式
7)未定义指令中止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真ARM微处理器的运行模式可以通过软件改变,也可以通过外部中断或异常处理改变,除用户模式外,其他模式都是非用户模式或特权模式,除用户模式和系统模式外,其他模式都是异常模式,常用于处理异常或中断,以及需要访问受保护的系统资源等情况。
同时用户空间和内核空间是程序执行的两种不同状态,通过系统调用和硬件中断去实现用户空间到内核空间的转移,系统调用是主动的,硬件中断是被动的,比如键盘按下或者串口中断。
接下来说说linux的内核架构,它主要是包含7大组成部分
1.内存管理 内存管理的主要作用是使多个进程能安全高效的共享内存区域,通常使用以下两个手段:
①内存映射:将物理内存映射到虚拟内存中,变有限为无限
②有效管理:使用各种内存管理算法(如伙伴算法),减少内存浪费
2.虚拟文件系统 vfs隐藏了各种文件系统的具体细节,为文件操作提供统一的接口
3.网络协议栈 它为linux提供了完善丰富的网络协议实现
4.进程管理 进程管理的重点是创建进程、停止进程,并控制它们之间的通信。进程管理还包括控制活动进程如何共享cpu,即进程调度。
5.设备驱动 设备驱动也是内核的一部分,它不同于内核的其他部件,并且独立于内核的其他部件,同时它是与设备交互的唯一模块,通常由第三方厂商开发,一个驱动程序不与其他驱动程序交互;内核与驱动程序之间也仅通过一个严格定义的接口-交互。
6.系统调用接口 SCI层为用户空间提供了一套标准的系统调用函数来访问Linux内核,搭起了用户空间到内核空间的桥梁。
7.体系相关部分
Linux内核源代码采用树形结构进行组织,非常合理地把功能相关的文件都放在同一个子目录下,使得程序更具可读性。
下面介绍下这些目录的组成
arch目录
arch是architecture的缩写。内核所支持的每种CPU体系,在该目录下都有对应的子目录。每个CPU的子目录,又进一步分解为boot,mm,kernel等子目录,分别包含控制系统引导,内存管理,系统调用等。其下子目录有
| --x86 /*英特尔cpu及与之相兼容体系结构的子目录*/
| |--boot /*引导程序*/
| | |--compressed /*内核解压缩*/
| |--tools /*生成压缩内核映像的程序*/
| |--kernel /*相关内核特性实现方式,如信号处理、时钟处理*/ | |--lib /*硬件相关工具函数*/
block目录
部分块设备驱动程序
crypto目录
加密、压缩、CRC校验算法
documentation
内核的文档
drivers目录(重点)
设备驱动程序
fs目录
存放各种文件系统的实现代码。每个子目录对应一种文件系统的实现,公用的源程序用于实现虚拟文件系统vfs。
| |--devpts /* /dev/pts虚拟文件系统*/
| |--ext2 /*第二扩展文件系统*/
| |--fat /*MS的fat32文件系统*/
| |--isofs /*ISO9660光盘cd-rom上的文件系统*/
include目录
内核所需要的头文件。与平台无关的头文件在include/linux 子目录下,与平台相关的头文件则放在相应的子目录中。
init目录
内核初始化代码
ipc目录
进程间通信的实现代码
kernel目录
Linux大多数关键的核心功能都是在这个目录实现。(调度程序,进程控制,模块化)
lib目录
库文件代码
mm目录
mm目录中的文件用于实现内存管理中与体系结构无关的部分(与体系结构相关的部分在哪里实现?arch)
net目录
网络协议的实现代码
| |--802 /*802无线通讯协议核心支持代码*/
| |--appletalk /*与苹果系统连网的协议*/
| |--ax25 /*AX25无线INTERNET协议*/
| |--bridge /*桥接设备*/
| |--ipv4 /*IP协议族V4版32位寻址模式*/
| |--ipv6 /*IP协议族V6版*/
samples
一些内核编程的范例
scripts
配置内核的脚本
security
SElinux的模块
sound
音频设备的驱动程序
usr
cpio命令实现
virt
内核虚拟机
Linux内核的配置与编译
Linux内核具有可定制的优点,配置内核的目的是裁剪掉不必要的文件和目录,获得一个最简单的又能满足用户开发的操作系统,以解除嵌入式开发过程中所遇到的存储空间有限的困扰。内核配置与编译的具体步骤如下:
1.清除临时文件、中间文件和配置文件
1)make clean
Remove most generated files but keep the config即清除大部分生成的文件但保留配置文件
2)make mrproper
Remove all generated files + config files即清除所有生成的文件还有配置文件
3)make distclean
Mrproper + remove editor backup and patch files即实现
make mrproper命令的同时删除编辑器备份文件和补丁文件
2.确定目标系统的软硬件配置情况,比如cpu类型,网卡型号,所需支持的网络协议等。
3.使用如下命令之一配置内核:
1) make config:基于文本模式的交互式配置
2)make menuconfig:基于文本模式的菜单型配置
3)make oldconfig:使用已有的配置文件(.config),但是会询问新增的配置选项
4)make xconfig:图形化的配置(需安装图形化系统)
Make menuconfig是最为常用的内核配置方式 如果一个.config文件已经存在,它将使用该文件设置那些默认的值
4.编译内核
编译内核通常也需要几个步骤,一是清除以前编译通过的残留文件;二是编译内核image文件和可加载模块;三是安装模块。
下面是编译内核的具体步骤。
①make dep 命令用在内核2.4或之前,用于建立源文件之间的依赖关系,在执行内核配置命令之后使用,不过在2.6内核中已经取消该命令,该功能由内核配置命令实现。
②make clean 命令用于删除前面留下来的中间文件,该命令不会删除.config等配置文件。这个步骤是可选的,它的目的是清除原先编译过而残留的和.o(obj文件)。如果是刚下载的源代码,那么这一步就可以省略了,但是如果已经编译多次内核,这一步是必要的,不然后面可能会出现很多莫名其妙的小问题。
③make zImage命令用于编译生成压缩形式的内核镜像,当编译成功后,就会在arch\arm\boot\目录下生成zImage文件,大小一般为几百KB。对于嵌入式Linux内核而言,直接将生成的zImage下载到嵌入式目标板的flash中即可。对于较大的内核,如果用make zImage编译,系统会提示使用make bzImage命令来编译,bzImage是big zImage的缩写,可用于生成较大的压缩内核,比如桌面Linux系统内核。
④在配置菜单的过程中,有些选项被选择为模块的,即选项前为[M],并且在回答Enable loadable module support(CONFIG_MODULES)时选了Yes的,则接下来就还要用命令make modules 来编译这些可加载模块,并用
make modules_install将make modules生成的模块文件复制到相应目录,桌面Linux内核一般是在/lib/modules目录下。
⑤制作init ramdisk
mkinitrd initrd-$version $version
例:
mkinitrd initrd-2.6.29 2.6.29
$version 可以通过查询/lib/modules下的目录得到Ramdisk是将一部分固定大小的内存当做分区来使用。它并非一个实际的文件系统,二是一种将实际的文件系统装入内存的机制,并且可以作为根文件系统。将一些经常被访问而又不会更改的文件(如只读的根文件系统)通过ramdisk放在内存中,可以明显的提高系统的性能。在linux的启动阶段,initrd提供了一套机制,可以将内核映像和根文件系统一起载入内存。
⑥cp arch/x86/boot/bzImage
/boot/vmlinuz-$version
$version 为所编译的内核版本号
(拷贝initrd-2.6.29到/boot下,将arch/x86/boot/bzImage更名为vmlinuz-2.6.29移动到/boot下)
⑦修改/etc/.oh100nf 或者/etc/.oh100nf
(GNU GRUB(简称 GRUB )是一个来自GNU项目的多操作系统启动程序。GRUB是多启动规范的实现,它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统。GRUB可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数。)
这时重启Linux操作系统,在进入内核时按下回车键进入内核选择界面,选择自己编译的内核,即可进入自己编译的内核的操作系统,用uname -r 可以查看当前内核版本。
嵌入式linux文件系统的制作与移植
文件系统包含两个层次的含义:
1.按照固定格式组织的目录与文件
2.在特定的存储介质上管理这些目录和文件需要的数据
当我们在linux下输入ls / 的时候,见到的目录结构以及这些目录下的内容都大同小异,这是因为所有的linux发行版在对根文件系统的布局上都遵循FHS(Filesystem Hierarchy Standard)标准的建议规定。
各个目录名称及其存放的内容:
/bin 必备的用户命令,例如ls、cp等
/sbin 必备的系统管理员命令,例如ifconfig、reboot等
/dev 设备文件,例如mtdblock0、tty1等
/etc 系统配置文件,包括启动文件,例如inittab等
/lib 必要的`链接库,例如C链接库、内核模块
/home 普通用户主目录
/root root用户主目录
/usr/bin 非必备的用户程序,例如find、du等
/usr/sbin 非必备的管理员程序,例如chroot、inetd等
/usr/lib 库文件
/var 守护程序和工具程序所存放的可变,例如日志文件
/proc 用来提供内核与进程信息的虚拟文件系统,由内核自动生成目录下的内容
/sys 用来提供内核与设备信息的虚拟文件系统,由内核自动生成目录下的内容
/mnt 文件系统挂接点,用于临时安装文件系统
/tmp 临时性的文件,重启后将自动清除
根文件系统是Linux启动时使用的第一个文件系统。没有根文件系统,Linux将无法正常启动。根文件系统由一系列目录组成,目录中包含了应用程序、C库、以及相关的配置文件。
那如何制作一个根文件系统呢?主要包括以下步骤:
1、创建根文件系统的目录
如:mkdir bin sbin lib etc dev proc sys usr mnt tmp var
2、创建设备文件
cd dev
mknod -m 666 console c 5 1
mknod -m 666 null c 1 3
cd ..
3、安装/etc
tar -xzvf etc.tar.gz /xx-x/rootfs/etc
4、配置busybox
进入busybox目录执行
make menuconfig
进入 Busybox Settings
build Options->
选中 “Build busybox as a static binary”, 静态链接
Cross Compiler prefix (arm-linux-)
Installation Options->
选中 “Don‘t use /usr”, 选中该项可以避免busybox被安装到
宿主系统的/usr目录下,破坏宿主系统
Busybox Installation Prefix (/nfsroot/rootfs)该选项表明编
译后的busybox的安装位置
7、编译、安装busybox
make ARCH=arm CROSS_COMPILE=arm-linux-
make install
前提是系统中安装好了交叉编译工具arm-linux-gcc
至此一个粗略的根文件系统制作完成,下面就需要移植到开发板中。 我们知道ARM嵌入式系统的组成为:
1)bootloader 引导加载器
2)kernel 操作系统内核
3)rootfs 根文件系统 (带GUI,QTopia)
在系统加载完内核后就会去启动根文件系统,而启动根文件系统这个过程被bootargs这个参数控制,所以我们需要修改这个参数以使系统运行我们的根文件系统,但这之前我们需要在宿主机上将根文件系统共享出来。我们先在linux系统中配置好nfs服务器,并且在设置配置文件exports将根文件系统所在路径共享出来,接下来在ARM开发板启动时控制超级终端进入shell界面,在这里输入命令print会显示开发板启动的配置信息,通过set命令我们可以设置bootargs 参数为:
console=ttySAC0
root=/dev/nfs
nfsroot=192.168.0.113:/mynfs/rootfs ip=.oh100:eth0:off
设置完成后用save命令保存设置,输入reset复位命令,ARM系统重启,重启完成后我们看到ARM系统的根文件系统就是我们自己制作的根文件系统。
实习体会
在嵌入式系统中,除了课本上的基础知识外,还学会了软件编程的基本思路,掌握了液晶屏的使用及其电路设计方法;掌握有关音频处理的基础知识;掌握液晶显示文本及图形的方法与程序设计。
通过这次设计,掌握了液晶显示实验、μC/OS-II移植、μC/OS-IILCD显示的工作原理及串口通信实验的工作过程,学会了使用仿真软件Embest EduKit-IV实验平台及ULINK2仿真器套件,并学会通过应用软件仿真来实现各种通信系统的设计,对以后的学习和工作都起到了一定的作用,加强了动手能力和学业技能。虽然花了很长时间编写软件程序设计,但这一切还是理论上的。希望学校能提供机会和条件,让我们能够去真正地将理论和实践相结合。通过这次程序,感觉自己所掌握的知识是那么的有限,还有许多需要改进和不足的地方,同时也帮助了我怎样学好这门课程,增加了我对这门学科的兴趣。总体来说,这次实习我受益匪浅。在摸索该如何设计电路使之实现所需功能的过程中特别有趣,培养了我的设计思维,增加了实际操作能力。在让我体会到了设计电路的艰辛的同时,更让我体会到成功的喜悦和快乐。通过这次实习通信系统的设计,使我更加清楚以后的发展及学习的方向。
arm嵌入式学习心得
嵌入式ARM学习心得【1】
本人大学学的是电子信息科学与技术专业,其实这个专业和嵌入式没有多大的关系,要说有关系就是简单的讲了下C语言语法,学完之后还不知道什么是C语言,只记住了,char,int,string等占几个字节,if,for,while循环什么的,感觉也就能算一些小学就会的题目,全国计算机等级二级也就糊涂的过了。
我这个专业没学过C++,一开始不知道什么是向对象,什么叫面向过程,这可能让大家笑话了。不过这说的是实话,大学的时候比较喜欢动手,喜欢硬件方面的东西,也喜欢看书。在大一的时候就听学长说,单片机很难学,在没事的时候就从图书管借了本关于51的书,一开始还真是不怎么懂,然后硬着头皮去看,当我把51的结构看完了,就不像一开始那样一头雾水了,自己在纸上把51的结构图默画一遍,然后再把各个寄存器功能写一下,各个功能口的结构也画一遍,然后就不觉得51有什么难了。其实有些时候不是这个东西你不会,而是在不会的时候自己先告诉自己这个太难了,自己先放弃了。我们学习51芯片,是为了以后的打基础,知道是怎么通过配置寄存器来实现功能。
大二下学期的时候,我们开了51的课,这个课几乎就没怎么去,因为我认为没有必要去听自己会的东西了。后来听别人说avr的资源会比51的丰富的很多,所以就想试试,看看有什么难的,就从网上买了本马潮老师《AVR单片机嵌入式系统原理与应用实践》,一边看书,一边想自己画一个板了,一开始想实现一个点阵屏,实现滚动效果,后来想想做个板也花不少钱呢,为什么不多加一些功能呢,还能多学到些知识,所以就加了温感,红外,铁电存储器等并把所有的扩展口都扩展了出来,备以后用,那时还挺自豪的呢,同学们都很羡慕,不过现在想想其实也没什么了。
大学也听说过嵌入式这个词,不过不太明白是什么意思,09年的时候从网上找到中嵌视频,有四张DVD(大约13G),下载下来后,从头到尾的看了一遍,没什么印象,只记得讲一些不知所云的函数,然后莫名其妙的讲怎么使用那个44b0的开发板,不过听完了,还是有很大收获的,就有一种想装一个linux的冲动,我是大二下学期才有的自己电脑,不过电脑的配置比较低,1g内存,跑虚拟机就像个蜗牛,所以就想着怎么才能装个linux,自己用XP习惯了,如果全换了又舍不得,那时从书上知道linux的文件系统和windows不一样,只有一个根分区,所以也害怕一装linux全盘就被格式化了,不过最后还是欲望战胜了担心,买了张redhat9的光盘,小心的装这个系统,里边的英文也不是太难,还是知道大概意思的,所以一步步的装,最后装到我的硬盘的最后空间,重新启动,竟可以选择进入哪一个系统了,从这之后,自己就不害怕怎么装系统了,应了那句言,纸上得来终觉浅,绝知此事要躬行。所以我认为,买一个开发板是完全有必要的,拿到实物操作一下就不会感觉太抽象了。
后来也想学学arm,但不知道arm是什么东西,所以就买了本《从51到arm》,讲的是关于arm的大体结构,看完后感觉,原来arm就是一个速度更快,接口更丰富的单片机啊。
如果想做linux设备驱动的同学应该对arm硬件有一些了解。如果对驱动不感兴趣,完全没有必要去看。交叉编译器会帮我们做好这些事情,他比我们更了解arm结构。
大三下学期开始准备考研了,所以自己这些兴趣就先放下了,报的北邮的信通学院通信专业,当时就是想一定要上个好学校好专业,也没想太多,结果考了的成绩差了点,没有被录取,也不想调剂一个二流的学校,然后就参加工作了,工作中每天都用的到开发板,当我看到一个小板上还可以跑系统的时候感觉很不可思议,以为要很大工程。后来边工作边学习,每天都要看电脑看到眼发疼,晚上也都差不多十二点时才睡觉。感觉到累,不过也感觉到自己在进步。
闲话有点多了,说了很多都是自己大学那点破事。
听很多的初学者说不知道从哪里开始,学习嵌入都要学哪些东西,从网上搜了一下,一大堆的东西要学,一下就推荐十几本书,说看完这本书怎么怎么样,看完那本书怎么怎么样,一下子就给初学者给吓住了,其实完全没必要把网上的那些东西全部看一遍,那样又费时,又感觉工程太大,让初学者没有信心去把每一种都看完。网上说的些方面都要知道,不一定全部都掌握,我们可以退成求其次,每一个都知道一些,当然会的越多越好。今天学点这个明天学点那,换着样来也不会觉得烦。而且还能感觉到每天都有收获。
下面给嵌入式初学者一些自己的我个人建议。
1、嵌入式涉及到很多的基础知识
c语言,关于C语言要知道基本的语法,什么是结构体,什么是共用体,有什么区别,不用强记一些二级考的东西,因在实际中用的很少。
c++要知道什么是类,怎么定义,继承,接口,要深刻理解,当然基本语法也是必不可少的。
操作系统原理也应该知道基本的原理的,我记得我大学没这个课还是去电信学院蹭别的专业的课呢,后来学习发现很多的东西都是在这个课上学到的。什么时间片啊,任务调度啊,都是在那里知道的。
Linux基本命令的使用(vi编辑器必须会用,因为在终端改文件的时候只能用这个),我们现在很多的人都习惯用鼠标了,很少用到命令,我们学习嵌入linux可要改改这个习惯了,linux用命令操作一是效率高,二是功能非常强大,远非图形界面能比的了的,其实我们用图形界面的操作都要转化为命令传给硬件的。
Linux文件系统的管理要清楚,哪个目录存放是什么东西,有什么用,文件权限管理等
Shell编程也要了解一些,在这给大家推荐一个教程,周朝剑的 shell编程,也就七八讲吧,讲的很全面。初学者看前4讲就可以了。
Linux设备驱动的架构要了解,初学者可以以米尔的MYD-AM335X开发板上的led驱动分析一下,结合原理图和linux设备驱动相关书籍把每一行代码都分析明白。关于驱动给大家推荐一本书《LINUX设备驱动程序》中国电力出版社出版的,很经典的,初学者看可能看不太明白,不过要坚持看,最次也得把前6章看完了。
2、看书不要希望一次就会
一次就明白是什么意思,也不要死记硬背,看不明白也没关系,以后遇到了知道去哪里去找就可以了,以后遇到的多了,也就记住了,遇到的少的,忘记也就忘记了。还有,不要直接阅读linux内核源代码,看一些自己把头撞破也想不明白的事,会打击初学者的积极性,要循序渐进,今天学个做个led,明天做个串口,后天说不定就做硬件编解码了。
3、你可以不接受培训,但是不能不买开发板
如果你想学习嵌入式一定要买块学习板,现在的开发板很便宜了,给我们初学者减轻了很多经济负担。看再多的视频,看再多的书,也不如自己动手试一下,看着很简单的东西,做起来就可能遇到很多的问题,遇到问题找到原因,解决问题,只有这样才能学到东西,记得我第一次写led的驱动,想自己试一下,网上也有人写过相关的代码,可是自己一试,就出了好多的问题,那个led弄了我一天才把led灯点亮。所以不要眼高手低。
还有关于培训,现在的培训机构很多,讲的也不错,老师也很好,但是有一个问题,太集中了,而且学生动手的机会也不太多,记得我们公司还招了一个在北京某个培训机构培训半年的员工呢,花了一万多,来了之后也没感觉有多高,问他都学了什么,也就是我前边说的那些基础知识,很多的东西还是不知道的,照着书弄个helloworld模块驱动两天没搞定。不是培训不好,但我个人见解效果并不是很好。记住:只有自己动手做过的东西才是自己的。
现在买一块开发板很便宜,飞凌的OK6410的开发板就不错,源码完全开放,而且资料也很丰富,完全能满足初学者学习用,有人说友善的'板子也不错,我个人觉得友善的板子不错,但是不适合初学者,因为他的很多的东西是不给代码的,用过友善的板子的同学经常有这样的痛苦,想学一个东西,去找他的代码的时候,却找不到,很多友善提供的代码中很多的都是封装好的,只提供给客户一个库,初学者想要找代码的时候就不知道怎么办了。
4、不要好高骛远,要脚踏实地
对于初学者,还有一点小建议,我们拿到一个开发板,很兴奋也很激动,想法自然也很多,想用开发板实现自己的这个想法,实现那个想法,然后又不知道从何下手,然后就去论坛中发一个贴,“那个什么什么怎么实现啊,哪位大侠能详细说一下啊,跪求!!”然后等着别人去回复。见没人回复就抱怨。有想法是好的,我们要实现自己的想法也是有前提的,首先,我们对这部分知识了解吗?如果不了解就去google一下(最好别用百度,不太好用),了解了一些,也就大概知道要怎么做了。如果再遇到问题,再去发贴问,这样也显得咱们有水平。比如自己连串口是什么都不太清楚呢,就问串口通信怎么做啊,就是人家把代码给咱,咱也不明白是怎么回事啊。
5、多看代码,多写代码
见多识广,熟能生巧。多看代码,要从代码中读出代码的意思来。自己平时也要多写代码,多练习(这一点我做的不好,写的少)。
写完已经晚上两点了,思路有些乱,有些也是个人的见解,在有些人看来可能是错误的,每个人有每个人的学习方法,但是我们的目的只有一个——希望我们学到更多的知识。
嵌入式学习心得【2】
还记得老师第一次将一块天祥的2440开发板放到我面前时,我心里觉得这太神奇了,好漂亮的板子,怎么弄呢?老师大体给我讲了一下,但是以前连51单片机操作都不熟的我如何记得住老师说的呢?板子拿到手里,左手拿不知到怎么开始,右手拿也不知道如何入手啊。
然后我决定上网查一查这个东西如何转起来呢?搜到了天祥的视频教程,但其是加密的,唉……我大概就在网上搜了将近一周的时间,后来老师过来询问我的板子玩的如何了,我连工作环境都没有搭建起来,
老师说我那里有视频,我觉得老师啊,你不早说啊。
也许老师是故意的,因为将近一周的时间我了解了三星公司的芯片S3C2440A,知道了天祥开发板的原理,包括的外设,有了整体的认识。
我拿到视频后跟着视频一步一步地开始了我的嵌入式之旅...
学习鸟网站是免费的综合学习网站,提供各行各业学习资料、学习资讯供大家学习参考,如学习资料/生活百科/各行业论文/中小学作文/实用范文实用文档等等!
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
蜀ICP备2020033479号-4 Copyright © 2016 学习鸟. 页面生成时间:0.157秒