EDN首页   博客首页

最新日志

发表于:2008-3-31 22:09:21
标签:无标签

0

一个女孩写的很牛的程序

result love(boy, girl)  
    {  
    if( boy.有房() and boy.有车() )  
    {  
    boy.set(nothing);  
     return girl.嫁给(boy);  
      }  
    if( girl.愿意等() )  
     {  
     while(!(boy.赚钱 > 100,000 and girl.感情 > 8 ) )  
     {  
     for( day=1; day <=365; day++)  
     {  
     if( day == 情人节 )  
     if( boy.givegirl(玫瑰) )  
     girl.感情++;  
     else  
     girl.感情--;  
    
     if( day == girl.生日)  
     if( boy.givegirl(玫瑰) )  
     girl.感情++;  
     else  
     girl.感情--;  
     boy.拼命赚钱();  
     }  
     }  
        if( boy.有房() and boy.有车() )  
        {  
     boy.set(nothing);  
     return girl.嫁给(boy);  
     }  
     年龄++;  
     girl.感情--;  
     }  
     return girl.goto( another_boy);  
     }  

点击此处查看原文 >>

系统分类: 自由话题   |    用户分类: 无分类    |    来源: 无分类

评论(0) | 阅读(396)
发表于:2007-10-13 18:12:22
标签:无标签

2

一天的成果,终于装好EDN的实验板,也来秀一下啊

点击看大图

很久没焊东西了,焊工生疏了.

点击看大图

装好后,先和电路图合个影....

点击看大图

下载程序,调试

点击看大图

点击此处查看原文 >>

系统分类: 单片机   |    用户分类:    |    来源: 原创

评论(6) | 阅读(1263)
发表于:2007-8-16 18:35:59
标签:无标签

0

如何在VMWare上安装VxWorks操作系统

       VxWorks是风河公司(Windriver)开发的实时操作系统之一,以其优秀的可靠性、实时性及内核的可裁减性,被广泛应用于通信、军事、航天、航空等关键行业领域。VxWorks可以适用于多种硬件体系结构,其中也包括大家日常都可以接触到的PC体系结构。

       VMWare 是被广泛应用虚拟PC系统软件,他可以提供基于Inetl CPU的虚拟PC系统环境,包括CPU、BIOS、硬盘和其他外围硬件设备,使您可以在一台PC机上同时运行两个操作系统。VMWare对外围硬件设备的模拟,屏蔽了不同设备型号的差异,在硬件环境发生改变时(硬件型号变化),对于运行于VMWare上的操作系统影响很小(无须安装新的驱动程序)。

         本文以下部分将介绍如何在VMWare软件提供的虚拟环境上安装VxWorks操作系统。由于可以在同一台PC机上建立完整VxWorks开发环境,所以可以有效地降低项目初期的开发成本,也可以为初学者提供一个接近于真实的模拟环境。

需要注意的是,由于VMWare本身是运行在Windows操作系统之上的,而VxWorks运行于VMWare之上,所以这个模拟环境无法保证VxWorks的实时特性。

 

准备工作
我们假设您有一台普通配置的PC机,并安装了Windows2000操作系统。其次您需要安装Tornado 2.2 for pcPentium开发环境。缺省安装的Tornado 2.2 for pcPentium可能不包括pcPentium的BSP组件,但该组件可以从风河公司(Windriver)的网站免费下载。

我们将在下文以WIND_BASE引用Tornado的安装路径。

其次是要安装VMWare软件,这里我们使用4.0的版本。如果您还没有该软件,也可以从VMWare的网站下载试用版。

最后,由于Tornado自带的PC-NET网卡驱动有问题,所以需要下载AMD的PC-NET网卡的VxWorks系统驱动,可以从AMD网站免费下载。

一张1.44M的软盘,用于制作系统引导盘。

准备并安装好以上软件后,就可以开始下一步的工作了。

 

开始安装
编译网卡驱动程序
VMWare为运行于其上的操作系统提供虚拟网卡支持,该网卡类型即为AMD的PC-NET。实际上,在Tornado开发包中已经包含了该类型网卡的驱动程序,但经过测试,对于VMWare无法正常工作,所以您需要从AMD的网站下载最新的驱动程序。

下载得到的是一个可执行的安装程序,运行该程序将得到一个压缩包和一个帮助文件,按照该帮助的要求,将压缩包直接释放到Tornado目录下。如果提示是否允许覆盖文件,则选择允许。

此后按如下步骤完成驱动程序的编译和替换:

打开一个控制台窗口,运行批处理程序:$(WIND_BASE)\host\x86-win32\bin\ torVars.bat;
重新定位到$(WIND_BASE)\target\src\drv\end目录,运行:
make CPU="PENTIUM" tool="gnu" ln97xend.o

其间会产生一些警告,但这不会影响我们的工作。

重新定位到$(WIND_BASE)\target\lib\pentium\PENTIUM\common目录,并将上一步生成的文件ln97xend.o复制到此目录下。备份此目录下的文件libdrv.a;
运行命令arpentium -d libdrv.a ln97xEnd.o,删除libdrv.a中原有的ln97xEnd模块,然后再运行命令:
arpentium -ra iOlicomEnd.o libdrv.a ln97xEnd.o

将我们刚刚创建的新模块添加进去。

