硬汉嵌入式论坛

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

[STM32H7] 变量定义在不同RAM块的超简单方法,含MDK,GCC和IAR

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107031
QQ
发表于 2018-4-17 01:21:46 | 显示全部楼层 |阅读模式
前面的ALIGN_32BYTES不用管,是用来做32位字节对齐用的。需要用在在RAM域,指定调用__attribute__((section (" 参数 ")  指定 .RAM_D1   .RAM_D2    .RAM_D3即可。



/******** MDMA Destination 0 Buffer definition *******//*Buffer location and size should aligned to cache line size (32 bytes) */
#if defined ( __ICCARM__ )
#pragma location = 0x24004000
uint32_t DESTBuffer0_D1_AXISRAM[BUFFER_SIZE0];
#elif defined ( __CC_ARM )
ALIGN_32BYTES(__attribute__((section (".RAM_D1"))) uint32_t DESTBuffer0_D1_AXISRAM[BUFFER_SIZE0]);
#elif defined ( __GNUC__ )
ALIGN_32BYTES(uint32_t __attribute__((section (".RAM_D1"))) DESTBuffer0_D1_AXISRAM[BUFFER_SIZE0]);
#endif

/*****************************************************/


/******** MDMA Destination 1 Buffer definition *******/
/*Buffer location and size should aligned to cache line size (32 bytes) */
#if defined ( __ICCARM__ )
#pragma location = 0x30000000
uint32_t DESTBuffer1_D2_SRAM1[BUFFER_SIZE0];
#elif defined ( __CC_ARM )
ALIGN_32BYTES(__attribute__((section (".RAM_D2"))) uint32_t DESTBuffer1_D2_SRAM1[BUFFER_SIZE0]);
#elif defined ( __GNUC__ )
ALIGN_32BYTES(uint32_t __attribute__((section (".RAM_D2"))) DESTBuffer1_D2_SRAM1[BUFFER_SIZE0]);
#endif
/*****************************************************/


/******** MDMA Destination 2 Buffer definition *******/
/*Buffer location and size should aligned to cache line size (32 bytes) */
#if defined ( __ICCARM__ )
#pragma location = 0x38000000
uint32_t DESTBuffer2_D3_AHBSRAM[BUFFER_SIZE0];
#elif defined ( __CC_ARM )
ALIGN_32BYTES(uint32_t __attribute__((section (".RAM_D3"))) DESTBuffer2_D3_AHBSRAM[BUFFER_SIZE0]);
#elif defined ( __GNUC__ )
ALIGN_32BYTES(uint32_t __attribute__((section (".RAM_D3"))) DESTBuffer2_D3_AHBSRAM[BUFFER_SIZE0]);
#endif
/*****************************************************/





回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107031
QQ
 楼主| 发表于 2018-4-17 01:35:50 | 显示全部楼层
仔细一看,发现不省事了,需要开个脚本文件,这种方式的好处是不需要用户专门指定位置去操作了。可以前面加上个前缀后直接使用。


  1. ; *************************************************************
  2. ; *** Scatter-Loading Description File generated by uVision ***
  3. ; *************************************************************

  4. LR_IROM1 0x08000000 0x00200000  {    ; load region size_region
  5.   ER_IROM1 0x08000000 0x00200000  {  ; load address = execution address
  6.    *.o (RESET, +First)
  7.    *(InRoot$Sections)
  8.    .ANY (+RO)
  9.   }
  10.        RW_IRAM1 0x24000000 0x00080000  {  ; RW data
  11.    .ANY (+RW +ZI)
  12.   }
  13.        RW_IRAM2 0x24004000 0x00080000  {  ; RW data
  14.    *(.RAM_D1)

  15.         }
  16.        RW_IRAM3 0x30000000 0x00048000  {  ; RW data
  17.    *(.RAM_D2)

  18.         }
  19.        RW_IRAM4 0x38000000 0x00010000  {  ; RW data
  20.    *(.RAM_D3)

  21.         }
  22. }

复制代码
回复

使用道具 举报

4

主题

531

回帖

543

积分

金牌会员

积分
543
发表于 2018-4-17 08:59:07 | 显示全部楼层
谢谢硬汉大哥,也可以参考下1050官方的SDK!可以设置任何类型,任何对齐字节!
回复

使用道具 举报

4

主题

531

回帖

543

积分

金牌会员

积分
543
发表于 2018-4-17 08:59:14 | 显示全部楼层
谢谢硬汉大哥,也可以参考下1050官方的SDK!可以设置任何类型,任何对齐字节!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107031
QQ
 楼主| 发表于 2018-4-17 10:00:01 | 显示全部楼层
qiousanxi 发表于 2018-4-17 08:59
谢谢硬汉大哥,也可以参考下1050官方的SDK!可以设置任何类型,任何对齐字节!

你说的“可以设置任何类型,任何对齐字节!”本来就是随便设置的。

这个不是重点,重点是不需要调用__at指定具体位置了。仅仅是多了个section前缀。
回复

使用道具 举报

4

主题

531

回帖

543

积分

金牌会员

积分
543
发表于 2018-4-17 10:48:49 | 显示全部楼层
eric2013 发表于 2018-4-17 10:00
你说的“可以设置任何类型,任何对齐字节!”本来就是随便设置的。

这个不是重点,重点是不需要调用__ ...

是的!
回复

使用道具 举报

0

主题

3

回帖

22

积分

新手上路

积分
22
发表于 2018-9-8 22:18:08 | 显示全部楼层
硬汉老师,请问这段代码是在哪里看到的?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107031
QQ
 楼主| 发表于 2018-9-9 02:27:56 | 显示全部楼层
tengdecheng 发表于 2018-9-8 22:18
硬汉老师,请问这段代码是在哪里看到的?

http://www.armbbs.cn/forum.php?m ... &extra=page%3D1
回复

使用道具 举报

0

主题

3

回帖

22

积分

新手上路

积分
22
发表于 2018-9-9 14:11:46 | 显示全部楼层
eric2013 发表于 2018-9-9 02:27
http://www.armbbs.cn/forum.php?mod=viewthread&tid=89275&extra=page%3D1

硬汉老师,我想看看ARM GCC工具链下的ld文件是对这些自定义输出节如何分配的。。硬汉老师有原始的包含GCC版本的吗?
回复

使用道具 举报

0

主题

3

回帖

22

积分

新手上路

积分
22
发表于 2018-9-9 14:17:55 | 显示全部楼层
本帖最后由 tengdecheng 于 2018-9-9 14:31 编辑
tengdecheng 发表于 2018-9-9 14:11
硬汉老师,我想看看ARM GCC工具链下的ld文件是对这些自定义输出节如何分配的。。硬汉老师有原始的包含GCC ...

拜托了。。
回复

使用道具 举报

7

主题

102

回帖

123

积分

初级会员

积分
123
发表于 2018-9-9 20:26:26 | 显示全部楼层
印象中好像RTX5的代码里面统一用section的,所以新版本的IAR也支持section了。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-14 22:33 , Processed in 0.266865 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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