野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 17132|回复: 5

实验——自动分配变量到指定的 SRAM 空间

[复制链接]
发表于 2020-5-31 17:41:21 | 显示全部楼层 |阅读模式
各位大佬,求解:
在实验——自动分配变量到指定的 SRAM 空间中,若想把全局变量加载到扩展的外部SRAM中,“需要在系统执行分散加载代码之前使该空间使用的存储器正常运转,使它能够正常保存数据。”,而保证外部SRAM正常运转得在启动文件中调用 FSMC_SRAM_Init 函数。这表示:sct 在 FSMC_SRAM_Init 函数之后运行。
但又要保证 “在 FSMC_SRAM_Init 函数执行之前,栈空间必须要被准备好,然而在 FSMC_SRAM_Init 函数执行之前,外部存储器却并未正常工作,这样的矛盾导致栈空间不能被分配到外部存储器区域。” ,于是在分散加载代码sct中将栈空间分配给内部SRAM。这表示:sct 在 FSMC_SRAM_Init 函数之前运行。
那么问题来了,sct分配变量 和 使外部SRAM正常运转  二者运行顺序到底是怎样的?

谢谢各位大佬!
回复

使用道具 举报

发表于 2020-6-1 08:40:07 | 显示全部楼层
栈为什么要放到外部RAM呢?又慢又不方便
其实只要FMC初始化完成以后,就可以用分散加载的方式把变量放到外部存储器,不一定非得在初始化之后再定义,只要保证在用到外部存储器之前初始化就行。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-1 10:04:40 | 显示全部楼层
xjmlfm 发表于 2020-6-1 08:40
栈为什么要放到外部RAM呢?又慢又不方便
其实只要FMC初始化完成以后,就可以用分散加载的方式把变量放到外 ...

感谢回答!您意思是 sct 工作在 FMC 之前是吗?这样说来,即使 sct 中关于 将某些变量分配到外部SRAM 的代码先执行,但由于此时并未产生这些需要分配到外部SRAM的变量,所以此时的外部SRAM可以没有完成初始化?
回复 支持 反对

使用道具 举报

发表于 2020-6-1 14:20:54 | 显示全部楼层
江东猛虎 发表于 2020-6-1 10:04
感谢回答!您意思是 sct 工作在 FMC 之前是吗?这样说来,即使 sct 中关于 将某些变量分配到外部SRAM 的 ...

我不知道我的理解对不对,我理解sct只是对各个RAM区进行命名而已
实际每个变量放到哪里只是用到了sct里的对各片ram取的别名
在变量定义的时候指定放在哪里,此时fmc有没有初始化没关系的,因为这里只是定义,还没有真正用到。
但是当对定义在外部ram里的变量进行初始化的时候,就必须要先进行fmc的初始化了,因为这时候需要访问外部ram了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-1 14:55:30 | 显示全部楼层
xjmlfm 发表于 2020-6-1 14:20
我不知道我的理解对不对,我理解sct只是对各个RAM区进行命名而已
实际每个变量放到哪里只是用到了sct里的 ...

是的呢,我就是这个意思
回复 支持 反对

使用道具 举报

发表于 2020-6-3 21:13:41 | 显示全部楼层
在SystemInit函数里做好外部RAM的初始化,就可以解决你说的问题。一般当你使用CMSIS兼容的启动代码的时候,Reset_Handler里第一个被调用的函数是 SystemInit,这个函数就是用来做复位后最紧急最基础的硬件初始化的,比如初始化外部RAM控制器或者DDR控制器之类的——这样在随后进行分散加载时,就可以正确访问那些外部RAM了。
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-6-17 06:31 , Processed in 0.042831 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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