新人求助:如何解决CubeSuit+ 编译E3206错误 的问题?
问题是由于程序代码大于共用flash引起的,需要把部分代码放到Bank(bank0或者其他)中。
解决办法:
(1)创建一个lk.dr文件,然后编入:merge segment1 :=BANK0
;merge segment2 :=BANK1
(2)把lk.dr添加到工程中;
(3)把要放在bank中的C文件,在C代码文件的头顶加入
#pragma section @@CNST segment1
然后编译,观察map文件再做调整。
以上方法由QQ群:瑞萨(NEC)应用交流 173700459 古董大神提供。
问题是我这样操作了,编译后查看map发现有以下疑问:
78K/0 Series Linker V4.01 Date:22 Jan 2015 Page: 3
@@R_INIS @ROM 00085H 00000H
@@CNST 00085H 00000H CSEG UNITP
@@CNST @cstart 00085H 00000H
@@CNST MCU_Init 00085H 00000H
* gap * 00085H 0000AH
* gap (Not Free Area) * 0008FH 00101H
@@LCODE 00190H 000AFH CSEG
@@LCODE @cstart 00190H 00076H
@@LCODE @imul 00206H 00014H
@@LCODE @hdwinit 0021AH 00001H
@@LCODE exit 0021BH 00024H
@@CODE 0023FH 07C34H CSEG
@@CODE main 0023FH 04F42H
@@CODE MCU_Init 05181H 000E8H
@@CODE ZGDSP2Comm
05269H 0080EH
@@CODE ZGDSPComm
05A77H 0079DH
@@CODE ZGInComm 06214H 0062CH
@@CODE ZGOutComm
06840H 006BBH
@@CODE ZGPMVPro 06EFBH 00BEAH
@@CODE ZGSamp 07AE5H 0038EH
* gap * 07E73H 0018DH
MEMORY=BANK0
BASE ADDRESS=08000H SIZE=04000H
OUTPUT INPUT INPUT BASE SIZE
SEGMENT SEGMENT MODULE ADDRESS
segment1 08000H 0183AH CSEG UNITP
segment1 main 08000H 00330H
segment1 ZGDSP2Comm
08330H 00446H
segment1 ZGDSPComm
08776H 00812H
segment1 ZGInComm 08F88H 00108H
segment1 ZGOutComm
09090H 00000H
segment1 ZGPMVPro 09090H 00190H
segment1 ZGSamp 09220H 0061AH
* gap * 0983AH 027C6H
@@CODE都是在共用Flash
而@@CNST是指 代码中定义的常量在bank0中
那么如果我的code还需要增加一些,那怎么办?
可不可以设置把@@CODE也放一部分到bank0呢?
希望各位大神能答疑!谢谢……