EDA365电子论坛网

标题: DSP 烧写程序 进入非法中断 [打印本页]

作者: CLBuu    时间: 2022-1-10 10:36
标题: DSP 烧写程序 进入非法中断
编写dsp程序时,由于代码较长,超过片内RAM空间,所以改为烧写flash
; T& J& D: U9 N  c) _     开始烧写代码,运行程序,结果均正常;然后在此基础上添加一段代码(代码内容类似,没有错误),结果运行程序后,程序跳入非法中断 interrupt void ILLEGAL_ISR(void),不知为何。仅仅是添加一段代码,结果出现非法中断,百思不得其解,请高手指点一下。多谢多谢。
- L4 L' p" k4 b      程序中cmd文件如下:; S3 H8 v9 s8 \
MEMORY5 j( ~/ y8 v( G7 N
{7 ^; y: x# ~8 U% C# F) w) l# ?
PAGE 0:    /* Program Memory */* y3 b" p7 n$ _3 @
           /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE1 for data allocation */
2 p# }: \9 L3 z# A+ _) C
5 ~: d: H# @* a! }: ~8 U# _; Q   ZONE0       : origin = 0x004000, length = 0x001000     /* XINTF zone 0 */. b  }3 J7 Z6 p5 w/ j. i$ e5 w
   RAML0       : origin = 0x008000, length = 0x005000     /* on-chip RAM block L0 */
/ V) r$ d# C% L/ ~& A   /*RAML1       : origin = 0x009000, length = 0x001000*/     /* on-chip RAM block L1 */
& m3 B8 i) D! p( K7 z) k8 `; |0 t8 d   /*RAML2       : origin = 0x00A000, length = 0x001000*/     /* on-chip RAM block L2 */
/ [" {& f; i0 d: T  y. m8 {5 P   /*RAML3       : origin = 0x00B000, length = 0x001000*/     /* on-chip RAM block L3 */2 |& N  G# I0 V. l
   ZONE6       : origin = 0x0100000, length = 0x100000    /* XINTF zone 6 */1 }# \; E9 M+ I
   ZONE7A      : origin = 0x0200000, length = 0x00FC00    /* XINTF zone 7 - program space */
- C) q  w" X) b4 U7 f& T) s0 u7 t   FLASHH      : origin = 0x300000, length = 0x008000     /* on-chip FLASH */' Y( ?, _& p2 j' v' ]& d4 r: M
   /*FLASHG      : origin = 0x308000, length = 0x008000*/     /* on-chip FLASH */
5 c# ~% T9 h0 [( L   /*FLASHF      : origin = 0x310000, length = 0x008000*/     /* on-chip FLASH */  ~. A: I7 v2 G. _3 C6 P! ?
   /*FLASHE      : origin = 0x318000, length = 0x008000*/     /* on-chip FLASH */) _) _; V& C% E/ E2 |% b0 S
   /*FLASHD      : origin = 0x320000, length = 0x008000*/     /* on-chip FLASH */' C" }6 I* O& \
   /*FLASHC      : origin = 0x328000, length = 0x008000*/     /* on-chip FLASH */, X4 f$ M# `+ Z- j: I
   FLASHA      : origin = 0x308000, length = 0x012000     /* on-chip FLASH */
! T  [% ?, J( s9 Q   CSM_RSVD    : origin = 0x33fF80, length = 0x000076     /* Part of FLASHA.  Program with all 0x0000 when CSM is in use. */
8 t0 S. m* ~* }$ L. H2 z   BEGIN       : origin = 0x33FFF6, length = 0x000002     /* Part of FLASHA.  Used for "boot to Flash" bootloader mode. */
! }4 Z! @( K0 F' v8 A   CSM_PWL     : origin = 0x33FFF8, length = 0x000008     /* Part of FLASHA.  CSM password locations in FLASHA */
2 m, ]$ J* O( U& u. k   OTP         : origin = 0x380400, length = 0x000400     /* on-chip OTP */
7 j  p6 V( t6 D$ I7 w   ADC_CAL     : origin = 0x380080, length = 0x000009     /* ADC_cal function in Reserved memory */7 Q: Z1 w3 M2 f
  K$ g& p  p% j. }3 n
   IQTABLES    : origin = 0x3FE000, length = 0x000b50     /* IQ Math Tables in Boot ROM */, U$ t7 h+ W) v
   IQTABLES2   : origin = 0x3FEB50, length = 0x00008c     /* IQ Math Tables in Boot ROM */  
