本文摘要:一、为什么IAR4.42和IAR5.20不兼容,在IAR4.42下的工程,不能用IAR5.20打开? “4.42和5.xx的最大区别在于目标文件格式不同。4.42里面,compiler和linker的输出文件都是UBROF格式,这是IAR的私有文件格式。5.xx里面,compiler和linker的输出文件都是标准的elf/dwarf格式,而且遵循ARM提出的ABI标准(application binary interface),这意味着使用GCC或Realview生成的代码库(也是elf格式)可以直接被IAR所链接使用,反之亦然,从而带来更大的便利。对使用者来说,主要可见的区别是因为linker的变化所导致的linker configuration file格式的变化,4.42里是xcl文件,5.xx里是icf文件。这两种文件都是用于告诉linker,代码和数据在存储器中如何分布,但格式有所不同。具体可参考5.11自带的文档:EWARM_MigrationGuide.pdf。” ...
本文摘要:IAR 中的位操作,在有些情况下,有点出人意料。 比如,我想清除某个变量的某一位, 例: _DEVICE_RCC.CR &= ~(BIT(1)); // 清除CR的第(1+1)位,相当於 _DEVICE_RCC.CR &= 0xFFFF FFFD (以下内容的编译为IAR5.20) \ 00000000 0748 LDR.N R0,??main_0 ;; 0×40021000 \ 00000002 0168 LDR R1,[R0, #+0] \ 00000004 0222 MOVS R2,#+2 ;//主要是这一条和下一条语句, MOV(S),赋值 \ 00000006 9143 [...] ...