与龙共舞 发表于 2018-8-20 17:18:47

(已解决)STM32内存溢出错误:unable to allocate space for section...

本帖最后由 与龙共舞 于 2018-8-21 13:48 编辑

hi遇到问题,网上找了找,还是无果,拿出来问问。
工程师IAR的 我现在加入可一个加密解密的.C.H进去,里面很多u8【64】这样的全局变量吧 编译报错了:
unable to allocate space for sections/blocks with a total
estimated minimum size of 0x18427 bytes (max align 0x8) in
<> (total uncommittedspace 0x18000).


现在该怎么分配呢?
参考:http://blog.csdn.net/Thinkcortex/article/details/51712524   好像懂一点 但又写不好
4. 当定义了一个超大的全局数组时,IAR编译报错         

unable to allocate space for sections/blocks with a total estimated minimum size of 0xfcac bytes (max align 0x8) in <> (total uncommitted内存范围超出了STM32的RAM,但是MDK并没有报错
5.在MDK中可使用   __attribute__ ((at(0X20001000))) 指定变量位置,在IAR中使用@(0X2001000)+++++++++++++++++++20180821解决之路+++++++++++++++网上找到 办法都很高级 我能力不行 看不懂 主要思想是修改.icf文件 确定一个区域给你内存去用吧
我先用第一种方法:malloc 发现如下这写法在VS可以通过 在IAR报错了:Error: function call is not allowed in a constant expression!#include "stdafx.h"
#include <malloc.h>
int *arr= (int *)malloc(10 * sizeof(int));
int main()
{

    arr = { 3 };
    printf("%d\n",*(arr+1));
    while (1);
    return 0;
}
此方法 放弃 IAR不支持全局变量用malloc只能写数组。。。
用第二种土方法,把我的两个全局变量写死:
//BoolType Temp@"u_boot_cmd";
//BoolType SubKey@"u_boot_cmd";
修改为:
static BoolType *Temp =(BoolType *)0x20002000 ;//{ ( BoolType ) 0};
static BoolType *SubKey=(BoolType *)0x20002050 ;

写到这里代码也要改了 恨的牙痒痒的 搞个什么二维数组 费劲儿
代码替换

    //    TablePermute ( SubKey, KeyBit, PC2_Table, 48 );//PC-2置换-- OK
          TablePermute (   SubKey+(BoolType)(i)*48, KeyBit, PC2_Table, 48 );//PC-2置换-- OK

算是二维数组的指针表示吧 简单到爆炸

再次编译 还是有问题 标题的问题还在 但是我注意到我的内存已经降下来 之前我需要0X18427 现在是0X183E3了
加油
在找头文件的
/*------------- F函数 备用A和备用B 异或 得到48位输出 ---------------*/

// 异或后的结果48位分为8组,每组6位,作为8个S盒的输入             [组合操作]
// S盒以6位作为输入(8组),4位作为输出(4*(8组)=32位)
// S工作原理 假设输入为A=abcdef ,则bcde所代表的数是0-15之间的
// 一个数记为 X=bcde ,af代表的是0-3之间的一个数,记为 Y=af
// 在S1的X列,Y行找到一个数Value,它在0-15之间,可以用二进制表示
// 所以为4bit (共32位)
static const unsigned char S_Box =
{
    //S1
    14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7,
    0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8,
    4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0,
    15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13,
    //S2
    15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10,
    3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5,
    0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15,
    13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9,
    //S3
    10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8,
    13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1,
    13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7,
    1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12,
    //S4
    7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15,
    13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9,
    10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4,
    3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14,
    //S5
    2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9,
    14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6,
    4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14,
    11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3,
    //S6
    12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11,
    10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8, //S6表错误
    9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6,
    4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13,
    //S7
    4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1,
    13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6,
    1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2,
    6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12,
    //S8
    13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7,
    1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2,
    7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8,
    2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11
};这个巨无霸的前面以前是static的我再加了一个const然后 神奇的编译过了

smallcsduck 发表于 2018-8-20 19:31:49

RAM不够了呗 不改变的变量可以用const变成data段放在flash里面

cugxiao 发表于 2018-8-20 19:52:28

需要大内存的时候最好使用内存管理,这个有很多实现的例子的,大数组最好是自己用malloc管理,而不是交给编译器自己分配

feixiang20 发表于 2018-8-20 23:54:09

分配不够用,没有足够的内存空间供其使用,换个变量最大数值限制看看

zero99 发表于 2018-8-22 13:16:47

怎么解决的啊,大佬

与龙共舞 发表于 2018-8-24 16:47:57

zero99 发表于 2018-8-22 13:16
怎么解决的啊,大佬

答案在原文中 20180821解决之路++
页: [1]
查看完整版本: (已解决)STM32内存溢出错误:unable to allocate space for section...