! X7 ]1 k5 e/ c+ [" ^" l   FPUTABLES   : origin = 0x3FEBDC, length = 0x0006A0     /* FPU Tables in Boot ROM */$ N  J5 c# o8 o' [
   ROM         : origin = 0x3FF27C, length = 0x000D44     /* Boot ROM */        
% X6 P$ `8 \" l( w% T   RESET       : origin = 0x3FFFC0, length = 0x000002     /* part of boot ROM  */
( t3 m5 L' r# r1 ~6 v8 U, v! j   VECTORS     : origin = 0x3FFFC2, length = 0x00003E     /* part of boot ROM  */
2 R& }" _" x8 _+ ?' V$ v. k# Y( e. W5 J" Q( ~
PAGE 1 :   /* Data Memory */
. R$ L( b) U5 s+ D; M! W  r& @           /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE0 for program allocation */; o1 u! G4 [5 U: U+ h
           /* Registers remain on PAGE1                                                  */
6 E2 t7 h/ y8 K+ X9 p4 l
) {* L, {4 V! ^* q   BOOT_RSVD   : origin = 0x000000, length = 0x000050     /* Part of M0, BOOT rom will use this for stack */
# n: P$ ?# o  u9 O   RAMM0       : origin = 0x000050, length = 0x0003B0     /* on-chip RAM block M0 */# l0 Z# X9 K! f6 A5 z4 M
   RAMM1       : origin = 0x000400, length = 0x000400     /* on-chip RAM block M1 */. H: o, L" M9 i; y6 S- D
   /*RAML4       : origin = 0x00C000, length = 0x001000*/     /* on-chip RAM block L1 */, P$ E8 z) F3 h# a  {1 y
   RAML5       : origin = 0x00D000, length = 0x001000     /* on-chip RAM block L1 */. D8 p% x8 ]+ b
   RAML6       : origin = 0x00E000, length = 0x001000     /* on-chip RAM block L1 */( ~  W& O' h! c% H1 Q+ S! v
   RAML7       : origin = 0x00F000, length = 0x001000     /* on-chip RAM block L1 */, T, ]3 m& q: v5 U5 x$ Q
   ZONE7B      : origin = 0x20FC00, length = 0x000400     /* XINTF zone 7 - data space */
- {% A" \" `8 {' o* s- A   ZONE7A      : origin = 0x210000, length = 0x0100003 O, B1 m& J8 r& T& X& L
   /*FLASHB      : origin = 0x330000, length = 0x008000*/     /* on-chip FLASH */
) p% |9 B4 n: e& J}3 s0 W; ^5 i7 k) ?4 O

; p  c2 @) W/ H' {6 e- }+ X( W6 f/* Allocate sections to memory blocks.+ f! t3 N' N9 x
   Note:
; ?! ~0 P4 j: l, m% H         codestart user defined section in DSP28_CodeStartBranch.asm used to redirect code! A% Y# R3 V5 m4 a
                   execution when booting to flash
