打印
[STM32F4]

代码全部放进SRAM执行

[复制链接]
1023|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xiaofei558008|  楼主 | 2019-7-1 14:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
define symbol __ICFEDIT_intvec_start__ = 0x20000000;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__    = 0x20000000;
define symbol __ICFEDIT_region_ROM_end__      = 0x2000FFFF;
define symbol __ICFEDIT_region_RAM_start__    = 0x20000000;
define symbol __ICFEDIT_region_RAM_end__      = 0x2000FFFF;
define symbol __ICFEDIT_region_CCMRAM_start__ = 0x10000000;
define symbol __ICFEDIT_region_CCMRAM_end__   = 0x10003FFF;
/*-Sizes-*/


把 .icf手工改成这个样子是不是就可以了呢??

使用特权

评论回复
沙发
downcount| | 2019-7-1 16:29 | 只看该作者
没试过,坐等楼主更新验证结果

使用特权

评论回复
板凳
xiaofei558008|  楼主 | 2019-7-11 17:41 | 只看该作者


STM32G4 CubeMx5.2.1就直接生成了RAM运行的ICF文件。



使用特权

评论回复
地板
xiaofei558008|  楼主 | 2019-7-11 17:42 | 只看该作者
/*###ICF### Section handled by ICF editor, don't touch! ****/
/*-Editor annotation file-*/
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */
/*-Specials-*/
define symbol __ICFEDIT_intvec_start__ = 0x20000000;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__     = 0x20000000;
define symbol __ICFEDIT_region_ROM_end__       = 0x20001FFF;
define symbol __ICFEDIT_region_RAM_start__     = 0x20002000;
define symbol __ICFEDIT_region_RAM_end__       = 0x20007FFF;
define symbol __ICFEDIT_region_CCMSRAM_start__ = 0x10000000;
define symbol __ICFEDIT_region_CCMSRAM_end__   = 0x100027FF;

/*-Sizes-*/
define symbol __ICFEDIT_size_cstack__ = 0x400;
define symbol __ICFEDIT_size_heap__ = 0x200;
/**** End of ICF editor section. ###ICF###*/


define memory mem with size = 4G;
define region ROM_region      = mem:[from __ICFEDIT_region_ROM_start__   to __ICFEDIT_region_ROM_end__];
define region RAM_region      = mem:[from __ICFEDIT_region_RAM_start__   to __ICFEDIT_region_RAM_end__];
define region CCMSRAM_region  = mem:[from __ICFEDIT_region_CCMSRAM_start__   to __ICFEDIT_region_CCMSRAM_end__];

define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };
define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };

initialize by copy { readwrite };
do not initialize  { section .noinit };

place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };

place in ROM_region   { readonly };
place in RAM_region   { readwrite,
                        block CSTACK, block HEAP };
place in CCMSRAM_region { };

使用特权

评论回复
5
kingkits| | 2019-7-12 09:45 | 只看该作者
在RAM运行的方式有2种,一种是直接配置并编译成RAM环境,由下载器或下载软件装载到RAM中,另一种是编译成RAM 可运行的代码,先下载到FLASH中,运行之前,再由FLASH中的程序装载到RAM中(与下载软件相似)运行,这其中需要花很多心思

使用特权

评论回复
6
磨砂| | 2019-8-6 10:20 | 只看该作者
感觉第二种比较可靠 但是这样一来 需要跳转的就非常麻烦了吧

使用特权

评论回复
7
晓伍| | 2019-8-6 10:26 | 只看该作者
在代码中加一个指针就行应该

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

137

主题

971

帖子

13

粉丝