汇编文件从 keil 移植到 IAR

一、前言

汇编文件移植性比较差,不同的内核架构支持的指令集都不一样,就算是相同的内核,在不同的 IDE 下的写法也有可能不一样。同样的文件在 KEIL 下可以正常运行,在 IAR 下就无法编译通过,这就是因为 KEIL 和 IAR 对汇编文件的写法要求是不一样的。KEIL 以及 ADS 下的一些伪指令和写法,在 IAR 下是不支持或者不一样的。具体可以参考 《EWARM_ADSMigrationGuide.ENU.pdf》,下文只是我自己在移植过程中的一些修改记录。

二、修改方法

  • 1、修改段和区域的写法

    系统段和区域在 ADS 下定义为 AREA,在 IAR 下定义为 RSEG,因此需要做如下更改。

    keil 下的写法

    AREA |.text|, CODE, READONLY, ALIGN=2
    

    IAR 下的写法

    RSEG CODE:CODE:NOROOT(2)
    
  • 2、修改 RN 伪指令

    在 ADS 中,可以使用语句 name RN Rn 来给 寄存器 Rn 重命名为 name,在 IAR 下不支持这种写法,因此需要将汇编文件中所有用到的 name 替换回 Rn。类似下面的修改:

    keil 下的写法

    PCM RN r0  ;rename
    
    ldr PCM, [sp, #4] ; load pcm pointer
    

    IAR 下的写法

    ldr r0, [sp, #4] ; load pcm pointer
    
  • 3、修改宏的写法

    ADS 下的宏结束标志和 IAR 下是不同的,另外写法也不一样。具体如下:

    keil 下的写法

    MACRO
    	MC0S $x
    ldr r12, [r2], #4
    ldr r14, [r2], #4
    ldr r0, [r1, #(4*($x))]
    ldr r3, [r1, #(4*(23 - $x))]
    
    ...
    
    MEND ; MCOS
    

    IAR 下的写法

    MC0S MACRO x
    
        ldr r12, [r2], #4
        ldr r14, [r2], #4
        ldr r0, [r1, #(4*(x))]
        ldr r3, [r1, #(4*(23 - x))]
        
    ...
    
    	ENDM ; MCOS
    
  • 4、删除 PROC、ENP、GBLA 等伪指令。这些指令在 IAR 下不支持,编译无法通过。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值