王建 发表于 2014-6-24 16:21:37

【原创】【STM32F429开发日志】通过修改.sct文件自动分配SDRAM变量

 
第一步,打开SDRAM例程,SDRAM的起始地址为: 0xD000000, 分配RAM1大小为4M字节。
编译SDRAM例程,会生成一个.sct文件。
 
图1 使用Keil存储器分配图设置SDRAM的起始位置和大小
 
第二步, 取消选择Use Memory Layout from Target Dialog,手动编辑FMC_SDRAM.sct文件

图2  不再使用Keil的存储器设置对话框
 

图3  .sct文件修改前后对比
 
 
第三步,SDRAM变量声明
/* ADDRESS: 0x0D0000000  SIZE: 0x400000  */
#pragma arm section rwdata = "SD_RAM1", zidata = "SD_RAM1"
__IO uint8_t USART1_Rx_Buffer; // 0x10000: 64K
__IO uint16_t USART1_Rx_Count;
#pragma arm section rwdata
 
/* ADDRESS: 0xD0400000  SIZE: 0x400000   */
__IO uint8_t USART1_Rx_Buffer2 __attribute__ ((at(0xD0400000))); // 0x10000: 64K
 
第四步,对示例代码进行硬件仿真测试,在观察串口查看变量的位置和内容。
  for (counter = 0x00; counter < IS42S16400J_SIZE; counter++)
  {
    *(__IO uint8_t*) (SDRAM_BANK_ADDR + counter) = (uint8_t)0x0;
  }
 
  for(counter = 0; counter < 0x10000; ++counter){
    USART1_Rx_Buffer = 0x03;
  }
 
  for (counter = 0x00; counter < IS42S16400J_SIZE; counter++)
  {
    *(__IO uint8_t*) (SDRAM_BANK_ADDR + 0x400000 + counter) = (uint8_t)0x0;
  }
  for(counter = 0; counter < 0x10000; ++counter){
    USART1_Rx_Buffer2 = 0x02;
  }
  
 
 

ST_W 发表于 2014-12-4 18:23:01

你好,能上传工程文件看下吗?

王建 发表于 2014-12-10 10:47:00

有版本限制的,MDK-ARM编译器比较奇怪,有的版本支持某个.sct文件,有的版本就不支持,如果不是做bootlaoder之类的,不建议修改.sct文件,推荐用GCC编译器。

许小锁 发表于 2015-11-19 14:55:33

你好,能上传工程文件看下吗?

Dylan疾风闪电 发表于 2015-11-20 08:58:03

又多学到一种手段。
赞,LZ:)

wofei1314 发表于 2016-5-17 16:10:52

学习了,收藏下,兴许以后可以用到~
页: [1]
查看完整版本: 【原创】【STM32F429开发日志】通过修改.sct文件自动分配SDRAM变量