专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
请问一下SRAM怎么用?
2019-07-14 18:12
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
15107
6
1680
不太清楚SRAM是如何工作的,是cpu自己将我们定义的buf、变量直接分配到这里面,还是需要使用什么函数来手动分配,记得有一个malloc函数,这是做什么的啊,堆和栈有什么区别啊
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
6条回答
东少2016
2019-07-15 06:25
st使用SRAM首先用一个分散加载文件,告诉编译你有哪些存储空气,包括ram 和ROM。然后malloc就从ram中分配内存。分散加载文件时arm 构架规定的
给你举个IAR 5.4的官方历程给你举个例子
1、iar工程打开后,从project-》option-》link看到link文件来自$PROJ_DIR$STM32F10x_FLASH.icf,对应安装目录的D:Program FilesIAR SystemsEmbedded Workbench 5.4armexamplesSTSTM32F10xstm32f10x_stdperiph_libProjectSTM32F10x_StdPeriph_ExamplesFSMCSRAMstm32f10x_flash.icf
这个文件下定义了几个预编译命令,告诉编译器ROM/RAM起始和终止地址在哪。
define symbol __ICFEDIT_intvec_start__ = 0x08000000;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__ = 0x08000000 ;
define symbol __ICFEDIT_region_ROM_end__ = 0x0807FFFF;
define symbol __ICFEDIT_region_RAM_start__ = 0x20000000;
define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF;
/*-Sizes-*/__ICFEDIT_size_cstack__
define symbol = 0x400;
define symbol __ICFEDIT_size_heap__ = 0x200;
/**** End of ICF editor section. ###ICF###*/
2、同时在这个文件
D:Program FilesIAR SystemsEmbedded Workbench 5.4armconfigideIcfEditorcortex_v1_0.xml文件里规定了堆栈和RAM ROM的位置是哪个地址。其中ROM是程序存放地址,RAM是分配内存的地址。
Start:
End:
__ICFEDIT_region_ROM_start__
__ICFEDIT_region_ROM_end__
The start address of the ROM region
The end address of the ROM region
__ICFEDIT_region_RAM_start__
__ICFEDIT_region_RAM_end__
The start address of the RAM region
The end address of the RAM region
3、以上几个文件综合起来生成一个分散加载文件,达到合理分配内存的目的。给你一个IAR工程例子D:Program FilesIAR SystemsEmbedded Workbench 5.4armexamplesSTSTM32F10xstm32f10x_stdperiph_libProjectSTM32F10x_StdPeriph_ExamplesFSMCSRAM
4、建议多看看arm分散加载,你还可以自己定义分散加载,规定每个文件编译好放在哪个地址, 哪个文件/变量分配在哪个地址。
5、DSP和ARM都可以使用这种方法,具体使用查看编译器手册。
6、在MDK中直接直接指定片外片内内存的。或者自己写一个分散加载文件,编译使用那个分散加载来编译。
加载中...
查看其它6个回答
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
给你举个IAR 5.4的官方历程给你举个例子
1、iar工程打开后,从project-》option-》link看到link文件来自$PROJ_DIR$STM32F10x_FLASH.icf,对应安装目录的D:Program FilesIAR SystemsEmbedded Workbench 5.4armexamplesSTSTM32F10xstm32f10x_stdperiph_libProjectSTM32F10x_StdPeriph_ExamplesFSMCSRAMstm32f10x_flash.icf
这个文件下定义了几个预编译命令,告诉编译器ROM/RAM起始和终止地址在哪。
define symbol __ICFEDIT_intvec_start__ = 0x08000000;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__ = 0x08000000 ;
define symbol __ICFEDIT_region_ROM_end__ = 0x0807FFFF;
define symbol __ICFEDIT_region_RAM_start__ = 0x20000000;
define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF;
/*-Sizes-*/__ICFEDIT_size_cstack__
define symbol = 0x400;
define symbol __ICFEDIT_size_heap__ = 0x200;
/**** End of ICF editor section. ###ICF###*/
2、同时在这个文件
D:Program FilesIAR SystemsEmbedded Workbench 5.4armconfigideIcfEditorcortex_v1_0.xml文件里规定了堆栈和RAM ROM的位置是哪个地址。其中ROM是程序存放地址,RAM是分配内存的地址。
Start:
End:
__ICFEDIT_region_ROM_start__
__ICFEDIT_region_ROM_end__
The start address of the ROM region
The end address of the ROM region
__ICFEDIT_region_RAM_start__
__ICFEDIT_region_RAM_end__
The start address of the RAM region
The end address of the RAM region
3、以上几个文件综合起来生成一个分散加载文件,达到合理分配内存的目的。给你一个IAR工程例子D:Program FilesIAR SystemsEmbedded Workbench 5.4armexamplesSTSTM32F10xstm32f10x_stdperiph_libProjectSTM32F10x_StdPeriph_ExamplesFSMCSRAM
4、建议多看看arm分散加载,你还可以自己定义分散加载,规定每个文件编译好放在哪个地址, 哪个文件/变量分配在哪个地址。
5、DSP和ARM都可以使用这种方法,具体使用查看编译器手册。
6、在MDK中直接直接指定片外片内内存的。或者自己写一个分散加载文件,编译使用那个分散加载来编译。
一周热门 更多>