IAR 和 keil 使用外部 SDRAM 的区别

当芯片内部的 SRAM 不够用时,就需要在外部扩展 SDRAM,然后在写程序时将一些比较大的 buffer 定义在外部内存中。在进行正确的配置之后,对外部 SDRAM 的使用,和芯片内部的 SRAM 是一样的,可以直接对 SDRAM 的地址进行读写访问。

因此,最简单的方法就是,如下所示的代码,直接使用指针指到外部 SDRAM 的地址,之后对指针进行移动,便可以对全部 SDRAM 进行读写。使用这种方法需要特别小心,要确保指针指向的地址在 SDRAM 的地址空间。

uint8_t *sdram_buf = (uint8_t*)SDRAM_ADDR;
uint8_t *sdram_ptr = sdram_buf;
uint32_t sdram_useSize = 0;
uint8_t sdram_full = 0;

另外的一种方法就是,将 buffer 数组定义在外部 SDRAM 中,这样可将指针操作改为对数组的操作。也就是在定义数组时,不是由编译器自动分配地址,而是手动指定数组的地址。不同的 IDE 语法不一样,在 IAR 下,需要使用如下的语句,

IAR 在外部SDRAM定义数组的方法
#pragma location = SDRAM_ADDR
uint8_t sdram_buffer[0x700000];

编译后生成的 map 文件可以看出,有 7MB 的空间是使用绝对地址定义的。
这里写图片描述

keil 下使用如下语句:

keil 在外部SDRAM定义数组的方法
uint8_t sdram_buffer[0x700000] __attribute__( (at(SDRAM_ADDR)) ); 
  • 1
    点赞
  • 3
    收藏
  • 打赏
    打赏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

cyang812

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值