硬汉嵌入式论坛

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

[开发工具] 定义方式__attribute__((section (".RAM_D1")))可以正常用到MDK的AC5和AC6下

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106997
QQ
发表于 2020-5-8 11:26:11 | 显示全部楼层 |阅读模式

之前以为只能定义到AC5下,测试了下AC6下也是正常的。

  1. /* 定义在512KB AXI SRAM里面的变量 */
  2. __attribute__((section (".RAM_D1"))) uint32_t AXISRAMBuf[10] = {1,2,3,4,5,6,7,8,9,0};
  3. __attribute__((section (".RAM_D1"))) uint16_t AXISRAMCount;

  4. /* 定义在128KB SRAM1(0x30000000) + 128KB SRAM2(0x30020000) + 32KB SRAM3(0x30040000)里面的变量 */
  5. __attribute__((section (".RAM_D2"))) uint32_t D2SRAMBuf[10] = {1,2,3,4,5,6,7,8,9,0};
  6. __attribute__((section (".RAM_D2"))) uint16_t D2SRAMount;

  7. /* 定义在64KB SRAM4(0x38000000)里面的变量 */
  8. __attribute__((section (".RAM_D3"))) uint32_t D3SRAMBuf[10] = {1,2,3,4,5,6,7,8,9,0};
  9. __attribute__((section (".RAM_D3"))) uint16_t D3SRAMCount;
复制代码


详情看V7教程的这个章节即可:

http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980

88.png


这里特别注意一点,如果是固定地址用到AC6下载,需要用这个帖子的方案:

AC6使用 __attribute__((at(x)))需要改用__attribute__((section("name")))实现
http://www.armbbs.cn/forum.php?mod=viewthread&tid=93202



回复

使用道具 举报

610

主题

3062

回帖

4912

积分

至尊会员

积分
4912
发表于 2020-5-8 14:36:11 | 显示全部楼层
编译器的套路深啦
回复

使用道具 举报

7

主题

85

回帖

111

积分

初级会员

积分
111
发表于 2020-5-11 10:41:06 | 显示全部楼层
我AC6这个定义方式直接AC5转上来,应该就是默认兼容
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106997
QQ
 楼主| 发表于 2020-5-11 11:04:34 | 显示全部楼层
JIKIMO 发表于 2020-5-11 10:41
我AC6这个定义方式直接AC5转上来,应该就是默认兼容

是的,我之前一直以为不支持。
回复

使用道具 举报

73

主题

1200

回帖

1419

积分

至尊会员

积分
1419
发表于 2020-9-3 09:21:17 | 显示全部楼层
硬汉哥,这个分散加载的教程的可以类似于v5 v6的板子吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106997
QQ
 楼主| 发表于 2020-9-3 09:40:53 | 显示全部楼层
wdliming 发表于 2020-9-3 09:21
硬汉哥,这个分散加载的教程的可以类似于v5 v6的板子吗?

有对应的V6例子:

像使用内部SRAM一样定义使用SDRAM和CCM RAM,可以随意定义到指定的RAM区域且无需具体地址
http://www.armbbs.cn/forum.php?m ... 9275&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

73

主题

1200

回帖

1419

积分

至尊会员

积分
1419
发表于 2020-9-3 10:13:17 | 显示全部楼层
eric2013 发表于 2020-9-3 09:40
有对应的V6例子:

像使用内部SRAM一样定义使用SDRAM和CCM RAM,可以随意定义到指定的RAM区域且无需具 ...

谢谢
回复

使用道具 举报

1

主题

5

回帖

8

积分

新手上路

积分
8
发表于 2020-12-8 17:54:24 | 显示全部楼层
硬汉哥,最近在看你的关于h7的用户手册,有点问题不太理解,能否解答下:
1. V7-005_TCM,SRAM 等五块内存的超方便使用方式这种定义section的方式,在程序烧录后,断电重启,再次运行时,对应的变量会自动放到内存中指定的地方吗
2. 然后有个引申出来的问题,最近学习做一个类似于OTA升级的东西,内部flash放bootloader,qspi flash放应用,看了你的例子是通过内存映射的方式启动app,但是app起来后只能读不能写flash了,目前想让app运行时可以接收升级文件,然后写入qspi flash中,也就是会有读写flash的操作。
不太确定有没有比较好的方式,看官方例子有说把bin文件放在qspi flash上,然后把程序整个拷贝到external sdram运行的,这种不走内存映射了。不过目前项目没有external sdram,只能使用内部ram,考虑到文件大小,估计只能使用axi sram?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106997
QQ
 楼主| 发表于 2020-12-8 18:56:12 | 显示全部楼层
gaoshanliukou 发表于 2020-12-8 17:54
硬汉哥,最近在看你的关于h7的用户手册,有点问题不太理解,能否解答下:
1. V7-005_TCM,SRAM 等五块内存 ...

1、对,这个不需要用户管。
2、做个可以加载到内部SRAM运行的boot。要升级QSPI Flash时,直接跳到内部SRAM运行的bootloader上,然后更新APP,更新完毕了退回来即可。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-14 05:57 , Processed in 0.184887 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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