到此有关网卡驱动的设置就完成了。注意不要关闭这个窗口,后面还要使用。

 

修改配置文件
在这一节中,我们要修改编译VxWorks的配置头文件Config.h中定义的一些参数,使编译出来的系统引导程序和VxWorks的映象符合我们的要求;同时还要修改sysLn97xEnd.c这个文件,以使系统的网络功能正常运行。

定位目录到$(WIND_BASE)\target\config\pcPentium并打开该目录下Config.h文件;
我们首先要修改VxWorks的启动参数。先查找到定义DEFAULT_BOOT_LINE宏的地方,修改预处理条件CPU == PENTIUM分支下的定义如下:
#define DEFAULT_BOOT_LINE \

"lnPci(0,0)your_host_name:d:\\vxWorks h="192".168.80.169 e="192".168.80.254 u="target" pw="vxworks" tn="target""

其中:

lnPci(0,0)指定了使用第0个网卡和第0个处理器,lnPci这个标识会因为使用的驱动程序不同而有所不同,但这里用lnPci就可以了;
your_host_name指定您的主机的名字,使用Windows系统的主机名就可以;
d:\\vxWorks指定了VxWorks映象下载的完整路径;
h=192.168.80.169是主机的IP地址,就是您当前正在使用的系统的IP地址;
e=192.168.80.254是目标机的IP地址,也就是未来VxWorks操作系统的IP地址,您只要任意指定一个不冲突的IP地址即可,这里我们假设您的目标机IP地址和主机IP地址在同一个网段内;
u=target指定了FTP服务器的用户名,这个FTP就是用来下载VxWorks映象的,后面还会提到;
pw=vxwroks是用户名对应的口令;
tn=target指定目标机的名字,任意指定即可;
您可以参考Tornado自带的手册以获取更多信息;

下面我们要指定使用什么样的网卡驱动程序。首先查找“Network driver options”这段文字,之后您可以看到在该注释后面定义了一系列的有关网卡驱动的宏定义。注意保证INCLUDE_END和INCLUDE_LN_97X_END这两个宏处于定义状态(define),其他的宏都处于未定义状态(undef);
缺省情况下,VxWorks系统是不接受外部输入设备(如键盘)的输入,也不向外部输出设备(如显示器)输出数据。为了便于调试,我们必须改变它的这种缺省状态。我们查找定位宏INCLUDE_PC_CONSOLE,然后保证其处于定义状态(define)即可;
到此为止,对config.h文件的修改就完成了,保存修改,然后再打开同一目录下的sysLn97xEnd.c文件;
这一步修改的目的是要使网卡正常工作。我们先定位到“memory-mapped IO base”这段文字,然后将其前面的参数由pciRsrc[endUnit].bar[1]修改为NONE,这样就可以了。最后别忘了保存。
到此为止,全部的修改工作都完成了,下一步就可以开始编译连接了。

 

编译程序
这一节我们要编译生成bootrom引导程序和VxWorks运行映象。

打开您的Tornado开发工具,在Build菜单下选择Build Boot ROM,弹出如下对话框:
 

 

在BSP列表中选择pcPentium,而在Image to build列表中分别选择bootrom和gnu。完成选择后,点击OK按钮就开始引导程序的编译了。编译产生的文件bootrom将保存在$(WIND_BASE)\target\config\pcPentium目录下。

编译生成bootrom后,还要创建一个VxWorks映象(image),也就是VxWorks操作系统本身的代码。
创建一个“bootable VxWorks image”的工程;
选择您需要的VxWorks组件。这一步是可选的,如果您只想使用缺省的配置,那根本就不需要这一步;但如果您想使用额外的组件,例如,您可能想通过telnet连接VxWorks系统,这时就需要在Workspace窗口的VxWorks选项卡中选择telnet sever对应的组件,如下图:


在这个例子中我们选择了两个重要的组件:Telnet server 和 Target shell 。前者使我们可以通过Telnet协议登录到VxWorks操作系统中;后者则可以让我们通过命令行控制VxWorks系统。

完成选择后,即可开始编译程序;
 

到此我们已经生成了VxWorks的系统引导程序和运行时的代码映象。这里还要提醒读者,在您每次修改完系统的配置信息(如:config.h)后,都要重新创建一个工程来编译VxWorks映象,以免出现代码不一致的问题。
将生成的名为“vxworks”的文件复制到D盘根目录下。这个路径是由上面我们所设置的DEFAULT_BOOT_LINE宏中的路径参数决定的,必须保持二者一致。
制作引导磁盘
现在开始制作VxWorks系统引导磁盘,用于引导装载VxWorks运行映象。

我们回到“编译网卡驱动程序”一节中所打开的控制台窗口,定位目录到$(WIND_BASE)\target\config\pcPentium,插入您已经格式化好的软盘,然后运行:

mkboot a: bootrom

该命令将在软盘上建立VxWorks系统引导分区,并将引导程序复制到软盘上。

这里再额外向您介绍一个虚拟软盘的工具:RamDiskNT,它可以在内存中建立一个虚拟的软盘,对于提高VxWorks的启动速度有很大帮助。

 

配置FTP服务器
这里的FTP服务器用于在系统成功引导后,下载VxWorks的运行时映象。我们这里使用Tornado开发环境自带的FTP服务器。

打开Tornado FTP Server,选择“Security”菜单下的“Users/Rights”子菜单,弹出如下对话框:


