Fatal Error[e163]: The command line symbol "_DATA16_HEAP_SIZE" in
-Z(DATA)DATA16_I,DATA16_Z,DATA16_N,DATA16_HEAP+_DATA16_HEAP_SIZE=0200-03FF is not defined.
SMITH LEON:
如何将一个很大的数组3062byte的数组存到FLASH中。RAM貌似空间不够啊
Viki Shi:
这个问题的解决方法请看如下链接:http://e2e.ti.com/support/low_power_rf/f/158/p/17585/222134.aspx
SMITH LEON:
回复 Viki Shi:
这个我试过了。还是报错。能不能把数组写到ROM里面?
Viki Shi:
回复 SMITH LEON:
这么大的数组存在RAM内肯定是不够的,MSP430G2553的RAM没记错的话只有0.5kb
SMITH LEON:
回复 Viki Shi:
那怎么配置把它存到ROM中呢?和程序一起
SMITH LEON:
回复 Viki Shi:
Error[e16]: Segment CSTACK (size: 0x65c align: 0x1) is too long for segment definition. At least 0x498 more bytes needed. The problem occurred while processing the segment placement command "-Z(DATA)CSTACK+_STACK_SIZE#", where at the moment of placement the available memory ranges were "CODE:23c-3ff" Reserved ranges relevant to this placement: 200-22f DATA16_I 230-23b DATA16_Z 23c-3ff CSTACK
报这个错。貌似我把STACK改大以后,报错说需要的空间更大了
Hardy Hu:
回复 SMITH LEON:
Hi, Smith,
你说的定义到FLASH,也只能是全局变量和其初始化的值,如果在程序运行中需要修改,还是需要占用RAM的。
所以这个应用中,把液晶显示数据按照位定义,128*64的点阵需要1KBYTE的RAM,这是一个方法,如果还不行,就分段更新好了,更新速度只要在10ms以内,人眼基本都看不出来。
Regards,
Hardy
Triton Zhang:
回复 SMITH LEON:
你先要搞清楚几个问题,否者没法做程序员、一下都是非常基础的知识。
1. 一般的MCU的存储器分为FLAH和RAM, FLASH用来保存代码和常量,RAM用来保存变量。一个芯片的RAM空间比不能全部用来保存你的变量,还需要划分一部分出来做堆栈使用。
2. 如果你的数组太大,超过了RAM的空间,要么你改变数组大小,要么把数组用常量的形式保存到FLASH中,要用的时候,分段到RAM中来使用。
例如: const char dat[1024] = {0,0}; 这个定义就是把数组定义到FLASH中。
3. STACK占用的是RAM的空间,一般是从高地址向低地址递增寻址,代码中定义的变量一般是从低地址向高地址递增寻址。
4. 你增大了STACK的空间,相当于减少了RAM的可使用空间,当然后报错说需要的空间更大了。
SMITH LEON:
回复 Triton Zhang:
要不您帮我看看?