<delect id="jxvjd"></delect>

<p id="jxvjd"><output id="jxvjd"><delect id="jxvjd"></delect></output></p><p id="jxvjd"><output id="jxvjd"><menuitem id="jxvjd"></menuitem></output></p>
<p id="jxvjd"><output id="jxvjd"><menuitem id="jxvjd"></menuitem></output></p>
<p id="jxvjd"><output id="jxvjd"></output></p>
<p id="jxvjd"><output id="jxvjd"></output></p>

<pre id="jxvjd"></pre><pre id="jxvjd"></pre>
<noframes id="jxvjd">

<noframes id="jxvjd">
<pre id="jxvjd"></pre>

<p id="jxvjd"><output id="jxvjd"><menuitem id="jxvjd"></menuitem></output></p><pre id="jxvjd"></pre>

<pre id="jxvjd"></pre>
<p id="jxvjd"><delect id="jxvjd"></delect></p>

<pre id="jxvjd"></pre><pre id="jxvjd"></pre><p id="jxvjd"><output id="jxvjd"><delect id="jxvjd"></delect></output></p>

<p id="jxvjd"></p>

<p id="jxvjd"></p>

<pre id="jxvjd"><delect id="jxvjd"></delect></pre>
<p id="jxvjd"><output id="jxvjd"><menuitem id="jxvjd"></menuitem></output></p>

<p id="jxvjd"></p>
<pre id="jxvjd"><pre id="jxvjd"></pre></pre>

<output id="jxvjd"></output>

<pre id="jxvjd"><output id="jxvjd"></output></pre>

<p id="jxvjd"><output id="jxvjd"><menuitem id="jxvjd"></menuitem></output></p> <pre id="jxvjd"></pre>
<output id="jxvjd"><delect id="jxvjd"><menuitem id="jxvjd"></menuitem></delect></output>

<pre id="jxvjd"><output id="jxvjd"></output></pre>

<p id="jxvjd"></p>
<pre id="jxvjd"><delect id="jxvjd"></delect></pre>

<pre id="jxvjd"><output id="jxvjd"><menuitem id="jxvjd"></menuitem></output></pre>

<pre id="jxvjd"><output id="jxvjd"></output></pre>

<pre id="jxvjd"></pre>
<p id="jxvjd"><delect id="jxvjd"></delect></p><p id="jxvjd"></p>

<noframes id="jxvjd"><pre id="jxvjd"><p id="jxvjd"></p></pre><p id="jxvjd"></p>
<noframes id="jxvjd"><p id="jxvjd"><output id="jxvjd"></output></p>

<p id="jxvjd"><delect id="jxvjd"></delect></p>

<noframes id="jxvjd"><output id="jxvjd"></output>

<pre id="jxvjd"></pre>

<p id="jxvjd"></p>
<pre id="jxvjd"><output id="jxvjd"></output></pre>

<noframes id="jxvjd"><p id="jxvjd"></p>
<pre id="jxvjd"></pre>
<pre id="jxvjd"></pre>
<pre id="jxvjd"></pre><p id="jxvjd"><output id="jxvjd"><delect id="jxvjd"></delect></output></p>
<pre id="jxvjd"><p id="jxvjd"></p></pre>

<p id="jxvjd"></p>
<p id="jxvjd"></p>
<p id="jxvjd"></p>

<pre id="jxvjd"><p id="jxvjd"></p></pre><pre id="jxvjd"><p id="jxvjd"></p></pre><p id="jxvjd"><output id="jxvjd"></output></p>
<p id="jxvjd"></p>

<p id="jxvjd"><output id="jxvjd"><menuitem id="jxvjd"></menuitem></output></p>

<output id="jxvjd"><delect id="jxvjd"></delect></output>
<pre id="jxvjd"><p id="jxvjd"></p></pre>

<pre id="jxvjd"><output id="jxvjd"></output></pre>

<p id="jxvjd"></p>

<pre id="jxvjd"><p id="jxvjd"><menuitem id="jxvjd"></menuitem></p></pre>

<pre id="jxvjd"></pre>

<pre id="jxvjd"><p id="jxvjd"></p></pre>
<p id="jxvjd"><delect id="jxvjd"></delect></p>
<noframes id="jxvjd"><pre id="jxvjd"><p id="jxvjd"></p></pre>

<p id="jxvjd"></p>
<pre id="jxvjd"><p id="jxvjd"></p></pre>
<p id="jxvjd"></p>

<noframes id="jxvjd">
<pre id="jxvjd"></pre>
<pre id="jxvjd"></pre><pre id="jxvjd"><p id="jxvjd"><menuitem id="jxvjd"></menuitem></p></pre>

<noframes id="jxvjd">

<p id="jxvjd"></p>

<p id="jxvjd"><menuitem id="jxvjd"></menuitem></p>

<pre id="jxvjd"><p id="jxvjd"><delect id="jxvjd"></delect></p></pre>

ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU
打印

[STM32F4] RW+ZI 超出了RAM大小,程序还能正常运行?

[复制链接]
195|16
跳转到指定楼层
楼主
本帖最后由 st316 于 2019-6-3 18:16 编辑

Hello, 我正在使用 STM32F405RGT6 芯片。有三块 RAM,分别是64 KB 的CCM,112 KB的SRAM1 和16 KB 的 SRAM2。具体如下图所示。