当User Name为“target”时,修改“Home Directory”为D盘根目录(此路径由上面的DEFAULT_BOOT_LINE参数决定),同时修改口令为“vxworks”,最后点击“Done”按钮完成修改;

为了便于调试,我们还要打开FTP Server的日志功能。选择“Logging”菜单下的“Logging Options”子菜单,弹出如下对话框,其中除了“Winsock Calls”外,让其他选项全都处于开启状态。


保持FTP Server窗口处于打开状态(这样FTP服务器就处于运行状态)。
 

创建VxWorks系统
打开您的VMWare Workstation,在File->New菜单下选择创建一个新的虚拟机(Virtual Machine),按照其向导帮助,完成虚拟机的配置。在选择操作系统类型时,选择“Other”,其余选项均使用缺省值就可以了。
完成以上配置后,点击右侧窗口中的“Start this virtual machine”,系统即开始引导运行,如下图所示:


在引导过程中,您会遇到一个7秒钟的等待,以决定是使用缺省的引导参数,还是手动输入引导参数。这里我们选择前者,所以不需要做任何工作。

成功引导后,系统会自动从FTP Server下载映象,并开始运行,得到如下画面:

 


 

到此,我们已经成功的在VMWare上安装了VxWorks操作系统。

需要注意的是,上面的画面会因为选择组件的不同而略微有所不同(例如,如果您没有选择target shell,就不会出现命令行提示符),但一般不会影响后续操作。

配置联机调试环境
装好系统后,您肯定还希望将自己编写的应用程序下载到目标机进行调试,下面我们就完成这一部分的配置工作。

打开您的Tornado开发环境,选择“Tools->Target Server->Configure”菜单,弹出如下对话框:

 

在“Description”中任意填写一个名字,这里是“net00”;在“Available Back”中选择“wdbrpc”,并在下面的IP地址框中填写目标机的IP地址,这里是“192.168.80.254”(由DEFAULT_BOOT_LINE参数决定);将“Target Server Properties”下拉框更改至“Core File and Symbols”,并在“File Path”一项中选择您的映象的完整路径,这里是“D:\vxWorks”(由DEFAULT_BOOT_LINE参数决定)。

 

完成以上两项配置,点击“Launch”按钮,就可以启动Target Server了。

再回到Tornado开发环境,在工具条上的Target Server下拉框列表中选择“192.168.80.254@your_host_name”。这时您会发现工具条中一些原先处于“禁用”状态的工具按钮,现在都已经处于“激活”状态了。

现在您就可以开始联机调试您的VxWorks应用程序了。

点击此处查看原文 >>

系统分类: 嵌入式   |    用户分类: 无分类    |    来源: 无分类

评论(0) | 阅读(1138)
发表于:2007-3-6 10:44:43
标签:arm  汇编  

3

ARM汇编的必知必会

  无论是体系结构还是指令集,大家或多或少都应该对X86汇编有些了解,而对于嵌入式领域已被广泛采用的ARM 处理器,了解的可能并不多。如果你有兴趣从事嵌入式方面的开发,那么了解一些RISC 体系结构和ARM汇编的知识还是有必要的。这里,我们找出了这两种体系结构最明显的不同之处,并对此进行介绍,让大家对于RISC体系结构的汇编有一个基本的了解。首先,我们就来看一看基于RISC的ARM的体系结构。

基于RISC 的ARM CPU
ARM是一种RISC体系结构的处理器芯片。和传统的CISC体系结构不同,RISC 有以下的几个特点:
◆ 简洁的指令集——为了保证CPU可以在高时钟频率下单周期执行指令,RISC指令集只提供很有限的操作(例如add,sub,mul等),而复杂的操作都需要由这些简单的指令来组合进行模拟。并且,每一条指令不仅执行时间固定,其指令长度也是固定的,这样,在译码阶段就可以对下一条指令进行预取。
◆ Load-Store 结构——这个应该是RISC 设计中比较有特点的一部分。在RISC 中,CPU并不会对内存中的数据进行操作,所有的计算都要求在寄存器中完成。而寄存器和内存的通信则由单独的指令来完成。而在CSIC中,CPU是可以直接对内存进行操作的,这也是一个比较特别的地方。
◆ 更多的寄存器——和CISC 相比,基于RISC的处理器有更多的通用寄存器可以使用,且每个寄存器都可以进行数据存储或者寻址。
     当然,作为RISC 领域最成功的处理器,ARM也遵从上面的特点。这里,我们不妨来看一看在user 模式下,ARM处理器的体系结构,这对于我们了解其汇编语言是有好处的。而其它模式下只是有一些寄存器分组略有不同,大家可以在ARM的手册上查到。这里要说明的是,尽管ARM处理器也支持16位指令,不过在下文中,我们都假定ARM处理器在32 位模式下工作。
 
图1:user模式下ARM处理器体系结构
      从图1中我们看到,在user 模式下,ARM CPU 有16个数据寄存器,被命名为r0~r15(这个要比x86的多一些)。r13~r15有特殊用途,其中:
