UCOS_S3C2410.docx
上传人:sy****28 上传时间:2024-09-14 格式:DOCX 页数:55 大小:308KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

UCOS_S3C2410.docx

UCOS_S3C2410.docx

预览

免费试读已结束,剩余 45 页请下载文档后查看

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

S3c2410移植UCOS先说明一下在加电之前的这个软硬件情况,这个三星公司根据ARM920T软核生产的这个s3c2410集成了64M的sdram和64M的nandflash存储器。Vivi和UCOS都存储在这个nandflash中,因为nandflash断电后不会丢失信息。这个VIVI是三星公公司为ARM系列芯片书写的bootloader,用于开发阶段,做系统的引导程序。VIVI存放在flash0x00000000地址开始的地方,UCOS存放在flash0x03f30000地址开始的地方。ARM920T开机从flash启动,启动时把flash前4K(即vivi的前4K)COPY到SDRAM(这种启动方式是利用Nandflash启动,COPY前4K到sdram中是硬件自动实现的),vivi的前4K代码中有用于COPY剩余VIVI的代码。执行完这些代码之后,VIVI就控制了FLASH的读取,串口的控制以及用户shell接口,当然它还有其他一些功能。当用户执行bootucos命令时,VIVI会把ucos相关代码从flash0x03f30000COPY到SDRAM0x30008000的地方。当然也可以设置VIVI自动引导ucos执行。当代码copy完毕后,vivi会把PC值改成0x30008000去执行。我们先说一下为什么我们非要说具体的那个地址那,咱们前面说了,编译好的程序有一个load地址,一个真正运行的地址,0x30008000这个地址就是咱们说的程序的装载地址,这个地址是我们用编译器指定的地址,也就是通过在ads工程里后缀名是scf的文件配置的。在这个文件里我们配置了程序的装载地址和程序运行的地址,我们为什么要指定这两个地址那?我们整个工程的程序是最后链接时一次性固定的绝对地址,也就是说最终链接出来的程序地址和真正运行的地址是一致的。只不过我们一般不会把这些代码直接放到相应的部位去罢了,其中一个原因就是,我们为了在不加电时保存程序会把程序放到非易失的存储设备里去,而我们运行时会把程序copy到运行速度比较快的sdram中去。也就是说,本来这些静态链接的程序的执行地址都是固定的了,我们要在这些程序运行之前要把这些程序放对位置。我们必须知道我们的程序装载到什么地址和真正在什么地址运行。这样我们才能知道那些装载地址和运行地址不一样的程序段应该怎么搬运。至于搬运的工作,你可以自己手工实现,也可以用ADS提供的库函数实现。跳转到这个0x30008000去执行这个地址处的指令,我们这个工程编译出来后谁是第一条指令那?我们平时写的程序都是从main()函数开始执行,但我们这个嵌入式的开发可不是哦,在分析完启动代码后你就知道了,在执行的所谓的main()函数之前要做很多工作的。arm映像文件的入口点有两种类型:一种是映像文件运行时的入口点,称为初始入口点(initialentrypoint),另一种是普通入口点(entrypoint).初始入口点是映像文件运行时的入口点,每个映像文件只有一个唯一的初始入口点,它保存在ELF头文件中。假如映像文件是被操作系统加载的,操作系统是通过跳转到该初始入口点处来加载该映像文件。普通的入口点是在汇编中用ENTRY伪操作定义。他通常用于标志该段代码是通过异常中断处理程序进入的。这样连接器删除无用的段时不会将该段代码删除。一个映像文件中可以定义多个普通入口点。应该注重的是,初始入口点可以使普通入口点,但也可以不是普通入口点.初始入口点必须满足下面两个条件:1.初始入口点必须位于映像文件的运行时域内。1.1饱含初始入口点的运行时域不能被覆盖,他的加载地址和运行地址必须是相同的。可以使用连接选项-entryaddress来指定映像文件的初始入口点。这时,address指定了映像文件的初始入口点的地址值。对于地址0x0处为rom的嵌入式应用系统,可以使用-entry0x0来指定映像文件的初始入口点。这样当系统复位后,自动跳转到该入口开始执行。假如映像文件是被一个加载器加载的,该映像文件该映像文件必须包含一个初始化入口点。这种映像文件通常还包含了其他普通入口点,这些普通入口点一般为异常中断处理程序的入口地址。当用户没有指定-entryaddress时,连接器根据下面的规则决定映像文件的初始入口点。假如输入的目标文件中只有一个普通入口点,该普通入口点被连接器当成映像文件的初始入口点。假如输入的目标文件中没有一个普通入口点,或者其中的普通入口点多于一个,则连接器生成的映像文。我们编译好的可执行文件时去除了头格式的映像文件,我们讲的本来就是操作系统,所以这个程序不是通过初始入口点执行的第一条指令,应该是通过普通入口点来执行的,通常是中断向量表。也就是程序中用伪指令entry指定的指令段的第一条指令。我们用AD