硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3698|回复: 7
收起左侧

[Embedded Studio] SEGGER embedded studio 5.1,建立F407的工程,RAM怎么选

[复制链接]

1

主题

1

回帖

4

积分

新手上路

积分
4
发表于 2020-8-20 17:52:55 | 显示全部楼层 |阅读模式

以前在4.5版本上建立F407的工程,无脑创建工程,应该都是使用RAM1(0x2000 0000 -0x2002 0000)。现在使用5.1版本的SES,编译后,发现使用的是RAM2(0x1000 0000),只有64kb。


然后设置了一个全局变量,发现这个变量确实存在了RAM2中。


问下在SES中怎么设置,让程序跑在RAM1中呀?






回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106749
QQ
发表于 2020-8-20 17:54:34 | 显示全部楼层
正好明天要更新V6,我明天了试试。
回复

使用道具 举报

6

主题

637

回帖

655

积分

金牌会员

积分
655
QQ
发表于 2020-8-20 20:47:58 | 显示全部楼层
创建的工程文件路径下,有一个memorymap的文件,把里面的RAM和RAM2的名称互相改为对方的就可以了
回复

使用道具 举报

1

主题

1

回帖

4

积分

新手上路

积分
4
 楼主| 发表于 2020-8-21 11:03:36 | 显示全部楼层
yklstudent 发表于 2020-8-20 20:47
创建的工程文件路径下,有一个memorymap的文件,把里面的RAM和RAM2的名称互相改为对方的就可以了

谢谢指点,这么修改的话只是把名字改过来了,但是还是使用的0x1000 0000 - 0x1001 0000的ram空间。我修改了STM32F4xx_Flash_CCM.icf,解决了这个问题。把原来CCM_RAM1替换成了RAM1.参照下面
  1. place at start of RAM + RAM1            { block vectors_ram };
  2. place in RAM + RAM1                     { section .non_init, section .non_init.*,               // No initialization section
  3.                                   section .no_init, section .no_init.*,                 // No initialization section, for backwards compatibility
  4.                                   section .noinit, section .noinit.*,                   // No initialization section, used by some SDKs/HALs
  5.                                   block tls };                                          // Thread-local-storage block
  6. place in RAM             { section .fast, section .fast.*};                      // "ramfunc" section
  7.                                place in RAM + RAM1 with auto order     { section .data, section .data.*,                       // Initialized data section
  8.                                section .bss, section .bss.*                          // Static data section
  9.                                };
  10. place in RAM            { block heap };                                         // Heap reserved block
  11. place at end of RAM                         { block stack };                                        // Stack reserved block at the end
复制代码


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106749
QQ
发表于 2020-8-22 16:36:23 | 显示全部楼层
gasaiyuno 发表于 2020-8-21 11:03
谢谢指点,这么修改的话只是把名字改过来了,但是还是使用的0x1000 0000 - 0x1001 0000的ram空间。我修改 ...

1、ES的安装目录找到这个文件STM32F4xx_Flash.icf,添加到工程里面
2、这里设置使用icf文件
4.png

3、编译就没问题了

7.png
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2023-4-1 12:39:36 | 显示全部楼层
gasaiyuno 发表于 2020-8-21 11:03
谢谢指点,这么修改的话只是把名字改过来了,但是还是使用的0x1000 0000 - 0x1001 0000的ram空间。我修改 ...

请问如果想把这个放在flash里面需要修改哪些?
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2023-4-1 12:41:58 | 显示全部楼层
eric2013 发表于 2020-8-22 16:36
1、ES的安装目录找到这个文件STM32F4xx_Flash.icf,添加到工程里面
2、这里设置使用icf文件

请问能展示一下这个flash.icf文件的内容吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106749
QQ
发表于 2023-4-1 14:49:58 | 显示全部楼层
hillhwchen 发表于 2023-4-1 12:41
请问能展示一下这个flash.icf文件的内容吗?

