在TI的官网上下载的实例程序,在 CCS3.3版本下编译出错,软件版本(VerSion3.3.83.20)
错误提示信息:
>> Cannot open "Debug.lkf"
实例工程链接地址如下:
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
在TI的官网上下载的实例程序,在 CCS3.3版本下编译出错,软件版本(VerSion3.3.83.20)
错误提示信息:
>> Cannot open "Debug.lkf"
实例工程链接地址如下:
http://www.deyisupport.com/question_answer/microcontrollers/c2000/f/56/t/14040.aspx
按照上面链接的内容,替换C2400后,问题解决
>> cannot allocate .text in B0 (page 1)
>> warning: entry point other than _c_int0 specified
>> errors in input - FL_RD.out not built
编译出现了另外一个错误,
cannot allocate .text in B0 (page 1)
cmd 文件如下:
/* F206 TRIPLE READ */
-e START
-m FL_RD.map
-o FL_RD.out
MEMORY
{
PAGE 0 : TB0: origin = 0h, length = 0F0h
PSA: origin = 0F0h, length = 0Fh
B0: origin = 0FE00h, length = 0100h
FLASH0: origin = 0100h, length = 04F00h
FLASH1: origin = 05000h, length = 05000h
PAGE 1 : RAMB2: origin = 0060h, length = 0020h
RAMB0: origin = 0200h, length = 0100h
RAMB1: origin = 0300h, length = 0100h
FLASH2: origin = 01000h, length = 01000h
}
SECTIONS
{
.text > B0 PAGE0
.bss > RAMB2 PAGE1
}
已经分配了B0 PAGE0,为什么不能分配到page0。
这个程序是TI 官方网站提供的,是一个小的汇编程序,不是很大。而且是正式文档中说明的。
TRIPLE_RD.ASM
.title "50M21 FLASH READ ARRAY"
.length 50
.width 120
.option X
************************************************************
* FLASH READ ARRAY (FL_RD) *
* Additional Subroutine for TMS320F206 Flash Utilities. *
* Revision 1.0 *
* This program reads the flash memory with three different *
* methods as follows: *
* Fast read sequential *
* Slow read sequential *
* XOR read *
* Each read method is CHECKSUM'ed for pass or fail. *
* This program can be built to read the flash memory of a *
* device that had been cleared, erased, programmed with *
* a checker board pattern or programmed with a piece of *
* code by changing the compiled switch "CS" below. *
* *
* *
* Passed Parameters: *
* FL_START Start address of flash range to be cleared.*
* This address must start on a row start *
* boundary. *
* FL_END End address of flash range to be cleared. *
* This address must end on a row end *
* boundary. *
* *
* Returned Parameter: *
* ACC = error code (0 if passed) *
* *
* This function can be compiled/assembled and used as a *
* standalone test or used by the C2XX_BRX.ASM file. *
* *
* - For Stand alone, use the read_stdalone.cmd to compile *
* and link. Note that when using this mode, the compile *
* variable PRG2xx must be set to 0 also set the CNF to 1 *
* (by using the CCS) before code is downloaded onto the *
* target board since the code is supposingly downloaded on *
* the on-chip B0 block *
* *
* - For using with the control module C2XX_BRX.ASM and *
* the utility code Sutils20.asm, use the *
* C2XX_BRX(_CCS).CMD to compile and link. Note that when *
* using this mode, the compile variable PRG2xx must be set *
* to 1. The PRG_2XX(W).EXE automatically set the CNF bit *
* to 1 before downloading the C2XX_BBX.OUT onto the F206. *
* *
************************************************************
.def FL_RD
.global FL_RD
.def _FL_RD
.ref PARMS
.global _FL_RD, START
.include "fl_vars.h"
.text
PRG2xx .set 1 ;Set to 0 if not used by C2XX_BRX.ASM file
*
* STATISTICS VARIABLES
FCSH .set 070h ;FAST CHECKSUM HI WORD
FCSL .set 071h ;FAST CHECKSUM LO WORD
SCSH .set 072h ;SLOW CHECKSUM HI WORD
SCSL .set 073h ;SLOW CHECKSUM LO WORD
XCSH .set 074h ;XOR CHECKSUM HI WORD
XCSL .set 075h ;XOR CHECKSUM LO WORD
CSH .set 076h ;CORRECT CHECKSUM HI
CSL .set 077h ;CORRECT CHECKSUM LO
CS .set 0 ;No checksum
;CS .set 1 ;clear checksum
;CS .set 2 ;erase checksum
;CS .set 3 ;checker shecksum
ERSSUML .set 0C000h ;erase checksum lo
ERSSUMH .set 0FFFFh ;erase checksum hi
CLRSUML .set 00000h ;clear checksum lo
CLRSUMH .set 00000h ;clear checksum hi
CKRSUML .set 0E000h ;checker checksum lo
CKRSUMH .set 0FFFFh ;checker checksum hi
FPTR .set 07Dh ;FLASH READ POINTER
RPT_N .set 07Eh ;TEMPORARY FOR REPEAT COUNT
TEMP .set 07Fh ;TEMPORARY VARIABLE
*
* Constants
FUT .set 0 ;Flash0 under Test
;FUT .set 1 ;Flash1 under Test
FLST0 .set 0 ;start address of Flash0
FLEND0 .set 03FFFh ;end address of Flash0
FLST1 .set 04000h ;start address of Flash1
FLEND1 .set 07FFFh ;end address of Flash1
XORMASK .set 03FFFh ;address XOR mask
.page
*
.sect "FL_RD"
LBL FL_RD
_FL_RD:
START:
*
;;<Configure Status Registers>======================================
SETC SXM ;; ENABLE sign extension
LDP #0
LACL #0 ;ACC = 0
SACL SCSL ;INITIALIZE CHECKSUM
SACL SCSH ;INITIALIZE CHECKSUM
SACL XCSL ;INITIALIZE CHECKSUM
SACL XCSH ;INITIALIZE CHECKSUM
.if CS==1 ;CLEAR
SPLK #CLRSUML,CSL ;INITIALIZE CHECKSUM
SPLK #CLRSUMH,CSH ;INITIALIZE CHECKSUM
.endif
.if CS==2 ;ERASE
SPLK #ERSSUML,CSL ;INITIALIZE CHECKSUM
SPLK #ERSSUMH,CSH ;INITIALIZE CHECKSUM
.endif
.if CS==3 ;CHECKER
SPLK #CKRSUML,CSL ;INITIALIZE CHECKSUM
SPLK #CKRSUMH,CSH ;INITIALIZE CHECKSUM
.endif
.if PRG2xx
CALL RD3 ;Execute Triple Read on Flash0/1
LDP #PARMS
RET
.else
SPLK #FLST0,FL_START ;set flash start adrs
SPLK #FLEND0,FL_END ;set flash end adrs
LAR AR5,FL_START ;AR5 indicates which flash
CALL RD3 ;Execute Triple Read on Flash0
BCND FailRD3_0,NEQ ;if Flash0 fails
LACL #0 ;ACC = 0
SACL SCSL ;INITIALIZE CHECKSUM
SACL SCSH ;INITIALIZE CHECKSUM
SACL XCSL ;INITIALIZE CHECKSUM
SACL XCSH ;INITIALIZE CHECKSUM
SPLK #FLST1,FL_START ;set flash start adrs
SPLK #FLEND1,FL_END ;set flash end adrs
LAR AR5,FL_START ;AR5 indicates which flash
CALL RD3 ;Execute Triple Read on Flash0
BCND FailRD3_1,NEQ ;if Flash1 fails
LBL PASS
NOP
* B PASS
B FL_RD ;looping
LBL FailRD3_0
IDLE
B FailRD3_0
LBL FailRD3_1
IDLE
B FailRD3_1
.endif
*
* EXECUTE FAST CHECKSUM
*
LBL RD3
MAR *,AR5 ;ARP=>AR5
LAR AR0,#0
LACL FL_END ;ACC = FLASH END +1
SUBS FL_START ;ACC= FLASH LENGTH +1
* SUB #1 ;ACC -= 1 FLASH LENGTH
SACL RPT_N ;SAVE FOR REPEAT COUNT
SPLK #1,TEMP ;MPY FACTOR FOR CHECKSUM
MPYK #0 ;PREG=0
LACL #0 ;ACC=0
CMPR 3
BCND OverFL0,TC
RPT RPT_N ;FOR I=0;I<N;++
MAC #FLST0,TEMP ;CHECKSUM MEMORY
B OverFL1
LBL OverFL0
nop
RPT RPT_N ;FOR I=0;I<N;++
MAC #FLST1,TEMP ;CHECKSUM MEMORY
LBL OverFL1
APAC ; LAST SUM
SACL FCSL ;SAVE LO CHECKSUM
SACH FCSH ;SAVE HI CHECKSUM
*
* EXECUTE SLOW CHECKSUM
*
LAR AR1,FL_START ;SET START ADRS
LAR AR0,FL_END ;SET END ADRS
MAR *,AR0
MAR *+,AR1
LACL FL_END ;ACC=>END OF ARRAY + 1
ADD #1
*
LBL SLOOP
SUB #1 ;ACC=>NEXT WORD
SACL FPTR ;SAVE POINTER
TBLR TEMP ;DUMMY READ OF FLASH DATA
TBLR TEMP ;SLOW READ OF FLASH DATA
LACC SCSH,16 ;ACCH=SLOW CHECKSUM HI
ADDS SCSL ;ACC = SLOW CHECKSUM
ADD TEMP ;ACC += NEXT FLASH WORD
SACL SCSL ;SAVE SLOW CHECKSUM LO
SACH SCSH ;SAVE SLOW CHECKSUM HI
LACL FPTR ;ACC=>CURRENT WORD
*
MAR *+ ;AR1=+1
CMPR 3 ;IF AR1 != AR0
BCND SLOOP,TC ;THEN CONTINUE LOOP
* ; ELSE DONE SLOW CHECKSUM
*
* EXECUTE XOR CHECKSUM
*
SPLK #XORMASK,XOR ;initialize XOR
LAR AR1,FL_START ;SET START ADRS
LACL FL_END ;ACC=>END OF ARRAY + 1
ADD #1
*
LBL XLOOP
SUB #1 ;ACC=>NEXT WORD
SACL FPTR ;SAVE POINTER
XOR XOR ;SWITCH TO XOR PATTERN
TBLR TEMP ;DUMMY READ OF FLASH DATA
XOR XOR ;RESTORE ADRS TO CURRENT WORD
TBLR TEMP ;SLOW READ OF FLASH DATA
LACC XCSH,16 ;ACCH=SLOW CHECKSUM HI
ADDS XCSL ;ACC = SLOW CHECKSUM
ADD TEMP ;ACC += NEXT FLASH WORD
SACL XCSL ;SAVE SLOW CHECKSUM LO
SACH XCSH ;SAVE SLOW CHECKSUM HI
LACL FPTR ;ACC=>CURRENT WORD
*
MAR *+ ;AR1=+1
CMPR 3 ;IF AR1 != AR0
BCND XLOOP,TC ;THEN CONTINUE LOOP
* ; ELSE DONE SLOW CHECKSUM
*
* COMPARE CHECKSUMS
*
MAR *,AR1 ;ARP=>AR1
.if CS==0
LAR AR0,FCSH ;AR0=MASTER CHECKSUM
.else
LAR AR0,CSH ;AR0=MASTER CHECKSUM
.endif
LAR AR1,FCSH ;AR1=FAST CHECKSUM HI
CMPR 3 ;IF AR1 != AR0
BCND CS_ERROR,TC ; THEN TAKE ERROR TRAP
LAR AR1,SCSH ;AR1=FAST CHECKSUM HI
CMPR 3 ;IF AR1 != AR0
BCND CS_ERROR,TC ; THEN TAKE ERROR TRAP
LAR AR1,XCSH ;AR1=FAST CHECKSUM HI
CMPR 3 ;IF AR1 != AR0
BCND CS_ERROR,TC ; THEN TAKE ERROR TRAP
.if CS==0
LAR AR0,FCSL ;AR0=MASTER CHECKSUM
.else
LAR AR0,CSL ;AR0=MASTER CHECKSUM
.endif
LAR AR1,FCSL ;AR1=FAST CHECKSUM LO
CMPR 3 ;IF AR1 != AR0
BCND CS_ERROR,TC ; THEN TAKE ERROR TRAP
LAR AR1,SCSL ;AR1=FAST CHECKSUM LO
CMPR 3 ;IF AR1 != AR0
BCND CS_ERROR,TC ; THEN TAKE ERROR TRAP
LAR AR1,XCSL ;AR1=FAST CHECKSUM LO
CMPR 3 ;IF AR1 != AR0
BCND CS_ERROR,TC ; THEN TAKE ERROR TRAP
*
LACL #0 ;NO ERRORS
RET ;RETURN TO CALLING SEQUENCE
*
LBL CS_ERROR
LACL #0Ch ;CHECKSUM FAILS
RET ;RETURN TO CALLING SEQUENCE
*
.end
*************************************************************
** Delay And Access Mode Subroutines **
* **
* TMS320F2XX Flash Utilities. **
* Revision: 2.0, 9/10/97 **
* Revision: 2.1, 1/31/98 **
* **
* Filename: sutils20.asm **
* Modified for F2xx : Sam Saba 12/24/96 **
* Changes20: Changed DELAY parameter passing to use AR6 **
* instead of a RAM location. **
* Changes21: Added conditional assembly statements to REGS **
* and ARRAY subroutines for F206 versus F24X. **
* **
* **
* Called by: These utilites are used by CLEAR,ERASE, **
* PROGRAM algorithms written for F2xx devices. **
* Function : DELAY - Delay loop specified by AR6. **
* REGS - Clears MODE bit of F_ACCESS0/1 to **
* access flash module control registers.**
* ARRAY - Sets MODE bit of F_ACCESS0/1 to access**
* the flash array. **
*************************************************************
.include "svar20.h"
.def DELAY,REGS,ARRAY
F24X .set 0
.sect "DLY"
*************************************
*Delays as follows: *
* LAR AR6,#N 2 Cycles *
* CALL DELAY 4 Cycles *
* RPT #DLOOP 2*(N+1) Cycles *
* NOP DLOOP*(N+1) Cycles *
* BANZ DLY_LP 4*N+2 Cycles *
* RET 4 Cycles *
* ------------------------ *
* = DLOOP(N+1)+6*N+14 Cycles *
* Set N and DLOOP appropriately to *
* get desired delay. *
*************************************
DELAY ;AR6 = OUTER LOOP COUNT
DLY_LP RPT #DLOOP ;APPROX 5US DELAY
NOP
BANZ DLY_LP,*- ;LOOP UNTIL DONE
RET ;RETURN TO CALLING SEQUENCE
.page
**************************************************
* REGS - Clears MODE bit of F_ACCESS0/1 to **
* access flash module control registers.**
**************************************************
.sect "REG"
REGS
SPLK #0000h,SPAD2
***********The next instruction is for F240 only,*************
.if F24X != 0 ;Assemble for F24X only.
OUT SPAD2,F24X_ACCS ;Enable F24X flash reg mode.
;SPAD1 is dummy value.
.endif
**************************************************************
.if F24X = 0 ;Assemble for F206 only.
LACC FL_ST
SUB #4000h
BCND reg1, geq ;if address>= 4000h,set
;set reg mode for flash1 array
OUT SPAD2,F_ACCESS0 ;Change mode of flash0.
RET
reg1 OUT SPAD2,F_ACCESS1 ;Change mode of flash1.
.endif
RET ;RETURN TO CALLING SEQUENCE
.page
**************************************************
* ARRAY - Sets MODE bit of F_ACCESS0/1 to access**
* the flash array. **
**************************************************
.sect "ARY"
ARRAY
SPLK #0001h,SPAD2
***********The next instruction is for F240 only,*************
.if F24X != 0 ;Assemble for F24X only.
IN SPAD1,F24X_ACCS ;Enable F24X flash array mode.
;SPAD1 is dummy value.
.endif
**************************************************************
.if F24X = 0 ;Assemble for F206 only.
LACC FL_ST
SUB #4000h
BCND ary1, geq ;if address>= 4000h,set
;set reg mode for flash1 array
OUT SPAD2,F_ACCESS0 ;Change mode of flash0.
RET
ary1 OUT SPAD2,F_ACCESS1 ;Change mode of flash1.
.endif
RET ;RETURN TO CALLING SEQUENCE
.end
.MAP文件如下,看上去没有超过0100h的范围,我是第一次使用ccs,还请多指点。
******************************************************************************
TMS320C24xx COFF Linker Version 7.04
******************************************************************************
>> Linked Wed May 11 14:39:05 2016
OUTPUT FILE NAME: <FL_RD.out>
ENTRY POINT SYMBOL: "START" address: 00000142
MEMORY CONFIGURATION
name origin length used attributes fill
-------- -------- --------- -------- ---------- --------
PAGE 0: TB0 00000000 0000000f0 000000e9 RWIX
PSA 000000f0 00000000f 0000000d RWIX
FLASH0 00000100 000004f00 000000ad RWIX
FLASH1 00005000 000005000 00000000 RWIX
B0 0000fe00 000000100 00000000 RWIX
PAGE 1: RAMB2 00000060 000000020 00000000 RWIX
RAMB0 00000200 000000100 00000000 RWIX
RAMB1 00000300 000000100 00000000 RWIX
FLASH2 00001000 000001000 00000000 RWIX
SECTION ALLOCATION MAP
output attributes/
section page origin length input sections
-------- ---- ---------- ---------- ----------------
.text 1 00000000 00000000 UNINITIALIZED
00000000 00000000 C2XX_BRX.obj (.text)
00000000 00000000 TRIPLE_RD.obj (.text)
00000000 00000000 SUTILS20.obj (.text)
PAGE1 1 00000000 00000000 UNINITIALIZED
.bss 1 00000060 00000000 UNINITIALIZED
00000060 00000000 C2XX_BRX.obj (.bss)
00000060 00000000 TRIPLE_RD.obj (.bss)
00000060 00000000 SUTILS20.obj (.bss)
PAGE1 1 00000000 00000000 UNINITIALIZED
.data 1 00000000 00000000 UNINITIALIZED
00000000 00000000 C2XX_BRX.obj (.data)
00000000 00000000 TRIPLE_RD.obj (.data)
00000000 00000000 SUTILS20.obj (.data)
PRG_parm 0 00000000 0000000c
00000000 0000000c C2XX_BRX.obj (PRG_parm)
PRG_data 0 0000000c 000000c8
0000000c 000000c8 C2XX_BRX.obj (PRG_data)
ary_var 0 000000d4 00000010
000000d4 00000010 C2XX_BRX.obj (ary_var)
PRG_text 0 00000100 00000035
00000100 00000035 C2XX_BRX.obj (PRG_text)
DLY 0 000000e4 00000005
000000e4 00000005 SUTILS20.obj (DLY)
REG 0 000000f0 0000000d
000000f0 0000000d SUTILS20.obj (REG)
ARY 0 00000135 0000000d
00000135 0000000d SUTILS20.obj (ARY)
FL_RD 0 00000142 0000006b
00000142 0000006b TRIPLE_RD.obj (FL_RD)
GLOBAL SYMBOLS
address name address name
-------- ---- -------- ----
00000060 .bss 00000000 PARMS
00000000 .data 00000000 .text
00000000 .text 00000000 PRG_bufaddr
00000135 ARRAY 00000000 etext
000000e4 DELAY 00000000 edata
00000142 FL_RD 00000000 .data
00000000 PARMS 00000001 PRG_bufsize
00000000 PRG_bufaddr 00000002 PRG_devsize
00000001 PRG_bufsize 00000003 PRG_options
00000002 PRG_devsize 00000004 PRG_paddr
00000126 PRG_erase 00000005 PRG_page
00000100 PRG_init 00000006 PRG_length
00000006 PRG_length 00000007 PRG_status
00000003 PRG_options 00000009 PROTECT
00000004 PRG_paddr 0000000a SEG_ST
00000005 PRG_page 0000000b SEG_END
00000105 PRG_program 00000060 end
00000007 PRG_status 00000060 .bss
00000130 PRG_stop 000000e4 DELAY
0000012b PRG_verify 000000f0 REGS
00000009 PROTECT 00000100 PRG_init
000000f0 REGS 00000105 PRG_program
0000000b SEG_END 00000126 PRG_erase
0000000a SEG_ST 0000012b PRG_verify
00000142 START 00000130 PRG_stop
00000142 _FL_RD 00000135 ARRAY
UNDEFED _c_int0 00000142 FL_RD
ffffffff cinit 00000142 START
00000000 edata 00000142 _FL_RD
00000060 end ffffffff pinit
00000000 etext ffffffff cinit
ffffffff pinit UNDEFED _c_int0
[32 symbols]
下边这几段代码的obj加起来已经超过0xF0了,所以你需要增大B0的长度。
PRG_parm 0 00000000 0000000c
00000000 0000000c C2XX_BRX.obj (PRG_parm)
PRG_data 0 0000000c 000000c8
0000000c 000000c8 C2XX_BRX.obj (PRG_data)
ary_var 0 000000d4 00000010
000000d4 00000010 C2XX_BRX.obj (ary_var)
PRG_text 0 00000100 00000035
00000100 00000035 C2XX_BRX.obj (PRG_text)
DLY 0 000000e4 00000005
000000e4 00000005 SUTILS20.obj (DLY)
REG 0 000000f0 0000000d
000000f0 0000000d SUTILS20.obj (REG)
ARY 0 00000135 0000000d
00000135 0000000d SUTILS20.obj (ARY)
FL_RD 0 00000142 0000006b
00000142 0000006b TRIPLE_RD.obj (FL_RD)
您好:
我是这将b0修改为内部saram,SARAM 的大小为4K ,我设定了1K的长度,但是编译后,还是看不到数据分配。
B0: origin = 08000h, length = 0400h
/* F206 TRIPLE READ */
-e START
-m FL_RD.map
-o FL_RD.out
MEMORY
{
PAGE 0 : TB0: origin = 0h, length = 0F0h
PSA: origin = 0F0h, length = 0Fh
FLASH0: origin = 0100h, length = 04F00h
FLASH1: origin = 05000h, length = 03000h
PAGE 1 : RAMB2: origin = 0060h, length = 0020h
RAMB0: origin = 0200h, length = 0100h
RAMB1: origin = 0300h, length = 0100h
FLASH2: origin = 01000h, length = 01000h
B0: origin = 08000h, length = 0400h
}
SECTIONS
{
.text > B0 PAGE1
.bss > RAMB2 PAGE1
}
您好,修改为page 0后,
/* F206 TRIPLE READ */
-e START
-m FL_RD.map
-o FL_RD.out
MEMORY
{
PAGE 0 : TB0: origin = 0h, length = 0F0h
PSA: origin = 0F0h, length = 0Fh
FLASH0: origin = 0100h, length = 04F00h
FLASH1: origin = 05000h, length = 03000h
B0: origin = 08000h, length = 0400h
PAGE 1 : RAMB2: origin = 0060h, length = 0020h
RAMB0: origin = 0200h, length = 0100h
RAMB1: origin = 0300h, length = 0100h
FLASH2: origin = 01000h, length = 01000h
}
SECTIONS
{
.text > B0 PAGE0
.bss > RAMB2 PAGE1
}
报错如下:
>> cannot allocate .text in B0 (page 1)
>> warning: entry point other than _c_int0 specified
>> errors in input - FL_RD.out not built
如果修改为:如下,可以编译生成.out文件,但这个文件不能load 到芯片上。
/* F206 TRIPLE READ */
-e START
-m FL_RD.map
-o FL_RD.out
MEMORY
{
PAGE 0 : TB0: origin = 0h, length = 0F0h
PSA: origin = 0F0h, length = 0Fh
FLASH0: origin = 0100h, length = 04F00h
FLASH1: origin = 05000h, length = 03000h
PAGE 1 : RAMB2: origin = 0060h, length = 0020h
RAMB0: origin = 0200h, length = 0100h
RAMB1: origin = 0300h, length = 0100h
FLASH2: origin = 01000h, length = 01000h
B0: origin = 08000h, length = 0400h
}
SECTIONS
{
.text > B0 PAGE1
.bss > RAMB2 PAGE1
}