本帖最后由 与龙共舞 于 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
<[0x20000000-0x20017fff]> (total uncommitted space 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 <[0x20000000-0x2000bfff]> (total uncommitted 内存范围超出了STM32的RAM ,但是MDK并没有报错
5.在MDK中可使用 __attribute__ ((at(0X20001000))) 指定变量位置,在IAR中使用@(0X2001000) +++++++++++++++++++20180821解决之路+++++++++++++++ 网上找到 办法都很高级 我能力不行 看不懂 主要思想是修改.icf文件 确定一个区域给你内存去用吧
我先用第一种方法:malloc 发现如下这写法在VS可以通过 在IAR报错了:Error[Pe059]: 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[1] = { 3 };
- printf("%d\n",*(arr+1));
- while (1);
- return 0;
- }
复制代码
此方法 放弃 IAR不支持全局变量用malloc只能写数组。。。
用第二种土方法,把我的两个全局变量写死:
//BoolType Temp[65]@"u_boot_cmd";
//BoolType SubKey[16][48]@"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[8][4][16] =
- {
- //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 然后 神奇的编译过了
|
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
答案在原文中 20180821解决之路++