CUBEIDE的外部SRAM操作的二三事,尤其是warning: ‘at‘ attribute directive ignored相关

一:参考资料的链接

1.1 所用参考与简介

说说在前面,其实我是前面两位老哥的资料整理,我自己吧源码贴在了代码段,我只是拾人牙慧的小屁孩。
链接: STM32CUBEIDE下littleVGL的移植+分配外部SRAM.
链接: STM32 .ld链接文件分析及一次bug解决过程 .

stm32cubeide里面的C语言编译器的文档,没有at这个属性,所以在keil中的at指向地址不能用,要改成section,否则报错
在这里插入图片描述

下面展示一些 内联代码片


// An highlighted block
u32 testsram[250000] __attribute__((at(0X68000000)));//测试用数组

1.2 所用开发板 正点原子探索者 F407ZGT6

在这里插入图片描述
关于地址都是Ox68000000(你们都骗不了我那我知道)

二:需要修改的源码

2.1 mian 里面的源码

下面展示一些 mian里的源码

// An highlighted block
  static  u32 testsram[250000]  __attribute__((section(".sram")))

  for(ts=0;ts<250000;ts++)testsram[ts]=ts;//预存测试数据
  fsmc_sram_test(60,170);//测试 SRAM 容量
  for(ts=0;ts<250000;ts++)LCD_ShowxNum(60,190,testsram[ts],6,16,0);

这个fsmc_sram_test是正点原子的源码,我之后会上传,源文件有能力的自己看。

2.2 flash.ld 里面的源码

下面展示一些 flash.ld 里的源码

// An highlighted block
 MEMORY
{
  CCMRAM    (xrw)    : ORIGIN = 0x10000000,   LENGTH = 64K
  RAM    (xrw)    : ORIGIN = 0x20000000,   LENGTH = 128K
  FLASH    (rx)    : ORIGIN = 0x8000000,   LENGTH = 1024K
  SRAM    (rx)    : ORIGIN = 0x68000000,   LENGTH = 1024K
}
// An highlighted block
  .sram : 
  {
    . = ALIGN(4);
      __SRAM_SYMBOLS = .;       /* create a global symbol at ccmram start */
    *(.sram)
    *(.sram*)
    
    . = ALIGN(4);
    __SRAM_SYMBOLS = .;       /* create a global symbol at ccmram end */
    
  } >SRAM AT> FLASH

三:原理说明

u32 testsram[250000] attribute((section(".sram")))
正点原子的源码用的是at,这里用section指向在flash里面声明的0x68000000

link文件中划分一个新的段,将这个变量放到这个段内就可以解决了。与scatter文件不同,由cubeide生成的工程使用的是flash.ld文件,

在这里插入图片描述

给出地址的划分区间,这里增加了一个由malloc使用的MALLOC段,放在外部SRAM上,地址0x68000000,大小为1024K

在这里插入图片描述

这一部分实际上指定了程序的各个内容该如何放置在flash上或者ram上,有几个用法:
1 . = ALIGN(4);是指4字节对齐
2 .,小数点表示当前的地址位置,例如__SRAM_SYMBOLS = .;的意思是`__SRAM_SYMBOLS 的地址就是.sram段的地址
3 结尾的>MALLOC指上面花括号内的内容都放在第二部分中定义的MALLOC空间中。如果没有AT> FLASH,那么编译bin文件时地址是连续的

  • 10
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值