以下是分散加载文件相关内容:
LR_IROM1 SCT_LR_IROM1_BASE SCT_LR_IROM1_LENGTH
{
    ......
    RW_IRAM1 SCT_SRAM_BASE SCT_SRAM_SIZE        ;SRAM1 和SRAM2,一共128 KB
    {
        .ANY (+RW +ZI)
    }

    RW_IRAM2 SCT_CCM_RAM_BASE SCT_CCM_RAM_SIZE  ; CCM
    {
        heap_1.o (+RW +ZI)
    }
}

其中,heap_1.c中有一个37500字节的堆,我将它放在 CCM 中。
余下的所有 RW 和 ZI 放在 128 KB (112 + 16) 那两块 SRAM 中。

奇怪的事情来了,请看 Keil 编译完成后的输出:
Program Size: Code=410088 RO-data=93200 <b>RW-data=1560</b> <b>ZI-data=189920

RW + ZI = 1560 + 189920 = 191480 字节。
再计算一下,可以得到实际放在 128 K SRAM 里的数据大小是 191480 - 37500 = 153980 字节,约等于 150 KB!
150 KB 数据放在 128 KB 的 SRAM 中,明显不够,可是编译器并没有报错,我的程序也运行得好好的。这是为什么?

我接着又查看了 Keil 生成的 map 文件,如下:
===============================================================

Memory Map of the image
......
    Execution Region RW_IRAM2 (Base: 0x10000000, Size: <b>0x00009288</b>, Max: 0x00010000, ABSOLUTE)

    Base Addr    Size         Type   Attr      Idx    E Section Name        Object

    0x10000000   0x00000004   Data   RW         7285    .data               heap_1.o
    0x10000004   0x00000004   PAD
    0x10000008   0x00009280   Zero   RW         7284    .bss                heap_1.o


    Execution Region RW_IRAM1 (Base: 0x20000000, Size: <b>0x00015940</b>, Max: 0x00020000, ABSOLUTE, COMPRESSED[0x00000204])
......
===============================================================


      Code (inc. data)   RO Data    RW Data    ZI Data      Debug   

    410088      35462      93200       1560     189920          0   Grand Totals
    410088      35462      93200        520     189920          0   ELF Image Totals (compressed)
    410088      35462      93200        520          0          0   ROM Totals

===============================================================

    Total RO  Size (Code + RO Data)               503288 ( 491.49kB)
    Total RW  Size (RW Data + ZI Data)            191480 ( 186.99kB)
    Total ROM Size (Code + RO Data + RW Data)     503808 ( 492.00kB)

===============================================================

可以看出,RW_IRAM2 中使用了  0x00009288 字节,也就是堆的大小,37500字节。
而 RW_IRAM1 显示却只使用了 0x00015940 字节,换算过来才86 KB 左右,这就是为什么我的程序可以正常运行的缘故吗?可是为什么只有86 KB呢?最后面给出的 RW + ZI 已经是186 KB 了呀!


麻烦知道的高手给解答一下,谢谢!

使用特权

评论回复
沙发
| 2019-6-4 09:35 | 只看该作者
你该检查.map文件中每一个变量的分配位置,如果没有超出范围的变量,则代码没问题,编译器除了需要heap,还需要堆栈,全局静态变量等,都定义在ZI段,正常编译没出问题,说明变量空间都有效。

使用特权

评论回复
板凳
| 2019-6-6 12:26 | 只看该作者
__align(4) u8 mem2base[MEM2_MAX_SIZE] __attribute__((at(0X68000000)));       
程序里面有没有类似这样的代码?

使用特权

评论回复
地板
| 2019-6-10 16:18 | 只看该作者
这个应该不能运行了呢。      

使用特权

评论回复
5
| 2019-6-10 16:18 | 只看该作者
可以把一些变量合并使用的。      

使用特权

评论回复
6
| 2019-6-10 16:18 | 只看该作者
还能超出ram范围了?            

使用特权

评论回复
7
| 2019-6-10 16:19 | 只看该作者
看来只能换其他的芯片了。      

使用特权

评论回复
8
| 2019-6-10 16:19 | 只看该作者
至今没有写超出范围的程序。   

使用特权

评论回复
9
| 2019-6-10 16:19 | 只看该作者
楼主的问题解决了吗           

使用特权

评论回复
10
| 2019-6-10 16:19 | 只看该作者
程序运行有问题吗?      

使用特权

评论回复
11
| 2019-6-10 16:20 | 只看该作者
可能程序保存的格式不同吧  

使用特权

评论回复
12
| 2019-6-10 16:20 | 只看该作者
编译器显示的跟下载的不一样的。

使用特权

评论回复
13
| 2019-6-10 16:20 | 只看该作者
程序如果没有报错就没有问题 。  

使用特权

评论回复
14
| 2019-6-18 12:46 | 只看该作者
当然不可以了

使用特权

评论回复
15
| 2019-6-18 12:47 | 只看该作者
楼主换芯片吧

使用特权

评论回复
16
| 2019-6-18 12:51 | 只看该作者
选一个ram大点的芯片吧

使用特权

评论回复
17
| 2019-6-18 12:56 | 只看该作者
换一个大ram的芯片

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表
加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】|