+ A2 _- J) t; z! r$ A         ramfuncs  user defined section to store functions that will be copied from Flash into RAM
& U8 ]. c+ F! g8 o( D*/. T1 Z8 R$ S& U* e
4 p5 L4 |( c) O( E
SECTIONS  N5 P& ~9 a4 j; K/ o
{
, A0 a' I7 G$ O5 ?9 ?
; j( ?8 t9 W# C" F: h$ Y   /* Allocate program areas: */
' I- b- V. s  h1 {$ b2 `- X  L' a   .cinit              : > FLASHA      PAGE = 0* I: m" I* [7 b+ y
   .pinit              : > FLASHA,     PAGE = 0
* L. h/ p# ~8 d2 j   .text               : > FLASHA      PAGE = 0
4 g3 x& l4 G$ N   codestart           : > BEGIN       PAGE = 0
7 f! R: c* C8 z) q) X   ramfuncs            : LOAD = FLASHA,4 K6 O+ I5 a+ A$ v8 A5 n% T
                         RUN = RAML0,! l+ g# ^/ s. F% y
                         LOAD_START(_RamfuncsLoadStart),. T2 M( x4 e$ u) a; W2 _+ r
                         LOAD_END(_RamfuncsLoadEnd),
, Q9 a+ _  q( G                         RUN_START(_RamfuncsRunStart),
& U; M" `9 F' F0 y" d                         PAGE = 00 q( M- i4 y( p! i
2 |( B2 e. c2 g' m: A" E
   csmpasswds          : > CSM_PWL     PAGE = 0  X! Z( D$ |, m, y4 a$ E, V
   csm_rsvd            : > CSM_RSVD    PAGE = 0$ U* y5 N! h1 }$ s
8 A+ w/ L! N  B7 k7 S* ^
   /* Allocate uninitalized data sections: */' ^* l3 F9 D( X
   .stack              : > RAMM1       PAGE = 1( R& G) w7 j! Q1 M7 r
   .ebss               : > RAML5       PAGE = 1
, Z/ _8 [  w  s   .esysmem            : > RAMM1       PAGE = 1
" p1 d! K6 ^# n0 j6 y3 P3 v# Z4 Z0 r: o
   /* Initalized sections go in Flash */9 F/ @; b( p0 R
   /* For SDFlash to program these, they must be allocated to page 0 */
) u2 i5 f0 M% j) g1 k: q   .econst             : > FLASHA      PAGE = 0
2 v+ P8 o' ^6 z. a+ @$ U2 I& n. e   .switch             : > FLASHA      PAGE = 0      
0 c+ d, j1 I3 P, Q5 G2 X  r1 b2 o
) [; [- M. a: K; }   /* Allocate IQ math areas: */# y0 Q$ f4 i: `( }2 H9 Z
   IQmath              : > FLASHA      PAGE = 0                  /* Math Code */) I, [( E3 k3 O3 a1 m+ F: _
   IQmathTables     : > IQTABLES,  PAGE = 0, TYPE = NOLOAD0 }% Z/ R2 Y. z: z7 ^" o$ l! O
   IQmathTables2    : > IQTABLES2, PAGE = 0, TYPE = NOLOAD% I$ m2 k5 p( H% X3 J7 y& z3 D
   FPUmathTables    : > FPUTABLES, PAGE = 0, TYPE = NOLOAD  y, k3 E6 G3 A

& V  P7 ?1 y' @1 F   /* Allocate DMA-accessible RAM sections: */7 r! U; t% W4 S6 q6 t
   DMARAML4         : > RAML5,     PAGE = 1
0 }) a- m. R/ c! p7 ?5 Y   DMARAML5         : > RAML5,     PAGE = 1
$ d; W2 S2 @0 f, }/ Q   DMARAML6         : > RAML6,     PAGE = 1
8 {0 K/ w* t9 p' W   DMARAML7         : > RAML7,     PAGE = 1
* }* N2 ~) e% p- Q, g
# M) g2 s! j6 k6 h5 p  w$ _9 O: O   /* Allocate 0x400 of XINTF Zone 7 to storing data */7 [0 G& n' {$ E. h$ c
   data                                : > ZONE7A,    PAGE = 1
9 C4 F' n  I3 Z" M   ZONE7DATA        : > ZONE7B,    PAGE = 1# L, V* ~, P0 K2 E1 y6 a. e5 a
7 w2 _$ P9 j  I
   /* .reset is a standard section used by the compiler.  It contains the */
& h- u5 X- o" M+ U   /* the address of the start of _c_int00 for C Code.   /*9 D0 s& C: o; I8 n
   /* When using the boot ROM this section and the CPU vector */: h- L1 B1 D/ t0 Q6 i0 Z0 T, T
   /* table is not needed.  Thus the default type is set here to  */; }" Q) ]; w( ?7 T$ `6 J8 L
   /* DSECT  */
% u- n0 M2 r1 G+ G   .reset              : > RESET,      PAGE = 0, TYPE = DSECT% ]! L: W1 M: `- N6 K" x
   vectors             : > VECTORS     PAGE = 0, TYPE = DSECT
3 x, l9 U3 X, Z+ r3 R: g
* w( Z0 y2 i7 B0 m. a5 i   /* Allocate ADC_cal function (pre-programmed by factory into TI reserved memory) */  c! x3 p  D& ?4 M% E2 @! b' ?
   .adc_cal     : load = ADC_CAL,   PAGE = 0, TYPE = NOLOAD
* \  {1 J7 T5 E  J$ t1 h
9 q1 J4 n+ |6 H}) }! _" d, N4 W" C( w: L

作者: faker12    时间: 2022-1-10 11:20
这个问题可以从这个思路走一下:  W! j/ o' V( D* q- j
(1)检查一下,新添加的代码是否在某个中断内不?原因是因为中断没有执行完,异常结束了。
# S. l5 s3 F$ J. m4 k(2)找问题,首先不找cmd文件的问题。/ f- B# ?: x* }7 L
我个人见解。
作者: guanshen    时间: 2022-1-10 13:11
是和程序的代码长度有关,或者是类似堆栈缓存空间不足
作者: xiananUZI    时间: 2022-1-10 13:32
如果方便,可以把你添加的代码和被添加的部分,粘出来,我看一下
作者: kiygb    时间: 2022-1-10 13:53
利用单步执行,看程序执行情况




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2