zhxingyu 发表于 2019-6-6 15:58

IAR上__attribute__的用法

1. const uint8 Channel__attribute__ ((aligned(16))) ={
                1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
} ;
2. uint16 ADCBuffer __attribute__ ((section(".adc_data0")));
请问这两句移植到IAR ARM版本上需要怎么修改?__attribute__这个怎么去掉?谢谢!

千岁寒 发表于 2019-6-10 14:07

去掉应该会影响使用。
IAR 的 ARM的 attribute 可以参考 ARMCC User Guide。

R2D2 发表于 2019-6-10 22:37

GCC:__attribute__ ((aligned(16)))
IAR:#pragma pack(16)

GCC:__attribute__ ((section(".adc_data0")))
IAR:#pragma section="adc_data0"
这个更改仅仅改c文件是远远不够的,链接脚本也要改,注意adc_data0在ld文件(GCC)中的写法,移植到icf文件(IAR)里面去。

linqing171 发表于 2019-6-11 08:04

ADCBuffer 这种的,用个volatile uint16 * ADCBuffer = (volatile uint16 *) 地址;   其中地址用链接期里面的 .adc_data0 段的地址,来代替,这样什么编译器都能用。
或者#define一下也可以。

那16个const里面存16个数更是无稽之谈,查个表和加个1的速度应该没有什么意义,还整16地址对齐,

千岁寒 发表于 2019-6-12 09:38

千岁寒 发表于 2019-6-10 14:07
去掉应该会影响使用。
IAR 的 ARM的 attribute 可以参考 ARMCC User Guide。

有道理有道理

zhxingyu 发表于 2019-6-18 20:51

R2D2 发表于 2019-6-10 22:37
GCC:__attribute__ ((aligned(16)))
IAR:#pragma pack(16)



谢谢回复!
页: [1]
查看完整版本: IAR上__attribute__的用法