嵌入式 vxworks

2006年下半年,我玫邻自己设计的BCNG2440开发板下移植了VXWORKS。移植的过程参考了网络下一些BSP代码,与现有的代码不同的是,我们 的BSP实现了内存的沉映射,中断向量的沉新分配;以及cache和MMU的开启。移植的目标是用于一个数据采集系统,ARM从FPGA读取解调数据,通 过100M网络发送到服务器。经过测试,运用UDP发送速率达到了43Mbps,运用TCP发送速率为20Mbps。之前,我玫邻类似的项目中运用了 MPC8260为CPU,当时TCP最高速率也只达到了20多Mbps,因此,我们以为在某些项目中运用ARM替代MPC8260是可行的。 

  移植的过程分为一下几个部分: 

  1)异常处理 

  2) 中断 

    3)MMU 

    4)DM9000网卡驱动 

    5)启动参数保存问题 

    6)CPU设置 

    7)其他问题 

     往常来讲,在嵌入式系统启动之初,CPU将从0地址处(或ffff0000处)开始执行代码,因此初始时将ROM映射在0(或ffff0000)地址处,当进行完必要的初始化并启动异常处理机制后,会将RAM映射到0(或ffff0000)地址处,而将ROM映射到其它地址。 

  这是因为发生异常时,CPU会跳转到0地址开始处执行异常向量表。由于RAM的访问速度远远高于ROM,因此将RAM映射到0地址后,可以减少异常处理的延迟时间借有其他好处,动态和灵活等。 

  地址沉映射可通过不同的方式实现,例如MPC8260可通过沉新为每个memory bank分配地址空间来实现,洞口AT91RM9200,可通过设置其独有的“REMAP”控制位来实现。 

  ARM的体系结构规定在异常发生时,要从0地址开始处读取相应的处理指令,然而S3C2440A的固定地址空间办理方法在VxWorks里会遇到问题。因为从硬件上讲,S3C2440A的地址空间是不能沉分配的,它也不支持所谓的REMAP功能,一旦硬件连线决定了其RAM基地址为0x(nGCS6),0地址上为ROM(nGCS0),就无法再更改。因此必需采用其他办法来解决异常向量表的访问问题。VxWorks办理的RAM中异常向量表结构如下图: 

  洞口BOOTROM来说,不会使用到MMU,访问地址0就是访问ROM,因此需要将异常向量表建立在启动ROM的开始处。 

  基本念想是在Flash存储器的起始地址硬编码异常入口,仿vxWorks建立异常向量表。异常发生时,经Flash存储器入口,跳转到自定义函数,再跳转到RAM中异常入口,再调用vxWorks提供的异常处理函数。中断处理流程和中断向量表如下图示意。新异常向量表和原VxWorks设计完全一样。 

  romInit.c(下面是处理IRQ异常的例子,其它见流代码): 

  _romInit: 

  B cold 

  B _romUndef 

  B _romSwi 

  B _romPrefetch 

  B _romDataAbort 

  B _romReserved 

  B _romIRQ 

  B _romFIQ 

  _ARM_FUNCTION(romIRQ) 

  _romIRQ: 

  sub sp, sp, #4 

  stmfd sp!, {r0} 

  ldr r0, L$_promIRQ 

  ldr r0, [r0] 

  str r0, [sp, #4] 

  ldmfd sp!, {r0, pc} 

  L$_promIRQ: 

  .long S3C_EXC_BASE + 20 

  #define S3C_EXC_BASE 0x 

  config.c中定义: 

  #define S3C_EXC_BASE 0x 

  sysLib.c: 

  添加以下函数声明 

  void s3cExcVecSet(void); 

  IMPORT VOIDFUNCPTR excEnterUndef; 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值