◆ r13 - 指向当前栈顶,相当于x86的esp,这个东西在汇编指令中要用sp 表示
◆ r14 - 称作链接寄存器,指向函数的返回地址。用lr表示,这和x86将返回地址保存在栈中是不同的
◆ r15 - 类似于x86的eip,其值等于当前正在执行的指令的地址+8(因为在取址和执行之间多了一个译码的阶段),这个用pc表示
      另外,ARM处理器还有一个名为cspr的寄存器,用来监视和控制内部操作,这点和x86 的状态寄存器是类似的。具体的内容就用到再说了。

ARM 指令集
ARM处理器可以支持3种指令集——ARM,Thumb和Jazelle。
采用那种指令集,由cspr中的标志位来决定。大体说来:
◆ ARM——这是ARM自身的32 位指令集
◆ Thumb ——这是一个全16 位的指令集,在16 位外部数据总线宽度下,这个指令集的效率要比32 位的ARM指令高一些。
◆ Jazelle ——这是一个8位指令集,用来加速Java字节码的执行
      整个ARM指令集由数据处理指令、分支指令、Load-Store指令、程序中断指令和一些系统控制指令构成,除了Load-Store指令外,其他部分和x86指令集是比较类似的。但和x86相比,ARM指令最显著的特点它们都是32-bit 定长的。另外,由于arm是基于RISC指令集的,所以CPU只处理在寄存器中的数据并通过独立的load-store指令在内存和寄存器之间进行数据的传递。
       在使用方面,ARM指令的格式也要比Intel的复杂些。一般说来,一条ARM指令有如下的形式:
<Instruction> {S} [Rd], [Rn], [Rm]
其中:
* {S} —— 加上这个后缀的指令会更新cpsr 寄存器
* [Rd] —— 目的寄存器
* [Rn]/[Rm] —— 源寄存器
一般来说,arm 指令有3个操作数,其中Rm寄存器在执行指令前可以进入桶形移位器进行移位操作,而Rn则会直接进入ALU 单元。如果一条arm 指令只有2 个操作数,那么源寄存器按照Rm 来处理。例如,一条加法指令:
add r0, r1, #1
就会把r1+1的结果存放到r0中。
      在熟悉了基本的汇编格式后,读者就可以自行去查询基本的ARM汇编指令了,下面,我们找出ARM中比较有特色部分——Load-Store指令结构,它是CPU 和内存进行通信的一个重要媒介。

Load-Store 指令体系
       由于ARM CPU并不直接处理内存中的数据,这个指令体系就担起了在寄存器和内存之间交换数据的重要媒介。它要比x86 的内存访问机制复杂一些。该指令体系分成3 类:
◆ 单寄存器传输(这是与x86 最为相像的)
◆ 多寄存器传输
◆ 交换指令

