硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3677|回复: 9
收起左侧

[STM32H7] GCC有没有办法使用__attribute__((at( ))),貌似必须得设置分区 __attribute__((section(""))),不够人性化

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107527
QQ
发表于 2020-5-29 11:51:15 | 显示全部楼层 |阅读模式


#if defined ( __CC_ARM   )   MDK
  U32 HeapMem[1024 * 1024] __attribute__((at(0xD0100000)));

#elif defined ( __ICCARM__ )   IAR
  #pragma location=0xD0100000
  static __no_init U32 HeapMem[1024 * 1024];

#elif defined   (  __GNUC__  )  GCC
  U32 HeapMem[1024 * 1024] __attribute__((section(".HeapMemSection")));
#endif

回复

使用道具 举报

17

主题

101

回帖

152

积分

初级会员

积分
152
发表于 2020-5-29 16:22:18 | 显示全部楼层
__attribute__((section(".ARM.__at_0XC01F4000"))) ,貌似只能这样
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107527
QQ
 楼主| 发表于 2020-5-29 16:51:48 | 显示全部楼层
初晴sama 发表于 2020-5-29 16:22
__attribute__((section(".ARM.__at_0XC01F4000"))) ,貌似只能这样

谢谢,这就试试。

这个在Clang里面是没问题的,试试GCC的。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107527
QQ
 楼主| 发表于 2020-5-29 16:53:44 | 显示全部楼层
回复

使用道具 举报

27

主题

95

回帖

181

积分

初级会员

积分
181
发表于 2020-5-30 08:30:30 | 显示全部楼层
__attribute__((section(".HeapMemSection")));   这种方式不是更好么?用at那种方式 ,多定义几个就容易混乱,压根记不住地址用到哪里了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107527
QQ
 楼主| 发表于 2020-5-30 08:58:21 | 显示全部楼层
chinacool 发表于 2020-5-30 08:30
__attribute__((section(".HeapMemSection")));   这种方式不是更好么?用at那种方式 ,多定义几个就容易混 ...

主要是方便移植,改那个ld文件容易忘。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107527
QQ
 楼主| 发表于 2020-5-30 08:58:45 | 显示全部楼层
初晴sama 发表于 2020-5-29 16:22
__attribute__((section(".ARM.__at_0XC01F4000"))) ,貌似只能这样

测试了,GCC不行,识别不了。
回复

使用道具 举报

1

主题

12

回帖

15

积分

新手上路

积分
15
发表于 2020-5-31 19:15:54 | 显示全部楼层
请教一下楼主,AC6的编译器是用“__GNUC__”区分的吗?

我参考V7的用户手册将h750的sram4定义为了".RAM_D3",然后串口dma接收缓存之前加__attribute__属性,ac5里测试接收正常。换成ac6后无论把__attribute__放dma缓存前还是后都收不到数据了

回复

使用道具 举报

1

主题

12

回帖

15

积分

新手上路

积分
15
发表于 2020-5-31 22:27:36 | 显示全部楼层
心然 发表于 2020-5-31 19:15
请教一下楼主,AC6的编译器是用“__GNUC__”区分的吗?

我参考V7的用户手册将h750的sram4定义为了".RAM_ ...

取地址看了下放到sram4中了。
问题原因找到了,有个全局变量flag需要用volatile声明
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107527
QQ
 楼主| 发表于 2020-6-25 08:26:56 | 显示全部楼层
改了,决定不用这种方式,不方便三大平台移植。

直接使用指针方式。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-6-5 06:25 , Processed in 0.307975 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表