在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!) 创芯人才网--重磅上线啦!
查看: 9484|回复: 1

关于uC/OS-II移植问题的讨论

[复制链接]
发表于 2008-8-20 14:27:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
我现在有一个已经移植好的基于ARM7和ARM9平台的uC/OS-II的程序,基于ARM7的uC/OS-II的BootLoader(引导程序)是和操作系统,应用程序一起编译的,作为一个整体调试和烧写的。这个引导程序不是作为一个单独的部分先写到ROM里的,这跟别的操作系统如LINUX不太一样,引导程序的目标是为加载操作系统内核作准备的,它完成硬件的初始化如AIC、EBI,完成内存的映射。那么基于ARM7的uC/OS-II的引导程序是自己来写还是由厂家提供,是作为独立的一块单独写到ROM还是跟操作系统一起作为一个完整的程序来烧写?我的想法是都可以,但还是想知道各位是怎么做?还有基于ARM9的uC/OS-II的引导程序(我手头上的这个)也是包含了一部分引导程序,但没看有硬个的初始化,我想另外一部分可能是单独的作为BOOT来写到ROM里去的,这又是怎么回事?ARM9调试烧写都要由串口来引导,那么基于ARM9的uC/OS-II的引导程序是否一定是由单独的呢?请各位高手计论和帮助解答。
 楼主| 发表于 2008-8-20 14:54:22 | 显示全部楼层
下面是基于ARM7的uC/OS-II启动代码中的一部分:
//定义RAM-ROM的起始及映射地址
          IF  EF: FLASH                                                    ; if we startup from flash
START_RAM_BASE            EQU  (0x00300000)
START_FLASH_BASE         EQU  (0x00000000)
REMAP_FLASH_BASE         EQU  (0x01000000)
          ELSE                                                                      ; if we startup from ram by ICE
START_RAM_BASE             EQU  (0x00000000)
          ENDIF
REMAP_RAM_BASE            EQU  (0x00000000)
RAM_SIZE                           EQU  (0x00040000)             ;  Unit: bytes, 256K
FLASH_SIZE                        EQU  (0x00200000)             ;  Unit: bytes, 2M

VectorTable
LDR  PC, [PC, #&18]      ; SoftReset
LDR  PC, [PC, #&18]      ; UndefHandler
LDR  PC, [PC, #&18]      ; SWIHandler
LDR  PC, [PC, #&18]      ; PrefetchAbortHandler
LDR  PC, [PC, #&18]      ; DataAbortHandler
nop           ; Reserved
LDR  PC, [PC,#-0xF20]     ; IRQ : read the AIC
LDR  PC, [PC,#-0xF20]     ; FIQ : read the AIC
;- There are only 5 offsets as the vectoring is used.
DCD  SoftReset
DCD  UndefHandler
DCD  SWIHandler
DCD  PrefetchAbortHandler
DCD  DataAbortHandler


向量拷贝:

LDR  R1, =START_RAM_BASE           ; parameter 2 for the function- START_RAM_BASE (0x00000000)

ADD     R0, PC, #-(8+.-VectorTable)    ; @ where to read values (relative,why???)
BL  AT91F_CopyVector2Ram

在向量拷贝前,有一段代码是将位于ROM中0X00000000处开始的代码拷贝到RAM中地址为0X00300000处,
在烧写程序到ROM中时是写到映射后的地址0X01000000,那么程序运行时,怎样将程序从此处调到RAM里去老运行呢?
前面相量表中的相对地址又是怎样确定的?

ADD     R0, PC, #-(8+.-VectorTable)  里PC, #-(8+.-VectorTable) 又怎样理解?


您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-9-29 06:23 , Processed in 0.022087 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表