单寄存器传输
先看第一个,很简单:把单一的数据传入(LDR) 或传出(STR)寄存器,对内存的访问可以是DWORD(32-bit), WORD(16-bit)和BYTE(8-bit)。指令的格式如下:
DWORD:
<LDR | STR> Rd, addressing1
WORD:
<LDR | STR> H Rd, addressing2 无符号版
<LDR> SH Rd, addressing2 有符号版
BYTE:
<LDR | STR> B Rd, addressing1 无符号版
<LDR> SB Rd, addressing2 有符号版
addressing1 和addressing2 的分类下面再说,现在理解成某种寻址方式就可以了。
在单寄存器传输方面,还有以下三种变址模式,他们是:
◆ preindex
这种变址方式和x86的寻址机制是很类似的,先对寄存器进行运算,然后寻址,但是在寻之后,基址寄存器的内容并不发生改变,例如:
ldr r0, [r1, #4]
的含义就是把r1+4 这个地址处的DOWRD 加载到r0,而寻址后,r1 的内容并不改变。
◆ preindex with writeback
这种变址方式有点类似于++i的含义,寻址前先对基地址寄存器进行运算,然后寻址. 其基本的语法是在寻址符[]后面加上一个"!" 来表示.例如:
ldr r0, [r1, #4]!
就可以分解成:
add r1, r1, #4
ldr r0, [r1, #0]
◆ postindex
自然这种变址方式和i++的方式就很类似了,先利用基址寄存器进行寻址,然后对基址寄存器进行运算,其基本语法是把offset 部分放到[]外面,例如:
ldr r0, [r1], #4
就可以分解成:
ldr r0, [r1, #0]
add r1, r1, #4
如果你还记得x86 的SIB 操作的话,那么你一定想ARM是否也有,答案是有也没有。在ss上面提到的addressing1 和addressing2的区别就是比例寄存器的使用,addressing1可以使用[base, scale, 桶形移位器]来实现SB 的效果,或者通过[base,offset](这里的offset 可以是立即数或者寄存器)来实现SI 的效果,而addressing2则只能用后者了。于是每一种变址方式最多可以有3 种寻址方式,这样一来,最多可以有9种用来寻址的指令形式。例如:
ldr r0, [r1, r2, LSR #0x04]!
ldr r0, [r1, -#0x04]
ldr r0, [r1], LSR #0x04
每样找了一种,大概就是这个意思。到此,单寄存器传输就结束了,掌握这些足够应付差事了。下面来看看多寄存器传输吧。

多寄存器传输
       说得很明白,意思就是通过一条指令同时把多个寄存器的内容写到内存或者从内存把数据写到寄存器中,效率高的代价是会增加系统的延迟,所以armcc 提供了一个编译器选项来控制寄存器的个数。指令的格式有些复杂:
<LDM | STM> <寻址模式> Rn{!}, <Registers>{r^}
我们先来搞明白寻址模式,多寄存器传输模式有4 种:
也就是说以A开头的都是在Rn的原地开始操作,而B开头的都是以Rn的下一个位置开始操作。如果你仍然感到困惑,我们不妨看个例子。
所有的示例指令执行前:
mem32[0x1000C] = 0x04
mem32[0x10008] = 0x03
mem32[0x10004] = 0x02
mem32[0x10000] = 0x01
r0 = 0x00010010
r1 = 0x00000000
r3 = 0x00000000
r4 = 0x00000000
1) ldmia r0!, {r1-r3} 2) ldmib r0!, {r1-r3}
执行后:                      执行后:
r0 = 0x0010001C    r0 = 0x0010001C
r1 = 0x01                   r1 = 0x02
r2 = 0x02                   r2 = 0x03
r3 = 0x03                   r3 = 0x04
至于DA 和DB 的模式,和IA / IB 是类似的,不多说了。
最后要说的是,使用ldm 和stm指令对进行寄存器组的保护是很常见和有效的功能。配对方案:
stmia / ldmdb
stmib / ldmda
stmda / ldmib
stmdb / ldmia
继续来看两个例子:
执行前:
r0 = 0x00001000
r1 = 0x00000003
r2 = 0x00000002
r3 = 0x00000001
执行的指令:
stmib r0!, {r1-r3}
mov r1, #1 ; These regs have been modified
mov r2, #2
mov r3, #3
当前寄存器状态:
r0 = 0x0000100C
r1 = 0x00000001
r2 = 0x00000002
r3 = 0x00000003
ldmia r0!, {r1-r3}
最后的结果:
r0 = 0x00001000
r1 = 0x00000003
r2 = 0x00000002
r3 = 0x00000001
另外,我们还可以利用这个指令对完成内存块的高效copy:
loop
ldmia r9!, {r0-r7}
stmia r10!, {r0-r7}
cmp r9, r11
bne loop
说到这里,读者应该对RISC的Load-Store体系结构有一个大概的了解了,能够正确配对使用指令,是很重要的。 

点击此处查看原文 >>

系统分类: ARM   |    用户分类:    |    来源: 转贴

评论(1) | 阅读(2706)
发表于:2007-2-6 0:15:06
标签:uboot  2410  arm  skyeye  

6

skyeye仿真2410

       skyeye仿真2410

很久没写东西,年终写总结,做末干完的事,放空这段没写学习感受了。再近,玩了几天skyeye。现把有关的东西写下奉献大家,希望能对大家有所帮助。

如果您想学习Liunx操作系统或者进行嵌入式系统开发,但苦于没有硬件支持的话,那么SkyEye仿真环境软件实在是一个不错的选择。(不过有钱还是买一块开发板吧,ARM7的一般也是要三百左右就ok了)你想了解更多关于skyeye可以到http://www.skyeye.org/,还可以到 http://gro.clinux.org/projects/skyeye/ 下载最新的SkyEye相关软件和文档。

我下面是关于在S3C2410+u-boot for skyeye实验方法:

1)开发环境:

在cygwin下用skyeye进行u-boot for smdk2410的仿真

2)安装

①cygwin安装

cygwin 是一个在windows平台上运行的unix模拟环境,是cygnus solutions公司开发的自由软件(该公司开发了很多好东西,著名的还有eCos,不过现已被Redhat收购)。它对于学习unix/linux操作环境,或者从unix到windows的应用程序移植,或者进行某些特殊的开发工作,尤其是使用gnu工具集在windows.

安装网络版的cygwin,可以到http://cygwin.com,点击"Install Cygwin Now!"。这样会先下载一个叫做setup.exe的GUI安装程序,用它能下载一个完整的cygwin上进行嵌入式系统开发,非常有用。(注意安装时一定全选安装) 最好到下面网址下载

http://gro.clinux.org/frs/download.php/1607/cygwin-1.5.19-for-skyeye.tar.bz

安装完成后,就可以运行cygwin了,出现窗口和Dos一样的命令行窗口。

②安装skyeye

  不介绍了,呵呵上面有了!

  首先,到http://gro.clinux.org/frs/?group_id=327&release_id=1354下载skyeye-1.2-RC8-3。把它放到那呢?载到 /usr/src吧。

  然后解压,“ls”一下,就可以看到skyeye-v1目录,就进入skyeye-v1并找到找到arch/arm/mach/skyeye_mach_ps7500.c文件,做如下修改即可:

#ifdef __CYGWIN__

//#include "mpw/sys/time.h"

#include

#endif

原因不说了..

再后执行make

重新编译即可生成binary/skyeye.exe

建立个指向执行文件的链接 ln -s /usr/src/skyeye-v1/binary/skyeye.exe /bin/skyeye.exe 这样我们就可以方便地执行skyeye程序了。

那你就执行一下skyeye,如果运行成功,如下图就祝贺你啦。

 ③交叉编译器

自已做一个交叉编译工具链也行,不过现在网上有好多工具,为什么要自己做呢,除非没事干了。有人说下载安装bu-2.15_gcc-3.4.3-c-c++-java_nl-1.12.0_gi-6.1.exe可以,但我没有成功,因为只会生成arm-elf-gcc。而arm9又用arm-linux-gcc。只好到友善http://www.arm9.net/cygwin_arm-linux-gcc_install.asp上找了一个。友善的哥们在上面有安装介绍,这就不重复了。

   

安装后可以测试下交叉编译器是否可用

$export PATH="/opt/FriendlyARM/crosstool/arm-linux/gcc-2".95.3-glibc-2.2.3/bin:$PATH

uboot移植待后上传                                                        

                                                                                                               

                                              

点击此处查看原文 >>

系统分类: ARM   |    用户分类:    |    来源: 原创

评论(4) | 阅读(3477)
发表于:2006-12-23 9:36:57
标签:无标签

2

Arm92410开发板分析

一、YFDVK-2410-II型开发板
厂商:深圳远峰计算机技术有限公司
1.        硬件特性
优点:
核心板与开发板分离。(有利于以后扩展升级)
2通道UART(已包含IRDA红外线数据通讯口)
2个USB,一个主机接口,一个USB设备接口
2.        软件特性
优点:驱动比较全(不知道是不是每一个模块都提供源代码?)
     提供YFDVK-2410-II型板硬件原理图和开发板元器件封装库(protel99格式),有的商家只提供PDF格式的。
     WINCElinux两个平台代码包
    
二、YL2410
厂商:深圳优龙
1.        优点:
硬件接口提供的比较全,CF卡、SD/MMC卡,IDECANIrDA,CAN
   提供一个VGA接口。
   核心板与开发板分离。(有利于以后扩展升级)
WINCElinux两个平台代码包。
2   缺点:VGA接口输出到显示器,闪烁,所以等于没用。
      有一些源代码好像提供不全,不知道,能不能向售后部门要到(还没尝试)
核心板和底板电路原理图
  其他在以后的使用中再补充。
三、QT2410E
厂商:上海勤研电子
主要特点:20064月起火热销售价格:S3C2410开发板含3.5"真彩LCD=1500!(实际上我今天刚问了,代理商那里要1400RMB
缺点:相比前两款少了CF支持,没有VGA输出。
      内存小一点:NAND Flash64M NOR FLASH, 256KSDROM 64M
       只有一个网口,而且是10M的。
       好像只提供一个平台(linux)的代码包。
所以对一个初学者来说,要求功能不多的话,QT2410E就可以了。
 
四、华恒HHARM2410-Integration-R1
厂商:华恒
优点:提供全套源代码,除了SD卡等几个特殊的例外。
      提供一个PS2接口(很多厂家都没有)
      嵌入式MiniGUIl图形接口
缺点:不提供WINCE BSP及源程序。
      没有CF卡。
      没有VGA输入接口。
      价格,我虽然不知道具体是多少,但是应该不低。
还有啊,且听下回分解.

点击此处查看原文 >>

系统分类: ARM   |    用户分类:    |    来源: 无分类

评论(0) | 阅读(1290)
发表于:2006-12-17 17:23:59
标签:arm  开发板  

4

如何选择合适的ARM开发板

     经过两周基础知识的研究,对嵌入式开发有了更深的认识。对于学ARM的人来说,没有开发板就=“纸上谈兵”。如何选择合适的开发板也是非常重要的问题。

      下面就如何选择开发谈几点意见:

        第一,要注意硬件资源(包括:CPU、ROM、RAM、各种接口)其中NanD Flash、Nor Flash和SDRAM的大小一定要满足自已开发的要求。

       第二,软件资源对一个初学者来说一定注意的,因为不同的开发板提供的软件资源差别很大。一般必须包括:嵌入式开发操作系统以及相应的驱动(最好有源代码)、开发工具、调试工具、学习用源代码、底板原理图、有相应的技术支持等等。

       第三,有售后服务。一般是公司比较好点,个人制作一般不用考虑。(呵呵,如果你和造板者是哥们,那就另当别论了。)

     下面把有关公司公告如下:(如果榜上无名,不是我看不起你们,也不是你们做板子不好.只能怪百度搜不到了.呵呵,不要打我板子就行了.有时间我还要对不同的板子作个人评价.)

深圳优龙科技公司http://www.ucdragon.com/

友善之臂公司http://www.arm9.com.cn/

上海勤研http://www.armzone.com/

西安傅立叶http://www.fftchina.com/

合肥市华恒科技http://www.hhcn.com/chinese/cnindex.html

广嵌中心(广州)http://www.gd-emb.org/sales_detail.html

深圳万龙http://www.myarm.net/main.asp

北京恒颐http://www.hyesco.com/

深圳英蓓特http://www.embedinfo.com/chinese/index.asp

莱顿电子www.jzx51.com

盛龙微嵌http://www.micro-embed.com/

深圳市技创科技有限公司http://www.techor.com

深圳市远峰计算机技术有限公司http://www.embedon.com/

深圳市英贝德科技有限公司http://www.embedall.com/aspdecn/index.asp

 

点击此处查看原文 >>

系统分类: ARM   |    用户分类:    |    来源: 原创

评论(4) | 阅读(4216)
发表于:2006-12-8 23:22:58
标签:无标签

2

学习笔记1

ARM微处理器支持7种运行模式,分别为:
1.用户模式(usr):ARM处理器正常的程序执行状态;
2.   快速中断模式(fiq):用于高速数据传输或通道管理;
3.   外部中断模式(irq):用于通用的中断处理;
4.    管理模式(svc):操作系统使用的保护模式;
5.    数据访问终止模式(abt):当数据或指令预取终止时进入该模式,用于虚拟存储及存储保护;
6.   系统模式(sys):运行具有特权的操作系统任务;
7.   未定义指令中止模式(und):当未定义指令执行时进入该模式,可用于支持硬件协处理器的软件仿真

ARM体系结构的存储器格式有如下两种:
 大端格式:字数据的高字节存储在低地址中,字数据的低字节存放在高地址中;
 小端格式:与大端存储格式相反,高地址存放数据的高字节,低地址存放数据的低字节

 ARM寄存器总结:
  ARM有16个32位的寄存器(r0到r15)。
 r15充当程序寄存器PC,r14(link register)存储子程序的返回地址,r13存储的是堆栈地址。
ARM有一个当前程序状态寄存器:CPSR。
一些寄存器(r13,r14)在异常发生时会产生新的instances,比如IRQ处理器模式,这时处理器使用r13_irq和r14_irq
 ARM的子程序调用是很快的,因为子程序的返回地址不需要存放在堆栈中。
1、 ARM处理器共有37个寄存器,其中包括:

i. 31个通用寄存器,包括程序计数器(PC)在内。都是32位寄存器

ii. 6个状态寄存器,都是32位寄存器,但目前只使用了其中12位

2、 ARM处理器有7种不同的处理器模式,在每一种处理器模式中有一组相应的寄存器组

。任意时刻(也就是任意的处理器模式下),可见的寄存器包括15个通用寄存器(R0~

R14)、一个或两个状态寄存器及程序计数器(PC)。在所有的寄存器中,有些是各模式

共用的同一个物理寄存器,有些是各模式自己拥有的独立的物理寄存器。

3、 通用寄存器可以分为3类:未备份寄存器(R0~R7)、备份寄存器(R8~R14)和程序

计数器PC(R15)。对于每一个未备份寄存器来说,在所有的处理器模式下指的都是同一

个物理寄存器。对应备份寄存器R8~R12来说,每个寄存器对应两个不同的物理寄存器,

这使得中断处理非常简单。例如,仅仅使用R8~R14寄存器时,FIQ处理程序可以不必执行

保存和恢复中断现场的指令,从而使中断处理过程非常迅速。对于备份寄存器R13和R14

来说,每个寄存器对应6个不同的物理寄存器,其中的一个是用户模式和系统模式共用的

,另外的5个对应于其他5种处理器模式。

4、 每一种异常模式拥有自己的物理的R13。应用程序初始化该R13,使其指向该异常模

式专用的栈地址。当进入异常模式时,可以将需要使用的寄存器保存在R13所指的栈中;

当退出异常处理程序时,将保存在R13所指的栈中的寄存器值弹出。这样就使异常处理程

序不会破坏被其中断程序的运行现场。

5、 寄存器R14又被称为连接寄存器(Link Register,LR),在ARM体系中具有下面两种

特殊的作用:

i. 每一种处理器模式自己的物理R14中存放当前子程序的返回地址。当通过BL或BLX指令

调用子程序时,R14被设置成该子程序的返回地址。在子程序中,当把R14的值复制到程

序计数器PC中时,子程序即返回。

ii. 当异常中断发生时,该异常模式特定的物理R14被设置成该异常模式将要返回的地址

,对于有些异常模式,R14的值可能与将返回的地址有一个常数的偏移量。具体的返回方

式与子程序返回方式基本相同。

6、 由于ARM采用了流水线机制,当正确读取了PC的值时,该值为当前指令地址值加8个

字节。也就是说,对于ARM指令集来说,PC指向当前指令的下两条指令的地址,由于ARM

指令是字节对齐的,PC值得第0位和第1位总为0。

7、 对于ARM版本3以及更低的版本,写入R15的地址值的bits[1:0]被忽略,对于ARM版本

4以及更高的版本,程序必须保证写入R15寄存器的地址值的bits[1:0]为0b00;否则会产

生不可预知的结果。对于Thumb指令集来说,指令是半字对齐的。处理器将忽略bit[0]。

还有一些指令对于R15的用法有一些特殊的要求。比如,指令BX利用bit[0]来确定是ARM

指令,还是Thumb指令。

8、 指令mov pc, pc将程序跳转到当前指令下面第2条指令处执行。类似的指令还有

add pc, pc, #0

9、 每一种处理器模式下都有一个专用的物理状态寄存器,称为SPSR(备份程序状态寄

存器)。当特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容。

在异常中断程序退出时,可以用SPSR中保存的值来恢复CPSR。

10、 由于用户模式和系统模式不是异常中断模式,所以它们没有SPSR。当在用户模式或

系统模式中 访问SPSR,将会产生不可预知的结果。

点击此处查看原文 >>

系统分类: ARM   |    用户分类:    |    来源: 原创

评论(2) | 阅读(1770)
发表于:2006-12-2 22:23:05
标签:arm  指令集  

2

arm指令集

arm指令集rar

点击此处查看原文 >>

系统分类: ARM   |    用户分类:    |    来源: 整理

评论(2) | 阅读(1613)
发表于:2006-12-2 14:57:59
标签:arm_linux  

2

嵌入式linux快速入门

一个典型的桌面Linux系统包括3个主要的软件层---linux内核、C库和应用程序代码。
内核是唯一可以完全控制硬件的层,内核驱动程序代表应用程序与硬件之间进行会话。内核之上是C库,负责把POSIX API转换为内核可以识别的形式,然后调用内核,从应用程序向内核传递参数。应用程序依靠驱动内核来完成特定的任务。
在设计嵌入式应用的时候,可以不按照这种层次,应用程序越过C库直接和内核会话,或者把应用和内核捆绑在一起,甚至可以把应用写为内核的一个线程,在内核中运行,虽然这样在移植上带来了困难,但考虑嵌入式系统对尺寸要求小的特点,是完全可行的。不过我们使用三层软件结构的模式来学习嵌入式linux将会是我们认识更清晰,简单可行并使应用具有弹性。

快速入门,最简单的建立嵌入式Linux应用的方法就是从我们使用的桌面Linux入手,安装一个喜爱的版本,把我们的某个应用作为初始化的一部分,框架就算完成了。当然,嵌入式linux应用远比我们的桌面版本功能简单专一,它也许就是一个用于足彩的终端机,或是一个数码音频播放器,这些系统除了使用嵌入式CPU外,仅仅再需要一个串口,网口等少量的输入输出接口就可以完成它们特定的应用了。在软件上,它可以按照三层的概念由内核装载器,定制的内核和较少的为特定任务设计的静态连接的应用程序组成。之所以使用静态连接的应用程序,是因为少量的静态连接程序所要的存储空间,比同样数量的动态连接的程序所占的空间小,这个平衡点需要我们在实际开发中去获取。也许你正在设计的是个PDA,它的应用程序较多,那么你很可能就要使用动态连接程序来减少存储空间。在你的/bin或者/sbin目录下,用厂列表看看bash,ifconfig,vi...,也许只用几十K,当你运行 ldd /bin/bash 时,你会看到它们都和好几个库文件相连。好了,这样看来,我们得把PC想像成一个嵌入式硬件平台,再重新制作一个特定功能的嵌入式linux

再进行实际操作之前,先来搞清楚几个基础知识。
内核装载器Loader,它的作用是把内核从外部存储器,移动到内存中。它只作这个事情,一旦完成了调入内核的工作,Loader就跳转到内核位置开始执行。不同架构有不同的Loader,在x86结构的PC上,通常使用的loaderLILO,GRUB,syslinux,syslinux在嵌入式 linux中也同样工作。其他非x86架构的应用中,你必须使用专门的loader,或者自己编写loader来装入内核。也有不使用loader的情况,系统加电以后,内核直接从烧录有映象的Flash上开始执行。
内核,一旦内核开始执行,它将通过驱动程序初始化所有硬件,这可以从我们的pc机监视器的输出看出来,每个驱动程序都打印一些有关它的信息。初始化完成后,计算机就准备运行嵌入式应用。也许一个,也许是多个应用程序组成了嵌入式应用,但通常首先调用的是init(通过loader 向核心传入init=/program 可以定制首先运行的程序)。桌面linux中,init会读取/etc/inittab文件,来决定执行级别和哪些脚本和命令。嵌入式应用中,可以根据实际的情况决定是否使用标准的init执行方式,也许这个init是个静态程序,它能够完成我们的嵌入应用的特定任务,那完全不用考虑inittab了。
initrd
文件系统,initrd以一种把内核从存储介质装入到内存的相同的机制来装入一个小型文件系统。这个文件系统最好是以压缩的方式存储在介质上的,解压缩到RAM盘上。通过使用initrd,包含有核心驱动和启动脚本的小文件系统,就可以直接从介质上和内核一起启动起来,内核届压缩这个文件系统,并执行这个文件系统上叫做/linuxrc的脚本文件,这个脚本通常会把启动过程中所需要的驱动程序装入。脚本退出以后,initrd文件系统也卸下了,启动过程进入真正初始化过程。对于嵌入式来讲,可以将需要的应用软件都运行在这个initrd文件系统上,只要/linxrc文件不结束,内核启动过程的其他部分就不会继续。
做个试验:
cp /boot/initrd-2.4.20.img /tmp
cd /tmp
mv initrd-2.4.2-.img initrd.img.gz
gunzip initrd.img.gz
mount -o loop initrd.img /mnt
cd /mnt
ls
cat linuxrc
可以看到里面执行了加载了两个模块的操作,你在启动linxu的时候会看见屏幕打印信息。

入门试验,制作一个简单的应用:我们使用一张软盘启动一台假象的只有一个串口,键盘输入,显示输出的x86架构的linux系统,执行的特定应用就是运行 minicom,通过串口拨号。需要软件: minicom-xx.src.tar.gz syslinux-xx.tar.gzxx代表版本号,开始之前,在主目录建立一个目录,来释放这两个软件包:
cd
mkdir -p project/minilinux
cd project/minilinux
tar zxvf minicom-xx.src.tar.gz
tar zxvf syslinux-xx.tar.gz

1、裁减linux内核(需要系统安装内核文件包)

配置内核的时候,我们需要选择这些:摸块编入内核,386处理器、物理内存off、支持ELF、标准PC软盘、支持RAM(4096)、支持 initial RAM disk (initrd)、虚你终端、虚拟终端控制台、标准串口、ext2文件系统、控制台驱动,VGA text console