UCOS移植到leon2上

     移植的代码早就写好了,但是测试发了更多的时间,现在测试还在进行中。

      先前移植ucos是基于sparc v8的register window 模型,后来写完代码,发现问题重重,于是在老师的建议下还是重新返工了,重写了基于mflat模型的代码,重写的时间也就是一天的时间,后来就是一直在测试。

      一直是没有找到很好的测试方法,所以只能用直接写几个任务,然后向串口打印东西。要是谁有好的方法,告诉我一声呵。下面还是说说把ucos移植到sparc v8上需要注意的问题吧。

      最先碰到的是中断返回的问题,sparc 跟其它的处理器在这点上很不同。当发生中断的时候,sparc是还未执行当前指令,而其它处理器一般是已执行完当前指令了。所以当我们中断返回时,要用这么一条语句

jmpl %l1,%g0

rett    %l2

nop

这样,就会跳回了原来程序了。

    在ucos移植过程中,要把data cache以及MMU关掉,因为有data cache 可能会导致cache的数据和外部的IO数据不一致,而ucos操作系统是不支持MMU的。

    在修改os_cpu_a.s这个文件中,不管是OSCtxSw还是OSIntCtxSw,返回时最好用rett指令,因为这才不会改变原窗口的寄存器。

    当然了,在移植的过程中要特别注意sparc结构的堆栈。

__________ ___________ %sp ( foo() )    
%sp    | %l0-%l7  | 8*4    
保存foo()%l0-%l7寄存器

       |__________|
%sp+32 | %i0-%i7  | 8*4    
保存foo()%i0-%i7寄存器 (%i7包含foo()的返回地址)
       |__________|
%sp+64 |
返回值地址| 1*4    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值