[C] 纯文本查看 复制代码
/*********************************************************************
*                    SEGGER Microcontroller GmbH                     *
*                        The Embedded Experts                        *
**********************************************************************
*                                                                    *
*            (c) 2014 - 2020 SEGGER Microcontroller GmbH             *
*                                                                    *
*       [url]www.segger.com[/url]     Support: [email]support@segger.com[/email]               *
*                                                                    *
**********************************************************************
*                                                                    *
* All rights reserved.                                               *
*                                                                    *
* Redistribution and use in source and binary forms, with or         *
* without modification, are permitted provided that the following    *
* condition is met:                                                  *
*                                                                    *
* - Redistributions of source code must retain the above copyright   *
*   notice, this condition and the following disclaimer.             *
*                                                                    *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND             *
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,        *
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF           *
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE           *
* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR *
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR           *
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  *
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;    *
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF      *
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT          *
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE  *
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH   *
* DAMAGE.                                                            *
*                                                                    *
**********************************************************************
-------------------------- END-OF-HEADER -----------------------------

File    : STM32F4xx_Flash.icf
Purpose : STM32F4xx linker script for application placement in Flash,
          for use with the SEGGER Linker.
*/

define memory with size = 4G;

//
// Combined regions per memory type
//
define region FLASH = FLASH1;
define region RAM   = RAM1;

//
// Block definitions
//
define block vectors                        { section .vectors };                                   // Vector table section
define block vectors_ram                    { section .vectors_ram };                               // Vector table section
define block ctors                          { section .ctors,     section .ctors.*, block with         alphabetical order { init_array } };
define block dtors                          { section .dtors,     section .dtors.*, block with reverse alphabetical order { fini_array } };
define block exidx                          { section .ARM.exidx, section .ARM.exidx.* };
define block tbss                           { section .tbss,      section .tbss.*  };
define block tdata                          { section .tdata,     section .tdata.* };
define block tls                            { block tbss, block tdata };
define block tdata_load                     { copy of block tdata };
define block heap  with size = __HEAPSIZE__,  alignment = 8, /* fill =0x00, */ readwrite access { };
define block stack with size = __STACKSIZE__, alignment = 8, /* fill =0xCD, */ readwrite access { };
//
// Explicit initialization settings for sections
// Packing options for initialize by copy: packing=auto/lzss/zpak/packbits
//
do not initialize                           { section .non_init, section .non_init.*, section .*.non_init, section .*.non_init.* };
do not initialize                           { section .no_init, section .no_init.*, section .*.no_init, section .*.no_init.* };   // Legacy sections, kept for backwards compatibility
do not initialize                           { section .noinit, section .noinit.*, section .*.noinit, section .*.noinit.* };       // Legacy sections, used by some SDKs/HALs
do not initialize                           { block vectors_ram };
initialize by copy /* with packing=auto */  { section .data, section .data.*, section .*.data, section .*.data.* };               // Static data sections
initialize by copy /* with packing=auto */  { section .fast, section .fast.* };                                                   // "RAM Code" sections
initialize by symbol __SEGGER_init_heap     { block heap  };                                        // Init the heap if there is one
initialize by symbol __SEGGER_init_ctors    { block ctors };                                        // Call constructors for global objects which need to be constructed before reaching main (if any). Make sure this is done after setting up heap.

//
// Explicit placement in FLASHn
//
place in FLASH1                             { section .FLASH1, section .FLASH1.* };
//
// FLASH Placement
//
place at start of FLASH                     { block vectors };                                      // Vector table section
place in FLASH with minimum size order      { section .init,   section .init.*,                     // Init code section
                                              section .init_rodata, section .init_rodata.*,         // Init read-only section
                                              section .text,   section .text.*,                     // Code section
                                              section .rodata, section .rodata.*,                   // Read-only data section
                                              section .segger.*,                                    // Auto-generated initialization
                                              block exidx,                                          // ARM exception unwinding block
                                              block ctors,                                          // Constructors block
                                              block dtors };                                        // Destructors block
place in FLASH                              { block tdata_load };                                   // Thread-local-storage load image

//
// Explicit placement in RAMn
//
place in RAM1                               { section .RAM1, section .RAM1.* };
//
// RAM Placement
//
place at start of RAM                       { block vectors_ram };
place in RAM                                { section .non_init, section .non_init.*,               // No initialization section
                                              section .no_init, section .no_init.*,                 // No initialization section, for backwards compatibility
                                              section .noinit, section .noinit.*,                   // No initialization section, used by some SDKs/HALs
                                              block tls };                                          // Thread-local-storage block
place in RAM with auto order                { section .fast, section .fast.*,                       // "ramfunc" section
                                              section .data, section .data.*,                       // Initialized data section
                                              section .bss, section .bss.*                          // Static data section
                                            };
place in RAM                                { block heap };                                         // Heap reserved block
place at end of RAM                         { block stack };                                        // Stack reserved block at the end

回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-4 05:53 , Processed in 0.361427 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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