<?xml version="1.0" encoding="gb2312"?>
<rss version="2.0">
<channel>
<title><![CDATA[小波电子工作室]]></title>
        <image>
        <title>http://hi.baidu.com</title>
        <link>http://hi.baidu.com</link>
        <url>http://img.baidu.com/img/logo-hi.gif</url>
        </image>
<description><![CDATA[认认真真学习，堂堂正正做人，为振兴中国电子事业而奋斗！]]></description>
<link>http://hi.baidu.com/niejinbo</link>
<language>zh-cn</language>
<generator>www.baidu.com</generator>
<ttl>5</ttl>


<item>
        <title><![CDATA[U-boot启动过程详解]]></title>
        <link><![CDATA[http://hi.baidu.com/niejinbo/blog/item/7ee3ae4ac05047f882025c88.html]]></link>
        <description><![CDATA[
		
		<p>转自：<a href="http://www.embeddedlinux.org.cn/html/jishuzixun/200903/18-561.html">http://www.embeddedlinux.org.cn/html/jishuzixun/200903/18-561.html</a>&nbsp;&nbsp;&nbsp;&nbsp;  作者：denny</p>
<p>一、U-BOOT的目录结构 u-boot目录下有18个子目录，分别存放管理不通的源程序。<br>
这些目录中所要存放的文件有其规则，可以分成三类。 <br>
&#65517;第一类目录与处理器体系结构或者开发板硬件直接相关； <br>
&#65517;第二类目录是一些通用的函数或者驱动程序； <br>
&#65517;第三类目录是u-boot的应用程序、工具或者文档。 <br>
Board：和一些已有开发板相关的文件，比如Makefile和u-boot.lds等都和具体开发板的硬件和地址分配有关。 <br>
Common：与体系结构无关的文件，实现各种命令的C文件。 <br>
CPU：CPU相关文件，其中的子目录都是以u-boot所支持的CPU为名，比如有子目录arm926ejs、mips、mpc8260和nios等，每个特定的子目录中都包括cpu.c和interrupt.c和start.S。其中cpu.c初始化cpu、设置指令cache和数据cache等；interrupt.c设置系统的各种终端和异常，比如快速中断，开关中断、时钟中断、软件中断、预取中止和未定义指令等；start.S是u-boot启动时执行的第一个文件，他主要是设置系统堆栈和工作发式，为进入C程序奠定基础。<br>
Disk：disk驱动的分区处理代码、<br>
Doc：文档。 <br>
Drivers：通用设备驱动程序，比如各种网卡、支持CFI的flash、串口和USB总线等。 <br>
Dtt：数字温度测量器或者传感器的驱动 <br>
Examples：一些独立运行的应用程序的例子。 <br>
Fs：支持文件系统的文件，u-boot现在支持cramfs、fat、fdos、jffs2、yaffs和registerfs。 <br>
Include：头文件，还有对各种硬件平台支持的会变文件，系统的配置文件和对文件系统支持的文件。<br>
Net：与网络有关的代码，BOOTP协议、TFTP协议RARP协议和NFS文件系统的实现。 <br>
Lib_ppc：存放对PowerPC体系结构通用的文件，主要用于实现PowerPC平台通用的函数，与PowerPC体系结构相关的代码。 <br>
Lib_i386：存放对X86体系结构通用的文件，主要用于实现X86平台通用的函数，与PowerPc体系结构相关的代码。 <br>
Lib_arm：存放对ARM体系结构通用的文件，主要用于实现ARM平台通用的函数，与ARM体系结构相关的代码。 <br>
Lib_generic：通用的多功能函数实现。 <br>
Post：上电自检。 <br>
Rtc： 实时时钟驱动。 <br>
Tools：创建S-Record格式文件和U-BOOT images的工具。 <br>
<br>
二、u-boot的编译 u-boot的源码是通过GCC和Makefile组织编译的，顶层目录下的Makefile首先可以设置板子的定义，然后递归地调用各级目录下的Makefile，最后把编译过的程序链接成u-boot的映像。 顶层目录下的Makefile，它是负责U-Boot整体配置编译。每一种开发板在Makefile都需要有板子配置的定义，如smdk2442定义如下： smdk2442_config: unconfig @./mkconfig $(@:_config=) arm arm920t smdk2442 执行配置U-Boot的命令make smdk2442_config，通过./mkconfig脚本生成include/config.mk的配置文件。文件内容是根据Makefile对板子的配置生成的。<br>
<br>
配置环境和编译过程如下所述,U-boot的编译环境配置需要：cross-2.95.3.tar.bz2和s3c24x0_uboot_rel_0_0_1_061002.tar.bz2，将文件拷贝到/home/amoi/working/下，（chenpx@chenpx:/mnt/hgfs/share$ cp cross-2.95.3.tar.bz2 /home/amoi/working 和chenpx@chenpx:/mnt/hgfs/share$ cp s3c-u-boot-1.1.6.tar.bz2 /home/amoi/working）， 然后对对文件进行解压（chenpx@chenpx:/home/chenpx/working$ tar jxvf cross-2.95.3.tar.bz2和chenpx@chenpx:/home/chenpx/working$ tar jxvf s3c24x0_uboot_rel_0_0_1_061002.tar.bz2），在/usr/local/目录下建立一个arm文件夹（mkdir &ndash;p /usr/local/arm （-p 是需要时创建上层目录，如目录早已存在则不当作错误））<br>
<br>
将cross-2.95.3.tar.bz2解压出来的移动到/usr/local/arm/下（mv 2.95.3 /usr/local/arm/） 移动后添加环境变量export PATH=$PATH:/usr/local/2.95.3/bin/ 修改s3c24x0_uboot_dev中的makefile,修改CROSS_COMPILE = /usr/local/arm/2.95.3/bin/arm-linux-其他的用#注释掉。 接下来就是加载配置： 最后进行编译：make，最终在s3c24x0_uboot-dev目录下生成u-boot、u-boot.bin、u-boot.map、2 u-boot.srec四个文件。 <br>
<br>
三、u-boot系统启动流程 大多数bootloader都分为stage1和stage2两部分，u-boot也不例外。依赖于CPU体系结构的代码（如设备初始化代码等）通常都放在stage1且可以用汇编语言来实现，而stage2则通常用C语言来实现，这样可以实现复杂的功能，而且有更好的可读性和移植性。 1、Stage1 start.S代码结构 u-boot的stage1代码通常放在start.S文件中，他用汇编语言写成，其主要代码部分如下： <br>
<br>
（1）定义入口。由于一个可执行的Image必须有一个入口点，并且只能有一个全局入口，通常这个入口放在ROM（Flash）的0x0地址，因此，必须通知编译器以使其知道这个入口，该工作可通过修改连接器脚本来完成。<br>
（2）设置异常向量（Exception Vector）。 <br>
（3）设置CPU的速度、时钟频率及终端控制寄存器。 <br>
（4）初始化内存控制器。 <br>
（5）将ROM中的程序复制到RAM中。 <br>
（6）初始化堆栈。 <br>
（7）转到RAM中执行，该工作可使用指令ldr pc来完成。<br>
<br>
 2、Stage2 C语言代码部分 lib_arm/board.c中的start arm boot是C语言开始的函数也是整个启动代码中C语言的主函数，同时还是整个u-boot（armboot）的主函数，该函数只要完成如下操作： <br>
（1）调用一系列的初始化函数。 <br>
（2）初始化Flash设备。 <br>
（3）初始化系统内存分配函数。 <br>
（4）如果目标系统拥有NAND设备，则初始化NAND设备。 <br>
（5）如果目标系统有显示设备，则初始化该类设备。 <br>
（6）初始化相关网络设备，填写IP、MAC地址等。 <br>
（7）进去命令循环（即整个boot的工作循环），接受用户从串口输入的命令，然后进行相应的工作。 <br>
<br>
3、U-Boot的启动顺序<br>
主要顺序如下图所示<br>
<br>
  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;    函数顺序  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;   初始化顺序<br>
  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;   图为 U-Boot顺序<br>
下面就根据代码进行解释：<br>
/*********************** 中断向量 ***********************/<br>
.globl _start  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;    //u-boot启动入口<br>
_start: b  &nbsp;&nbsp;    reset  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;   //复位向量并且跳转到reset<br>
ldr pc, _undefined_instruction<br>
ldr pc, _software_interrupt<br>
ldr pc, _prefetch_abort<br>
ldr pc, _data_abort<br>
ldr pc, _not_used<br>
ldr pc, _irq  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;   //中断向量<br>
ldr pc, _fiq  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;   //中断向量<br>
b&nbsp;&nbsp; sleep_setting  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;    //跳转到sleep_setting<br>
并通过下段代码拷贝到内存里<br>
relocate:  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;&nbsp; //把uboot重新定位到RAM<br>
adr r0, _start  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;   // r0 是代码的当前位置 <br>
ldr r2, _armboot_start  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;   //r2 是armboot的开始地址<br>
ldr r3, _armboot_end  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;    //r3 是armboot的结束地址<br>
sub r2, r3, r2  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;    // r2得到armboot的大小 <br>
ldr r1, _TEXT_BASE  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;   // r1 得到目标地址&nbsp;&nbsp;<br>
add r2, r0, r2  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;&nbsp; // r2 得到源结束地址 <br>
copy_loop:  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;&nbsp; //重新定位代码<br>
ldmia r0!, {r3-r10}  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;   //从源地址[r0]中复制<br>
stmia r1!, {r3-r10}  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;   //复制到目标地址[r1]<br>
cmp&nbsp;&nbsp; r0, r2  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;   //复制数据块直到源数据末尾地址[r2]<br>
ble copy_loop<br>
系统上电或reset后，cpu的PC一般都指向0x0地址，在0x0地址上的指令是<br>
reset:  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;   //复位启动子程序<br>
/******** 设置CPU为SVC32模式***********/<br>
mrs r0,cpsr  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;&nbsp; //将CPSR状态寄存器读取，保存到R0中<br>
bic r0,r0,#0x1f<br>
orr r0,r0,#0xd3<br>
msr cpsr,r0   <br>
  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;   //将R0写入状态寄存器中<br>
/************** 关闭看门狗 ******************/<br>
ldr  &nbsp;&nbsp;   r0, =pWTCON<br>
mov  &nbsp;&nbsp;&nbsp; r1, #0x0<br>
str  &nbsp;&nbsp;    r1, [r0]<br>
/************** 关闭所有中断 *****************/<br>
mov r1, #0xffffffff<br>
ldr r0, =INTMSK<br>
str r1, [r0]<br>
ldr r2, =0x7ff<br>
ldr r0, =INTSUBMSK<br>
str r2, [r0]<br>
/************** 初始化系统时钟 *****************/<br>
ldr r0, =LOCKTIME<br>
ldr  &nbsp;&nbsp;&nbsp; r1, =0xffffff <br>
str  &nbsp;&nbsp;&nbsp; r1, [r0]<br>
clear_bss:<br>
  &nbsp;&nbsp;  &nbsp;&nbsp;&nbsp; ldr  &nbsp;&nbsp;    r0, _bss_start  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;&nbsp; //找到bss的起始地址 <br>
  &nbsp;&nbsp;  &nbsp;&nbsp;&nbsp; add  &nbsp;&nbsp;   r0, r0, #4  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;&nbsp; //从bss的第一个字开始 <br>
  &nbsp;&nbsp;  &nbsp;&nbsp;&nbsp; ldr  &nbsp;&nbsp;    r1, _bss_end  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;&nbsp; // bss末尾地址 <br>
  &nbsp;&nbsp;  &nbsp;&nbsp;&nbsp; mov  &nbsp;&nbsp;   r2, #0x00000000  &nbsp;&nbsp;    //清零&nbsp;&nbsp;<br>
clbss_l:str  &nbsp;&nbsp;  &nbsp;&nbsp;&nbsp; r2, [r0]  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;    // bss段空间地址清零循环 <br>
  &nbsp;&nbsp;  &nbsp;&nbsp;&nbsp; add  &nbsp;&nbsp;&nbsp; r0, r0, #4<br>
  &nbsp;&nbsp;  &nbsp;&nbsp;&nbsp; cmp  &nbsp;&nbsp;&nbsp; r0, r1<br>
  &nbsp;&nbsp;  &nbsp;&nbsp;&nbsp; bne  &nbsp;&nbsp;   clbss_l<br>
/***************** 关键的初始化子程序 ************************/<br>
/ * cpu初始化关键寄存器<br>
* 设置重要寄存器<br>
* 设置内存时钟<br>
* /<br>
cpu_init_crit:<br>
/** flush v4 I/D caches*/<br>
mov r0, #0<br>
mcr p15, 0, r0, c7, c7, 0 /* flush v3/v4 cache */<br>
mcr p15, 0, r0, c8, c7, 0 /* flush v4 TLB */<br>
/************* disable MMU stuff and caches ****************/<br>
mrc p15, 0, r0, c1, c0, 0<br>
bic r0, r0, #0x00002300 @ clear bits 13, 9:8 (--V- --RS)<br>
bic r0, r0, #0x00000087 @ clear bits 7, 2:0 (B--- -CAM)<br>
orr r0, r0, #0x00000002 @ set bit 2 (A) Align<br>
orr r0, r0, #0x00001000 @ set bit 12 (I) I-Cache<br>
mcr p15, 0, r0, c1, c0, 0<br>
/******* 在重新定位前，我们要设置RAM的时间，因为内存时钟依赖开发板硬件的，你将会找到board目录底下的memsetup.S。**************/<br>
mov ip, lr<br>
#ifndef CONFIG_S3C2440A_JTAG_BOOT<br>
bl memsetup  &nbsp;&nbsp;  &nbsp;&nbsp;&nbsp; //调用memsetup子程序（在board/smdk2442memsetup.S）<br>
#endif<br>
mov lr, ip<br>
mov pc, lr  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;   //子程序返回<br>
<br>
memsetup:   <br>
/**************** 初始化内存 **************/<br>
  &nbsp;&nbsp;  &nbsp;&nbsp;&nbsp; mov  &nbsp;&nbsp;&nbsp; r1, #MEM_CTL_BASE<br>
  &nbsp;&nbsp;  &nbsp;&nbsp;&nbsp; adrl    r2, mem_cfg_val<br>
  &nbsp;&nbsp;  &nbsp;&nbsp;&nbsp; add  &nbsp;&nbsp;&nbsp; r3, r1, #52<br>
1:  &nbsp;&nbsp;    ldr  &nbsp;&nbsp;&nbsp; r4, [r2], #4<br>
  &nbsp;&nbsp;  &nbsp;&nbsp;&nbsp; str  &nbsp;&nbsp;&nbsp; r4, [r1], #4<br>
  &nbsp;&nbsp;  &nbsp;&nbsp;&nbsp; cmp  &nbsp;&nbsp;&nbsp; r1, r3<br>
  &nbsp;&nbsp;  &nbsp;&nbsp;&nbsp; bne  &nbsp;&nbsp;&nbsp; 1b<br>
/*********** 跳转到原来进来的下一个指令（start.S文件里） ***************/&nbsp;&nbsp;<br>
mov  &nbsp;&nbsp;&nbsp; pc, lr  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;&nbsp; //子程序返回<br>
/****************** 建立堆栈 *******************/<br>
ldr r0, _armboot_end  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;   //armboot_end重定位<br>
add r0, r0, #CONFIG_STACKSIZE    //向下配置堆栈空间<br>
sub sp, r0, #12  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;   //为abort-stack预留个3字<br>
/**************** 跳转到C代码去 **************/<br>
ldr pc, _start_armboot  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;&nbsp; //跳转到start_armboot函数入口，start_armboot<br>
字保存函数入口指针<br>
_start_armboot: .word start_armboot    //start_armboot函数在lib_arm/board.c中实现<br>
从此进入第二阶段C语言代码部分<br>
/**************** 异常处理程序 *******************/<br>
.align&nbsp;&nbsp; 5<br>
undefined_instruction:  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;   //未定义指令<br>
get_bad_stack<br>
bad_save_user_regs<br>
bl&nbsp;&nbsp; do_undefined_instruction<br>
.align 5<br>
software_interrupt:  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;    //软件中断<br>
get_bad_stack<br>
bad_save_user_regs<br>
bl&nbsp;&nbsp; do_software_interrupt<br>
.align 5<br>
prefetch_abort:  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;    //预取异常中止<br>
get_bad_stack<br>
bad_save_user_regs<br>
bl&nbsp;&nbsp; do_prefetch_abort<br>
.align 5<br>
data_abort:  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;&nbsp; //数据异常中止<br>
get_bad_stack<br>
bad_save_user_regs<br>
bl&nbsp;&nbsp; do_data_abort<br>
.align 5<br>
not_used:  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;    //未利用<br>
get_bad_stack<br>
bad_save_user_regs<br>
bl&nbsp;&nbsp; do_not_used<br>
.align 5<br>
irq:  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;&nbsp; //中断请求<br>
get_irq_stack<br>
irq_save_user_regs<br>
bl&nbsp;&nbsp; do_irq<br>
irq_restore_user_regs<br>
.align 5<br>
fiq:  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;&nbsp; //快速中断请求<br>
get_fiq_stack<br>
/* someone ought to write a more effiction fiq_save_user_regs */<br>
irq_save_user_regs<br>
bl&nbsp;&nbsp; do_fiq<br>
irq_restore_user_regs<br>
sleep_setting:  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;   //休眠设置<br>
@ prepare the SDRAM self-refresh mode<br>
ldr r0, =0x48000024 @ REFRESH Register<br>
ldr r1, [r0]<br>
orr r1, r1,#(1bd = &amp;bd_data;<br>
memset (gd-&gt;bd, 0, sizeof (bd_t));<br>
monitor_flash_len = _armboot_end_data - _armboot_start;<br>
/*** 调用执行init_sequence数组按顺序执行初始化 ***/<br>
for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {<br>
&nbsp;&nbsp; if ((*init_fnc_ptr)() != 0) {<br>
   hang ();<br>
&nbsp;&nbsp; }<br>
}<br>
#if 0<br>
/**************** 配置可用的flash单元 *************/<br>
size = flash_init ();  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;    //初始化flash<br>
display_flash_config (size);  &nbsp;&nbsp;   //显示flash的大小<br>
/******** _arm_boot在armboot.lds链接脚本中定义 ********/<br>
#endif<br>
#ifdef CONFIG_VFD<br>
#&nbsp;&nbsp; ifndef PAGE_SIZE<br>
#&nbsp;&nbsp; define PAGE_SIZE 4096<br>
#&nbsp;&nbsp; endif<br>
/*********** 为VFD显示预留内存(整个页面)&nbsp;&nbsp; **********/<br>
/******** armboot_real_end在board-specific链接脚本中定义********/<br>
addr = (_armboot_real_end + (PAGE_SIZE - 1)) &amp; ~(PAGE_SIZE - 1);<br>
size = vfd_setmem (addr);<br>
gd-&gt;fb_base = addr;<br>
/******* 进入下一个界面 ********/<br>
addr += size;<br>
addr = (addr + (PAGE_SIZE - 1)) &amp; ~(PAGE_SIZE - 1);<br>
mem_malloc_init (addr);<br>
#else<br>
/********&nbsp;&nbsp; armboot_real_end 在board-specific链接脚本中定义 *******/<br>
mem_malloc_init (_armboot_real_end);<br>
#endif    /* CONFIG_VFD */<br>
#if (CONFIG_COMMANDS &amp; CFG_CMD_NAND)<br>
puts (&quot;NAND:&quot;);<br>
nand_init();&nbsp;&nbsp; /* NAND初始化 */<br>
#endif<br>
#ifdef CONFIG_HAS_DATAFLASH<br>
AT91F_DataflashInit();<br>
dataflash_print_info();<br>
#endif<br>
/********* 初始化环境 **********/<br>
env_relocate ();<br>
/*********** 配置环境变量，重新定位 **********/<br>
#ifdef CONFIG_VFD<br>
/* must do this after the framebuffer is allocated */<br>
drv_vfd_init();<br>
#endif<br>
/* 从环境中得到IP地址 */<br>
bd_data.bi_ip_addr = getenv_IPaddr (&quot;ipaddr&quot;);<br>
/*以太网接口MAC地址*/<br>
{<br>
&nbsp;&nbsp; int i;<br>
&nbsp;&nbsp; ulong reg;<br>
&nbsp;&nbsp; char *s, *e;<br>
&nbsp;&nbsp; uchar tmp[64];<br>
&nbsp;&nbsp; i = getenv_r (&quot;ethaddr&quot;, tmp, sizeof (tmp));<br>
&nbsp;&nbsp; s = (i &gt; 0) ? tmp : NULL;<br>
&nbsp;&nbsp; for (reg = 0; reg bd-&gt;bi_enetaddr);<br>
#endif<br>
#ifdef CONFIG_DRIVER_LAN91C96<br>
if (getenv (&quot;ethaddr&quot;)) {<br>
&nbsp;&nbsp; smc_set_mac_addr(gd-&gt;bd-&gt;bi_enetaddr);<br>
}<br>
/* eth_hw_init(); */<br>
#endif /* CONFIG_DRIVER_LAN91C96 */<br>
/* 通过环境变量初始化*/<br>
if ((s = getenv (&quot;loadaddr&quot;)) != NULL) {<br>
&nbsp;&nbsp; load_addr = simple_strtoul (s, NULL, 16);<br>
}<br>
#if (CONFIG_COMMANDS &amp; CFG_CMD_NET)<br>
if ((s = getenv (&quot;bootfile&quot;)) != NULL) {<br>
&nbsp;&nbsp; copy_filename (BootFile, s, sizeof (BootFile));<br>
}<br>
#endif /* CFG_CMD_NET */<br>
#ifdef BOARD_POST_INIT<br>
board_post_init ();<br>
#endif<br>
/* main_loop() 总是试图自动启动，循环不断执行*/<br>
for (;;) {<br>
&nbsp;&nbsp; main_loop (); /*主循环函数处理执行用户命令&mdash;common/main.c<br>
}<br>
/* NOTREACHED - no way out of command loop except booting */<br>
}</p> <a href="http://hi.baidu.com/niejinbo/blog/item/7ee3ae4ac05047f882025c88.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/niejinbo/blog/category/arm%C7%B6%C8%EB%CA%BD">arm嵌入式</a>&nbsp;<a href="http://hi.baidu.com/niejinbo/blog/item/7ee3ae4ac05047f882025c88.html#comment">查看评论</a>]]></description>
        <pubDate>2009-03-21  21:36</pubDate>
        <category><![CDATA[arm嵌入式]]></category>
        <author><![CDATA[niejinbo666]]></author>
		<guid>http://hi.baidu.com/niejinbo/blog/item/7ee3ae4ac05047f882025c88.html</guid>
</item>

<item>
        <title><![CDATA[uboot移植（一）]]></title>
        <link><![CDATA[http://hi.baidu.com/niejinbo/blog/item/1e9530fb5b988916a8d311d9.html]]></link>
        <description><![CDATA[
		
		<p>&nbsp;&nbsp;&nbsp;  构建好嵌入式linux开发环境以后，下一步就是移植bootloader了，开发板自带的bootloader是vivi，在网上看一些资料说，vivi的功能相对比较弱，现在嵌入式linux系统用的比较多的是uboot，干脆就也用uboot来引导这块板子，还好网上有很多关于uboot移植的资料可以参考，阳初论坛上也位高人完成了uboot在阳初S3C2410板子上的移植。</p>
<p>&nbsp;&nbsp;&nbsp;  既然要移植uboot，首先要了解下什么是uboot，要了解uboot首先还是得了解下bootloader吧。一个linux嵌入式系统从软件角度可以分为四个层次，引导加载程序、linux内核、文件系统、用户应用程序。引导加载程序，就是系统上电后运行的第一段程序，在嵌入式linux中也就是我们说的bootloader。简单地说，Boot<br>
Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序，我们可以初始化硬件设备、建立内存空间的映射图，从而将系统的软硬件环境带到一个合适的状态，以便为最终调用操作系统内核准备好正确的环境。呵呵，读起来有点拗口，建议大家还是看看《嵌入式系统 Boot Loader 技术内幕》.pdf这篇文档，介绍的挺详细的，看几遍应该对bootloader有的大致的了解。</p>
<p>&nbsp;&nbsp;&nbsp;  uboot是德国DENX小组开发的用于多种嵌入式cpu的bootloader程序，可以运行在基于powerPC、ARM、MIPS等多种嵌入式开发板上。</p> <a href="http://hi.baidu.com/niejinbo/blog/item/1e9530fb5b988916a8d311d9.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/niejinbo/blog/category/arm%C7%B6%C8%EB%CA%BD">arm嵌入式</a>&nbsp;<a href="http://hi.baidu.com/niejinbo/blog/item/1e9530fb5b988916a8d311d9.html#comment">查看评论</a>]]></description>
        <pubDate>2009-03-19  20:54</pubDate>
        <category><![CDATA[arm嵌入式]]></category>
        <author><![CDATA[niejinbo666]]></author>
		<guid>http://hi.baidu.com/niejinbo/blog/item/1e9530fb5b988916a8d311d9.html</guid>
</item>

<item>
        <title><![CDATA[构建嵌入式linux开发环境（三）]]></title>
        <link><![CDATA[http://hi.baidu.com/niejinbo/blog/item/cd79f1d204e03dd7a8ec9a12.html]]></link>
        <description><![CDATA[
		
		<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  虚拟机和unbun安装好以后,linux系统就可以启动起来了，但还需要进行一些工作。</p>
<p>&nbsp;&nbsp;<strong>&nbsp;&nbsp;<font color="#ff6600"> 安装VMware-Tools</font><br>
</strong><br>
&nbsp;&nbsp;  安装Vmware-Tools后，可以解决虚拟机存在的一些问题，因为虚拟的毕竟是虚拟的，同时也可以实现虚拟机和PC机文件共享的问题。<br>
具体安装过程如下：<br>
&#61656;虚拟机设置----安装Vmware-Tools工具，此步最好在虚拟机刚启动时操作，否则可能会出现挂载不成功<br>
&#61656;挂载成功后，你会发现虚拟机桌面上有个光盘的图标，Vmware Tools，表示Vmware Tools的安装文件已经装入到ubuntu的光驱中去了<br>
&#61656;打开终端，输入命令 cd cdrom ;ls;会发现有两个文件，其中一个VmwareTools-6.0.2-59824.tar.gz<br>
&#61656;将VmwareTools-6.0.2-59824.tar.gz拷贝到根目录cp VmwareTools-6.0.2-59824.tar.gz /<br>
注意，须切换到root用户才可复制（命令 sudo su）<br>
&#61656;解压文件包 tar &ndash;xzvf VmwareTools-6.0.2-59824.tar.gz,解压完毕后会发现根目录下多了个vmware-tools-distrib目录，进入到该目录，cd vmware-tools-distrib;ls;会发现有个vmware-install.pl文件<br>
&#61656;安装，./ vmware-install.pl,一路回车即可完成安装<br>
<br>
<strong>&nbsp;&nbsp;&nbsp;<span style="mso-bidi-: 10.5pt"><span style="mso-list: Ignore"><span style="font: 7pt Times New Roman"> </span></span></span><span style="mso-bidi-font-size: 10.5pt"><font color="#ff9900">Vmware-Tools</font></span></strong><span style="mso-bidi-font-size: 10.5pt"><strong><font color="#ff9900">安装的终极解决办法</font><br>
</strong><br>
&nbsp;&nbsp;  照以上步骤安装以后，文件共享问题还是不能解决，在网上找了下资料，以下方法可以解决这个问题，故称之为终极解决办法。<br>
1&gt;下载open-vm-tools<br>
<a href="http://jaist.dl.sourceforge.net/sourceforge/open-vm-tools/open-vm-tools-2008.05.02-90473.tar.gz">http://jaist.dl.sourceforge.net/sourceforge/open-vm-tools/open-vm-tools-2008.05.02-90473.tar.gz</a><br>
这个是已经编译的版本，只有编译过的版本才能用于接下来的操作<br>
2&gt;那么如何将下载的open-vm-tools-2008.05.02-90473.tar.gz共享复制到虚拟机中呢？<br>
我是这样操作的，用一个ISO镜像制作软件把下载的文件转换为ISO文件，然后在虚拟机设置里把CD-ROM映射到这个ISO文件，就象之前安装ubuntu那样。然后就可以从cdrom目录里把这个文件复制到ubuntu系统中去了，我是复制到/home/niejinbo。<br>
3&gt;然后解压文件，进入modules/linux 目录，将vmxnet 重命名为vmxnet-only，其他也改为如对应的 xxx-only，分别执行tar -cf xxx.tar xxx-only；<br>
4&gt;将 xxx.tar 都复制到 /usr/lib/vmware-tools/modules/source，替换原来的文件<br>
5&gt;sudo vmware-config-tools.pl 一路回车，成功编译通过<br>
6&gt;虚拟机设置&mdash;选项&mdash;共享文件---添加---浏览选择PC机上的一个文件夹，设置好后，便可以在/mnt/fgxj/目录下看到刚设置好共享文件夹，且可以把里面的文件复制到虚拟机，终于实现与windows系统文件复制粘贴。<br>
来自：<a href="http://blog.chinaunix.net/u2/68498/showart_723489.html">http://blog.chinaunix.net/u2/68498/showart_723489.html</a></span></p>
<p><span style="mso-bidi-font-size: 10.5pt"><font color="#ff9900"><strong>Ubuntu8.04中的root用户以中文桌面登陆</strong></font><br>
<br>
&nbsp;&nbsp;  修改 root 下隐藏文件.profile 文件最后两句，蓝色部分是修改过的：<br>
# ~/.profile: executed by Bourne-compatible login shells.<br>
if [ &quot;$BASH&quot; ]; then<br>
if [ -f ~/.bashrc ]; then<br>
. ~/.bashrc<br>
fi<br>
fi<br>
mesg n<br>
# Installed by Debian Installer:<br>
# no localization for root because zh_CN.UTF-8<br>
# cannot be properly displayed at the Linux console<br>
<font color="#ff00ff">LANG=&quot;zh_CN.UTF-8&quot;<br>
LANGUAGE=&quot;zh_CN:zh&quot;<br>
</font>&nbsp;&nbsp;  修改后保存，重启系统即可。注意须root用户登陆才有修改文件的权利，sudo passwd root;<br>
&nbsp;&nbsp;  根据提示输入两边密码。系统----登陆窗口----安全----允许本地管理员登陆。然后就可以root登陆了。<br>
<br>
</span><span style="mso-bidi-font-size: 10.5pt"><font color="#ff9900"><strong>解决安装vmware tools后ubuntu鼠标滚轮无法使用问题</strong></font><br>
<br>
用 root 用户登录编辑 /ect/x11/xorg.conf 文件，把里面的鼠标属性&ldquo;p/2&rdquo; 改成&ldquo;ImPS/2&rdquo;<br>
如下：<br>
Section &quot;InputDevice&quot; <br>
Identifier &quot;Configured Mouse&quot; <br>
Driver &quot;vmmouse&quot; <br>
<font color="#ff00ff">Option &quot;Protocol&quot; &quot;ImPS/2&quot;</font>&nbsp;&nbsp;  <br>
Option &quot;CorePointer&quot; <br>
Option &quot;Device&quot; &quot;/dev/input/mice&quot; <br>
Option &quot;ZAxisMapping&quot;&nbsp;&nbsp;&nbsp;  &quot;4 5&quot; <br>
Option &quot;Emulate3Buttons&quot;&nbsp;&nbsp;  &quot;yes&quot;&nbsp;&nbsp;&nbsp;  -----------------这两行也可以不要<br>
EndSection <br>
我装的ubuntu这个版本这个问题好像已经给解决了，鼠标可以轮滑</span></p>
<p><span style="mso-bidi-font-size: 10.5pt"><strong><font color="#ff9900">安装交叉编译器</font></strong><br>
<br>
拿来主义，下载现成的交叉编译器安装<br>
网上有很多编译好的交叉编译器，常见的版本有2.95.3和3.4.1,将下载的压缩包解压，复制到usr/local/arm,下面以安装3.4.1为例：<br>
创建目录：mkdir &ndash;p /usr/local/arm<br>
将解压得到的文件夹复制到usr/local/ar<br>
指定交叉编译器路径：export PATH=$PATH:/usr/local/arm/3.4.1/bin<br>
这样交叉编译器就算是安装好了，那么怎么才知道我们安装的交叉编译器能不能用呢,我们这样来测试以下<br>
新建一个c源文件，test.c,如下：<br>
#include&lt;stdio.h&gt;<br>
int main()<br>
{<br>
printf(&quot;This is a program!/n&quot;);<br>
return 0;<br>
}<br>
然后复制到一个目录，我是复制到/home/niejinbo/niesrc,进入该目录<br>
在终端执行以下命令<br>
arm-linux-gcc -o test test.c：<br>
file test<br>
可以发现该目录下多了一个test.o文件，同时可以看到以下信息，表明交叉编译器安装成功。<br>
test: ELF 32-bit LSB executable, ARM, version 1, for GNU/Linux 2.4.3, dynamically linked (uses shared libs), not stripped</span></p>
<p><span style="mso-bidi-font-size: 10.5pt">还可以自己用crosstool构建，编译时间很长</span></p>
<p><span style=" mso-bidi-font-size: 10.5pt"><strong><font color="#ff9900">安装<span>ubuntu</span>相关软件包，若缺失某些软件包，编译时可能会出现一些错误</font><br>
</strong></span><span style=" mso-bidi-font-size: 10.5pt">Apt-get install <span style="color: #993366">bison<br>
</span></span><span style=" mso-bidi-font-size: 10.5pt">Apt-get install </span><font face="Times New Roman"><span style="color: purple">flex<br>
</span></font><span style=" mso-bidi-font-size: 10.5pt">Apt-get install </span><font face="Times New Roman"><span style="color: purple">build-essential<br>
</span></font><span style=" mso-bidi-font-size: 10.5pt">Apt-get install<span style="color: purple"> </span></span><font face="Times New Roman"><span style="color: purple">libncurses5-dev<br>
</span></font><font face="Times New Roman"><span style="color: red">Apt-get<span style="mso-spacerun: yes">  </span>install<span style="mso-spacerun: yes">  </span></span><span style="color: purple">patch</span><span style="color: red"> </span></font><span style=" mso-bidi-font-size: 10.5pt"></span></p>
<p> </p> <a href="http://hi.baidu.com/niejinbo/blog/item/cd79f1d204e03dd7a8ec9a12.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/niejinbo/blog/category/arm%C7%B6%C8%EB%CA%BD">arm嵌入式</a>&nbsp;<a href="http://hi.baidu.com/niejinbo/blog/item/cd79f1d204e03dd7a8ec9a12.html#comment">查看评论</a>]]></description>
        <pubDate>2009-03-18  20:37</pubDate>
        <category><![CDATA[arm嵌入式]]></category>
        <author><![CDATA[niejinbo666]]></author>
		<guid>http://hi.baidu.com/niejinbo/blog/item/cd79f1d204e03dd7a8ec9a12.html</guid>
</item>

<item>
        <title><![CDATA[构建嵌入式linux开发环境（二）]]></title>
        <link><![CDATA[http://hi.baidu.com/niejinbo/blog/item/ddae0ff2a76752c30b46e033.html]]></link>
        <description><![CDATA[
		
		<p>&nbsp;&nbsp;&nbsp;&nbsp;  Windows+VMware+linux构建linux开发环境</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;  相信很多嵌入式开发者都选用上述方案构建linux开发环境，我也不例外。VMware是一个虚拟机软件，功能很强大，可以使一台机子上运行两个或者更多的操作系统，前提是你的机子配置得高。linux操作系统我选择的是ubuntu，直接在迅雷里下载的ISO 文件，也有不少人选择的是ReadHat9.0。说开惭愧，以前也不晓得ubuntu就是一个基于linux内核的操作系统，有一天我在OURAVR里看到《<a target="_blank" href="http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=1419028&amp;bbs_page_no=1&amp;bbs_id=9999">阿虚的S3C2410+Linux学习笔记</a>》，才知道有这么一个东西，可以说我学习嵌入式很大程度上都是参考这篇文档，作者的博客（<a target="_blank" href="http://hi.baidu.com/aokikyon">阿虚的电子小屋</a>）也有很多关于嵌入式的东西，值得一看。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;  PC机上安装windows操作系统，就不用在说什么了吧，下面就说说安装VMware和ubuntu。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;  VMware我也是在迅雷里面下载的，下载的时候注意选择下版本，建议使用6.0以上的版本，貌似要稳定点。下载好了以后就直接安装，一路next，就像你安装QQ那样简单，还有不清楚的可以参考<a target="_blank" href="http://xuniji.ys168.com">虚拟机之家</a>，上面有很多动画教程。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  安装ubuntu要稍麻烦点，其实也不麻烦。首先启动VMware虚拟机，新建一个虚拟机，会弹出一个向导来，在虚拟机配置的时候，就选典型吧，然后点下一步，选择一个客户机操作系统，我们选择linux--ubuntu，再指定保存路径，分配硬盘大小，最后点击完成就OK了，分配硬盘大小，如果允许建议还是多分点，免得后来弄个什么东西说空间不足。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  如下图，设置好CD-ROM，即可开始安装了。</p>
<div forimg="1">
<p><img class="blogimg" border="0" small="0" src="http://hiphotos.baidu.com/niejinbo/pic/item/9b085dde1d21ad3248540337.jpg"><br>
<br>
确定之后，点击启动虚拟机。前面几步，按照提示一路下一步就可以了。分区的时候要注意一下，选择手动分区，具体我是这样分的，<span style="font-size: 10.5pt; mso-font-kerning: 1.0pt">分配<span>9000M</span>挂载到<span> / , </span>文件系统为<span>ext3,</span>分配<span>3000M</span>挂载到<span> /home ,</span>文件系统为<span>ext3,</span>剩下的则作为交换空间，即选择文件系统为<span>swap</span>。之后再设置一个用户和密码就可以自动完成安装了。之前安装的时候没有截图保留证据，具体的过程也不好说的，干脆就推皮球，呵呵，具体请参考<span style="font-size: 10.5pt; mso-font-kerning: 1.0pt"><a href="http://forum.ubuntu.org.cn/viewtopic.php?f=86&amp;t=39777">http://forum.ubuntu.org.cn/viewtopic.php?f=86&amp;t=39777</a></span></span></p>
<p><span style="font-size: 10.5pt; mso-font-kerning: 1.0pt"><span style="font-size: 10.5pt; mso-font-kerning: 1.0pt">&nbsp;&nbsp;&nbsp;&nbsp;  ubuntu正常启动。对于初学者，建议利用这个平台先熟悉下linux环境，记一些linux下常用的命令，这样有助于以后的嵌入式学习，呵呵，其实我也是一个初学者，共勉！</span></span></p>
</div> <a href="http://hi.baidu.com/niejinbo/blog/item/ddae0ff2a76752c30b46e033.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/niejinbo/blog/category/arm%C7%B6%C8%EB%CA%BD">arm嵌入式</a>&nbsp;<a href="http://hi.baidu.com/niejinbo/blog/item/ddae0ff2a76752c30b46e033.html#comment">查看评论</a>]]></description>
        <pubDate>2009-03-17  14:13</pubDate>
        <category><![CDATA[arm嵌入式]]></category>
        <author><![CDATA[niejinbo666]]></author>
		<guid>http://hi.baidu.com/niejinbo/blog/item/ddae0ff2a76752c30b46e033.html</guid>
</item>

<item>
        <title><![CDATA[构建嵌入式linux开发环境（一）]]></title>
        <link><![CDATA[http://hi.baidu.com/niejinbo/blog/item/e54d2d72ca439b148601b025.html]]></link>
        <description><![CDATA[
		
		<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  做嵌入式linux方面的开发，首先得建立一个开发环境，俗话说，巧妇难为无米之炊，没这个环境怎么去开发呢。学习嵌入式linux你可以不去上培训班（培训班一般都贵的吓人，象我这样的小老百姓上不起啊），但你必须得有一块开发板，平时节约点，少吃点零食，少挥霍一点，几个月下来，买板子的钱就有了。当然还得有个电脑，写程序、编译程序都是在PC机上进行的，建议还是用台式的，接口比较多，并口串口都有，笔记本一般都只有几个USB接口，烧写程序的时候有点麻烦。下面就简单介绍下硬软件环境：</p>
<p>硬件环境<br>
PC机：CPU AMD2008+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  内存 512M+1G&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  硬盘：160G&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  显示器 CRT<br>
开发板（阳初S3C2410）<br>
CPU S3C2410（ARM920T内核）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  SDRAM 64M&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  NAND FLASH 64M&nbsp;&nbsp;<br>
网络芯片 CS8900A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  声卡芯片 UDA1314&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  VGA芯片 CH7004<br>
JTAG 简易JTAG小板&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  串口下载线</p>
<p>软件环境<br>
PC机： Windows XP <br>
虚拟机软件：VMware 6.0.2 (CPU分配一个，内存分配512M 硬盘分配13G，其它设备共享PC机)<br>
虚拟机安装操作系统：ubuntu (迅雷里下的，中文强化版，可能高人给改动了的)<br>
下载工具：tftpd32&nbsp;&nbsp;&nbsp;&nbsp;  SJF_JTAG下载软件(初次下载uboot使用)<br>
串口终端：windows自带超级终端<br>
交叉编译器：3.4.1&nbsp;&nbsp;  3.3.2&nbsp;&nbsp;  2.95.3<br>
其它：想到了再补充<br>
<br>
今天就写到这里，明天介绍如何安装虚拟机，ubuntu。。。</p>
<p> </p> <a href="http://hi.baidu.com/niejinbo/blog/item/e54d2d72ca439b148601b025.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/niejinbo/blog/category/arm%C7%B6%C8%EB%CA%BD">arm嵌入式</a>&nbsp;<a href="http://hi.baidu.com/niejinbo/blog/item/e54d2d72ca439b148601b025.html#comment">查看评论</a>]]></description>
        <pubDate>2009-03-16  22:12</pubDate>
        <category><![CDATA[arm嵌入式]]></category>
        <author><![CDATA[niejinbo666]]></author>
		<guid>http://hi.baidu.com/niejinbo/blog/item/e54d2d72ca439b148601b025.html</guid>
</item>

<item>
        <title><![CDATA[前言----关于我的毕业设计]]></title>
        <link><![CDATA[http://hi.baidu.com/niejinbo/blog/item/b090ea25f7c28c094d088d61.html]]></link>
        <description><![CDATA[
		
		<p>&nbsp;&nbsp;&nbsp;  好久没写过博客了，过了年回学校一个多月了，总感觉生活没了目标，想做很多事情，又什么都不想做。最近老师在催毕业设计的事情了，不能在什么都不想做了。</p>
<p>&nbsp;&nbsp;  毕业设计，我开始选的题目是《ISP下载软件设计》，本来以为是设计个并口ISP下载线的软件，和指导老师沟通下后，才指导不是用并口下载方式，而是用USB，硬件部分是另外一个同学做，我做PC机上运行的上位机，我一看是USB心里就没底了，因为我对USB通信协议什么的，一点都不晓得。指导老师建议用高级语言，VC或者是VB语言编写。在图书馆找了几本VC、VB的书，看了段时间觉得云里雾里的，心里更没底了，算了吧，有机会还是换个题目。</p>
<p>&nbsp;&nbsp;&nbsp; 就这样找指导老师商量了一下，可以换题。我这有块S3C2410的开发板，干脆就用这块板子做个毕业设计，自己想了一下，也在网上看了一下，同时也咨询了下其他人，决定就移植uboot和linux内核。拿这个题目去找指导老师，老师说仅仅是移植可能没多少工作要做，那怎么办呢，再往前面走一步吧，有人建议做个路由器或者是嵌入式web服务器，鉴于复杂程度，决定做个嵌入式web服务器。到此题目算是选定了。</p>
<p>&nbsp;&nbsp;&nbsp;  我初步分析了一下，大概有这几个工作要做：<br>
&nbsp;&nbsp;&nbsp;  1.在PC机上建立嵌入式linux系统开发环境<br>
&nbsp;&nbsp;&nbsp;&nbsp; 2.移植uboot到开发板<br>
&nbsp;&nbsp;&nbsp;  3.移植linux内核到开发板<br>
&nbsp;&nbsp;&nbsp;  4.建立根文件系统<br>
&nbsp;&nbsp;&nbsp;  5.移植网络设备驱动到linux内核<br>
&nbsp;&nbsp;&nbsp;  6.移植boa，构建嵌入式web服务器<br>
&nbsp;&nbsp;  这个题目虽然简单，但是细细看下，还是把嵌入式linux系统的开发过程走了一遍。开发板去年就买了，买回来之后就按照光盘里的说明书启动了下linux，在PC机上搭建了个虚拟机平台（VM+ubuntu),准备编译uboot,哪曾想到，一点都未改动的源代码居然都编译没通过，后来就把板子放在一边再也没碰过了。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;  阳春三月，重拾旧业，想把嵌入式系统开发的流程走一边，希望在这个过程中，或多或少学到点东西，小波也将在博客中记录这一过程，我还是个嵌入式菜鸟，当然所写的东西不可能完全原创，在此提前向可能要参考的文献的作者表示感谢！</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;  希望我能顺利的通过毕业设计，顺利的毕业，顺利的。。。</p> <a href="http://hi.baidu.com/niejinbo/blog/item/b090ea25f7c28c094d088d61.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/niejinbo/blog/category/arm%C7%B6%C8%EB%CA%BD">arm嵌入式</a>&nbsp;<a href="http://hi.baidu.com/niejinbo/blog/item/b090ea25f7c28c094d088d61.html#comment">查看评论</a>]]></description>
        <pubDate>2009-03-15  15:22</pubDate>
        <category><![CDATA[arm嵌入式]]></category>
        <author><![CDATA[niejinbo666]]></author>
		<guid>http://hi.baidu.com/niejinbo/blog/item/b090ea25f7c28c094d088d61.html</guid>
</item>

<item>
        <title><![CDATA[怎么样学好单片机(转---郭天祥）]]></title>
        <link><![CDATA[http://hi.baidu.com/niejinbo/blog/item/a6579353b6091a090cf3e3b0.html]]></link>
        <description><![CDATA[
		
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 24.1pt; mso-char-indent-count: 2.0"><span style="font-size: 12pt">很多想学单片机的人问我的第一句话就是怎样才能学好单片机？对于这个问题我今天就我自己是如何开始学单片机，如何开始上手，如何开始熟练这个过程给大家讲讲。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 24.1pt; mso-char-indent-count: 2.0"> </p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 24pt; mso-char-indent-count: 2.0"><span style="font-size: 12pt">先说说单片机，一般我们现在用的比较多的的</span><span style="font-size: 12pt"><font face="Times New Roman">MCS-51</font></span><span style="font-size: 12pt">的单片机，它的资料比较多，用的人也很多，市场也很大。就我个人的体会怎么样才能更快的学会单片机这门课。单片机这门课是一项非常重视动手实践的科目，不能总是看书，但是学习它首先必须得看书，因为从书中你需要大概了解一下，单片机的各个功能寄存器，而说明白点，我们使用单片机就是用软件去控制单片机的各个功能寄存器，再说明白点，就是控制单片机那些管脚的电平什么时候输出高，什么时候输出低。由这些高低电平的变化来控制你的系统板，实现我们需要的各个功能。至于看书，只需大概了解单片机各管脚都是干什么的？能实现什么样的功能？第一次，第二次你可能看不明白，但这不要紧，因为还缺少实际的感观认识。所以我总是说，学单片机看书看两三天的就够了，看小说你一天能看五六本，看单片机你两三天看两三遍就够了，可以不用仔细的看。推荐一本书，就这一本就足够，书名是《新编</span><span style="font-size: 12pt"><font face="Times New Roman">MCS-51</font></span><span style="font-size: 12pt">单片机应用设计》，是哈尔滨工业大学出版社出的的，作者是张毅刚。大概了解一下书上的内容，然后实践，这是非常关键的，如果说学单片机你不实践那是不可能学会的，关于实践有两种方法你可以选择，一种方法：你自己花钱买一块单片机的学习板，不要求功能太全的，对于初学者来说你买功能非常多的那种板子，上面有很多东西你这辈子都用不着，我建议有流水灯、数码管、独立键盘、矩阵键盘、</span><span style="font-size: 12pt"><font face="Times New Roman">AD</font></span><span style="font-size: 12pt">或</span><span style="font-size: 12pt"><font face="Times New Roman">DA</font></span><span style="font-size: 12pt">（原理一样）、液晶、蜂鸣器，这就差不多了。如果上面我提到的这些，你能熟练应用，那可以说对于单片机方面的硬件你已经入门了，剩下的就是自己练习设计电路，不断的积累经验。只要过了第一关，后面的路就好走多了，万事开头难，大家可能都听过。方法二：你身边如果有单片机方面的高手，向他求助，让他帮你搭个简单的最小系统板。对于高手来说，做个单片机的最小系统板只需要一分钟的时间，而对于初学者可就难多了，因为只有对硬件了解了，才能熟练运用。而如果你身边没有这样的高手，又找不到可以帮助你的人，那我劝你最好是自己买上一块，毕竟自己有一块要方便的多，以后做单片机类的小实验时都能用得上，还省事。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;  </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  有了单片机学习板之后你就要多练习，最好是自己有台电脑，一天少看电影，少打游戏，把学习板和电脑连好，打开调试软件坐在电脑前，先学会怎么用调试软件，然后从最简单的流水灯实验做起，等你能让那八个流水灯按照你的意愿随意流动时你已经入门了，你会发现单片机是多么迷人的东西啊，太好玩了，这不是在学习知识，而是在玩，当你编写的程序按你的意愿实现时你比做什么事都开心，你会上瘾的，真的。做电子类的人真的会上瘾。然后让数码管亮起来，这两项会了后，你已经不能自拔了，你已经开始考虑你这辈子要走哪一行了。就是要这样练习，在写程序的时候你肯定会遇到很多问题，而这时你再去翻书找，或是问别人，当得到解答后你会记住一辈子的，知识必须用于现实生活中，解决实际问题，这样才能发挥它的作用，你自己好好想想，上了这么多年大学，天天上课，你在课堂上学到了什么？是不是为了期末考试而忙碌呢？考完得了</span><span style="font-size: 12pt"><font face="Times New Roman">90</font></span><span style="font-size: 12pt">分，哈哈哈好高兴啊，下学期开学回来忘的一干二净，是不是？你学到什么了？但是我告诉你单片机一旦学会，永远不会忘了。另外我再说说用汇编和</span><span style="font-size: 12pt"><font face="Times New Roman">C</font></span><span style="font-size: 12pt">语言编程的问题。很多同学大一二就开设了</span><span style="font-size: 12pt"><font face="Times New Roman">C</font></span><span style="font-size: 12pt">语言的课，我也上过，我知道那时天天就是几乘几，几加几啊，求个阶乘啊。学完了有什么用？让你用</span><span style="font-size: 12pt"><font face="Times New Roman">C</font></span><span style="font-size: 12pt">语言编单片机的程序你是不是就傻了？书上的东西我们必须要会运用。单片机编程用</span><span style="font-size: 12pt"><font face="Times New Roman">C</font></span><span style="font-size: 12pt">语言或汇编语言都可以，但是我建议用</span><span style="font-size: 12pt"><font face="Times New Roman">C</font></span><span style="font-size: 12pt">语言比较好，如果原来有</span><span style="font-size: 12pt"><font face="Times New Roman">C</font></span><span style="font-size: 12pt">语言的基础那学起来会更好，如果没有，也可以边学单片机边学</span><span style="font-size: 12pt"><font face="Times New Roman">C</font></span><span style="font-size: 12pt">语言，</span><span style="font-size: 12pt"><font face="Times New Roman">C</font></span><span style="font-size: 12pt">语言也挺简单，只是一门工具而已，我劝你最好学会，将来肯定用得着，要不你以后也得学，你一点汇编都不会根本无所谓，但你一点</span><span style="font-size: 12pt"><font face="Times New Roman">C</font></span><span style="font-size: 12pt">语言都不会那你将来会吃苦头。汇编写程序代码效率高，但相对难度较大，而且很罗嗦，尤其是遇到算法方面的问题时，根本是麻烦的不得了，现在单片机的主频在不断的提高，我们完全不需要那么高效率的代码，因为有高频率的时钟，单片机的</span><span style="font-size: 12pt"><font face="Times New Roman">ROM</font></span><span style="font-size: 12pt">也在不断的提高，足够装得下你用</span><span style="font-size: 12pt"><font face="Times New Roman">C</font></span><span style="font-size: 12pt">语言写的任何代码，</span><span style="font-size: 12pt"><font face="Times New Roman">C</font></span><span style="font-size: 12pt">语言的资料又多又好找，将来可移植性非常好，只需要变一个</span><span style="font-size: 12pt"><font face="Times New Roman">IO</font></span><span style="font-size: 12pt">口写个温度传感器的程序在哪里都能用，所以我劝大家用</span><span style="font-size: 12pt"><font face="Times New Roman">C</font></span><span style="font-size: 12pt">语言。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"> </p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-size: 12pt"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;&nbsp;  </span></font></span><span style="font-size: 12pt">总结上面，只要你有信心，做事能坚持到底，有不成功不放弃的强烈意志，那学个单片机来说就是件非常容易的事。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"> </p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"> </p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-size: 12pt">步骤：</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-size: 12pt"><font face="Times New Roman">1.</font></span><span style="font-size: 12pt">找本书大概了解一下单片机结构，大概了解就行。不用都看懂，又不让你出书的。（三天）</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-size: 12pt"><font face="Times New Roman">2.</font></span><span style="font-size: 12pt">找学习板练习编写程序，学单片机就是练编程序，遇到不会的再问人或查书。</span><span style="font-size: 12pt"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;  </font></span></span><span style="font-size: 12pt">（二十天）</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-size: 12pt"><font face="Times New Roman">3.</font></span><span style="font-size: 12pt">自己网上找些小电路类的资料练习设计外围电路。焊好后自己调试，熟悉过程。</span><span style="font-size: 12pt"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;  </font></span></span><span style="font-size: 12pt">（十天）</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-size: 12pt"><font face="Times New Roman">4.</font></span><span style="font-size: 12pt">自己完全设计具有个人风格的电路，产品，。。。你已经是高手了。</span><span style="font-size: 12pt"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font></span></span><span style="font-size: 12pt">。。。。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"> </p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"> </p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"> </p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;  看到了吗？下功夫一个多月你就能成为高手，我就讲这么多了，学不学得会，下不下得了功夫就看你的了。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"> </p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"> </p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"> </p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;  最后我呢再给大家推荐两款我自己专门给单片机的初学者设计的单片机学习板，大家可以看看它的资料，需要说明一下，如果使用我的单片机学习板，我可以负责终生的技术支持，直到教会你为止。支持的方式你可以通过</span><span style="font-size: 12pt"><font face="Times New Roman">QQ</font></span><span style="font-size: 12pt">，</span><span style="font-size: 12pt"><font face="Times New Roman">EMIL</font></span><span style="font-size: 12pt">等随时问我关于单片机开发及电路设计方面的问题。</span></p> <a href="http://hi.baidu.com/niejinbo/blog/item/a6579353b6091a090cf3e3b0.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/niejinbo/blog/category/%CE%E5%D2%BB%B5%A5%C6%AC%BB%FA">五一单片机</a>&nbsp;<a href="http://hi.baidu.com/niejinbo/blog/item/a6579353b6091a090cf3e3b0.html#comment">查看评论</a>]]></description>
        <pubDate>2008-12-16  23:03</pubDate>
        <category><![CDATA[五一单片机]]></category>
        <author><![CDATA[niejinbo666]]></author>
		<guid>http://hi.baidu.com/niejinbo/blog/item/a6579353b6091a090cf3e3b0.html</guid>
</item>

<item>
        <title><![CDATA[一厘米宽，一公里深]]></title>
        <link><![CDATA[http://hi.baidu.com/niejinbo/blog/item/7659d42be729042ad52af17d.html]]></link>
        <description><![CDATA[
		
		<p>最近忙于找工作，很久没更新博客了，今天就象征下的更新下</p>
<p>一厘米宽，一公里深</p>
<p>选定一个方向，并朝这个方向奋斗</p>
<p>堂堂正正做人，认认真真做技术</p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/niejinbo/blog/category/%D0%A1%B2%A8%D4%D3%CC%B8">小波杂谈</a>&nbsp;<a href="http://hi.baidu.com/niejinbo/blog/item/7659d42be729042ad52af17d.html#comment">查看评论</a>]]></description>
        <pubDate>2008-11-13  22:17</pubDate>
        <category><![CDATA[小波杂谈]]></category>
        <author><![CDATA[niejinbo666]]></author>
		<guid>http://hi.baidu.com/niejinbo/blog/item/7659d42be729042ad52af17d.html</guid>
</item>

<item>
        <title><![CDATA[reg51详解]]></title>
        <link><![CDATA[http://hi.baidu.com/niejinbo/blog/item/0c6c7fd8739dd5ef38012f52.html]]></link>
        <description><![CDATA[
		
		<div>/* BYTE Register */<br>
sfr P0 = 0x80; //P0口<br>
sfr P1 = 0x90; //P1口<br>
sfr P2 = 0xA0; //P2口<br>
sfr P3 = 0xB0; //P3口<br>
sfr PSW = 0xD0; //程序状态字，具体位意义见位定义<br>
sfr ACC = 0xE0; //累加器，程序员最常用的<br>
sfr B = 0xF0; //寄存器，主要用于乘除<br>
sfr SP = 0x81; //堆栈指针，初始化为07；先加1后压栈，先出栈再减1，<br>
sfr DPL = 0x82;<br>
sfr DPH = 0x83; //数据指针，用途大<br>
sfr PCON = 0x87; //电源控制<br>
sfr TCON = 0x88; //Timer/Counter控制<br>
sfr TMOD = 0x89; //Timer/Counter方式控制<br>
sfr TL0 = 0x8A;<br>
sfr TL1 = 0x8B; //<br>
sfr TH0 = 0x8C; //存着当前的计数值<br>
sfr TH1 = 0x8D; //我就想不明白，当时设计的时候，为什么不把TH0,TL0放在连续的地址！<br>
sfr IE = 0xA8; //好东西，中断控制<br>
sfr IP = 0xB8; //中断优先级控制，没有设计过要求时间严格的系统，所以至今没有用过<br>
sfr SCON = 0x98; //哇，熟悉，串口控制寄存器<br>
sfr SBUF = 0x99; //哇，更熟悉，串口缓冲寄存器
<p><br>
/* BIT Register */<br>
/* PSW */<br>
sbit CY = 0xD7; //进位或借位，有就是1，没有就是0<br>
sbit AC = 0xD6; //辅助进借位，（麻烦b）<br>
sbit F0 = 0xD5; //没有具体用途，可以由用户决定他的意义，所以它就没有意义<br>
sbit RS1 = 0xD4;<br>
sbit RS0 = 0xD3; //工作寄存器选择，这个在下面解释<br>
sbit OV = 0xD2; //over！溢出，有是1，没有是0<br>
sbit P = 0xD0; //奇偶校验，奇数个1是1</p>
<p>/* TCON */<br>
sbit TF1 = 0x8F; //T1的中断请求标志<br>
sbit TR1 = 0x8E; //Timer 1 running，好记吧~<br>
sbit TF0 = 0x8D; //<br>
sbit TR0 = 0x8C; //把上面两个1换成0<br>
sbit IE1 = 0x8B; //interrupt external 1 外中断请求标志<br>
sbit IT1 = 0x8A; //interrupt triggle 1 外中断触发方式<br>
sbit IE0 = 0x89;<br>
sbit IT0 = 0x88; //同样，把上面的两个1换成0</p>
<p>/* IE */<br>
sbit EA = 0xAF; //Enable all哇，重要，全局中断控制，光着他，哈哈，什么都不用作了，就像放假一样<br>
sbit ES = 0xAC; //Enable Serial,开串口中断<br>
sbit ET1 = 0xAB; //Enable Timer/Counter 1<br>
sbit EX1 = 0xAA; //Enable External 1<br>
sbit ET0 = 0xA9; //Enable Timer/counter 0<br>
sbit EX0 = 0xA8; //Enable External 0</p>
<p>/* IP */<br>
sbit PS = 0xBC; //串行中断优先级<br>
sbit PT1 = 0xBB; //T1优先级<br>
sbit PX1 = 0xBA; //外部中断1优先级<br>
sbit PT0 = 0xB9; //<br>
sbit PX0 = 0xB8; //上面两个1换成0</p>
<p>/* P3 */ //控制寄存器！！！！<br>
sbit RD = 0xB7; //读<br>
sbit WR = 0xB6; //写<br>
sbit T1 = 0xB5; //T/C1<br>
sbit T0 = 0xB4; //T/C0<br>
sbit INT1 = 0xB3; //外中断1<br>
sbit INT0 = 0xB2; //外中断0<br>
sbit TXD = 0xB1; //串行发送<br>
sbit RXD = 0xB0; //串行接收</p>
<p>/* SCON */<br>
sbit SM0 = 0x9F; //<br>
sbit SM1 = 0x9E; //串口工作方式<br>
sbit SM2 = 0x9D; //什么鬼特征位，要用查书，或者等我以后解释，啊哈<br>
sbit REN = 0x9C; //串行接收允许<br>
sbit TB8 = 0x9B; //收到的第九位<br>
sbit RB8 = 0x9A; //要发的第九位<br>
sbit TI = 0x99; //哇，熟悉吧，发送完成中断标志<br>
sbit RI = 0x98; //接收完成中断标志</p>
</div>
<div class="invisible">文章引用自： <a href="http://hi.baidu.com/zhangyong214/blog/item/636ba100af653e84e950cd88.html">http://hi.baidu.com/zhangyong214/blog/item/636ba100af653e84e950cd88.html</a></div> <a href="http://hi.baidu.com/niejinbo/blog/item/0c6c7fd8739dd5ef38012f52.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/niejinbo/blog/category/%CE%E5%D2%BB%B5%A5%C6%AC%BB%FA">五一单片机</a>&nbsp;<a href="http://hi.baidu.com/niejinbo/blog/item/0c6c7fd8739dd5ef38012f52.html#comment">查看评论</a>]]></description>
        <pubDate>2008-10-09  21:13</pubDate>
        <category><![CDATA[五一单片机]]></category>
        <author><![CDATA[niejinbo666]]></author>
		<guid>http://hi.baidu.com/niejinbo/blog/item/0c6c7fd8739dd5ef38012f52.html</guid>
</item>

<item>
        <title><![CDATA[基于Proteus的ARM(LPC2124)学习---一个ARM初学者的学习历程]]></title>
        <link><![CDATA[http://hi.baidu.com/niejinbo/blog/item/7ac28634f6992a1790ef3988.html]]></link>
        <description><![CDATA[
		
		<p>基于Proteus的ARM(LPC2124)学习<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font face="楷体_GB2312"> -----------&nbsp;&nbsp;  一个ARM初学者的学习历程<br>
作者：聂金波<br>
<br>
<font face="宋体">第一讲：Proteus简介<br>
第二讲：ARM基础知识<br>
第三讲：ADS简介<br>
第四讲：实例1&mdash;按键控制流水灯<br>
第&gt;=五讲：暂未完成<br>
(小波不才，国庆期间，闲来无事，就找了些资料参考，自己瞎鼓捣出这个学习教程，(参考相关资料，稍作整理，并非原创)时间和水平问题，难免存在错误，望批评指正，以后各讲将会陆续推出)<br>
<a target="_blank" href="http://blog.21ic.com/user1/5230/archives/2008/51421.html">第一讲_Proteus简介.pdf<br>
第二讲_ARM基础知识.pdf<br>
第三讲_ADS简介.pdf<br>
第四讲_实例1_按键控制流水灯.pdf</a></font></font></p>
<p><font face="楷体_GB2312"><font face="宋体"><font color="#0000ff">说明：由于百度空间无法上传附件，PDF文档附件上传到</font><a target="_blank" href="http://blog.21ic.com/user1/5230/archives/2008/51421.html"><font color="#ff0000">21IC博客</font></a><font color="#0000ff">，需要注册21IC会员才可下载附件，由此给您带来的不便，见谅！</font></font></font></p>
<p><font face="楷体_GB2312"><font face="宋体"><img src="http://blog.21ic.com/UploadFiles/2008-10/61054715395.jpg"></font></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p> </p> <a href="http://hi.baidu.com/niejinbo/blog/item/7ac28634f6992a1790ef3988.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/niejinbo/blog/category/arm%C7%B6%C8%EB%CA%BD">arm嵌入式</a>&nbsp;<a href="http://hi.baidu.com/niejinbo/blog/item/7ac28634f6992a1790ef3988.html#comment">查看评论</a>]]></description>
        <pubDate>2008-10-06  11:11</pubDate>
        <category><![CDATA[arm嵌入式]]></category>
        <author><![CDATA[niejinbo666]]></author>
		<guid>http://hi.baidu.com/niejinbo/blog/item/7ac28634f6992a1790ef3988.html</guid>
</item>


</channel>
</rss>