TI工程你好:
我的DSP28335程序运行一段时间进入了ILLEGAL_ISR ,查找了很久没有找到原因。
(1)进入ILLEGAL_ISR的原因有哪一些?
(2)在原有程序增加点灯的代码,程序就不会进入ILLEGAL_ISR 了,增加点灯的代码影响了什么?
(3)在线仿真进入ILLEGAL_ISR后,如何定位到哪一行代码出问题?(CPU寄存器的值可以知道)
CPU寄存器的值如下:
ACC | 0 | XAR2 | 0000C39E | XAR7 | 0000C3DE | DP | 309 |
P | 0 | XAR3 | 0000C3A0 | PC | 33BD4D | SP | 043C |
XT | 0000C35E | XAR4 | 0000C35E | RPC | 33A7D8 | IER | 985 |
XAR0 | 0000C41E | XAR5 | 0000C31E | ST0 | 00D0 | IFR | 804 |
XAR1 | 0000C33E | XAR6 | 0000C3BE | ST1 | CA1B | DBGIER | 0 |
Seven Han:您可以参考帖子:e2echina.ti.com/…/12826
如果有问题可以继续讨论。
TI工程你好:
我的DSP28335程序运行一段时间进入了ILLEGAL_ISR ,查找了很久没有找到原因。
(1)进入ILLEGAL_ISR的原因有哪一些?
(2)在原有程序增加点灯的代码,程序就不会进入ILLEGAL_ISR 了,增加点灯的代码影响了什么?
(3)在线仿真进入ILLEGAL_ISR后,如何定位到哪一行代码出问题?(CPU寄存器的值可以知道)
CPU寄存器的值如下:
ACC | 0 | XAR2 | 0000C39E | XAR7 | 0000C3DE | DP | 309 |
P | 0 | XAR3 | 0000C3A0 | PC | 33BD4D | SP | 043C |
XT | 0000C35E | XAR4 | 0000C35E | RPC | 33A7D8 | IER | 985 |
XAR0 | 0000C41E | XAR5 | 0000C31E | ST0 | 00D0 | IFR | 804 |
XAR1 | 0000C33E | XAR6 | 0000C3BE | ST1 | CA1B | DBGIER | 0 |
user4317717:
回复 Seven Han:
感谢大神的回复:我的问题比较复杂:(FLASH中运行,版本CC3.3,win7 64位)
(1)堆栈溢出方便,我把RAM0和RAM1合并当做.stack使用还是跳到ILLEGAL_ISR中,应该不是堆栈不够。
(2)之前的版本都能正常运行,增加了一段温度采集代码后才出现跳到ILLEGAL_ISR,温度采集代码在程序中没有运行。增加简单点灯也打破某种平衡,程序就不会进入ILLEGAL_ISR 了,增加点灯的代码影响了什么?
(3)你帮我看看CMD是否有问题?(数据和程序空间我在使用时有互换)
具体如下:
MEMORY
{
PAGE 0:/* Program Memory *//* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE1 for data allocation */
ZONE0: origin = 0x004000, length = 0x001000/* XINTF zone 0 */RAML0: origin = 0x008000, length = 0x002000/* on-chip RAM block L0 */RAML1: origin = 0x00A000, length = 0x001000/* on-chip RAM block L1 */RAML2: origin = 0x00B000, length = 0x001000/* on-chip RAM block L2 *///RAML3: origin = 0x00B000, length = 0x001000/* on-chip RAM block L3 */ZONE6: origin = 0x0100000, length = 0x100000/* XINTF zone 6 */ ZONE7A: origin = 0x0200000, length = 0x00FC00/* XINTF zone 7 – program space */ FLASHH: origin = 0x300000, length = 0x008000/* on-chip FLASH */FLASHG: origin = 0x308000, length = 0x008000/* on-chip FLASH */FLASHF: origin = 0x310000, length = 0x008000/* on-chip FLASH */FLASHE: origin = 0x318000, length = 0x008000/* on-chip FLASH */FLASHD: origin = 0x320000, length = 0x008000/* on-chip FLASH */FLASHC: origin = 0x328000, length = 0x008000/* on-chip FLASH */FLASHB: origin = 0x330000, length = 0x008000/* on-chip FLASH */FLASHA: origin = 0x338000, length = 0x007F80/* on-chip FLASH */CSM_RSVD: origin = 0x33FF80, length = 0x000076/* Part of FLASHA.Program with all 0x0000 when CSM is in use. */BEGIN: origin = 0x33FFF6, length = 0x000002/* Part of FLASHA.Used for "boot to Flash" bootloader mode. */CSM_PWL: origin = 0x33FFF8, length = 0x000008/* Part of FLASHA.CSM password locations in FLASHA */OTP: origin = 0x380400, length = 0x000400/* on-chip OTP */ADC_CAL: origin = 0x380080, length = 0x000009/* ADC_cal function in Reserved memory */IQTABLES: origin = 0x3FE000, length = 0x000b50/* IQ Math Tables in Boot ROM */IQTABLES2: origin = 0x3FEB50, length = 0x00008c/* IQ Math Tables in Boot ROM */FPUTABLES: origin = 0x3FEBDC, length = 0x0006A0/* FPU Tables in Boot ROM */ROM: origin = 0x3FF27C, length = 0x000D44/* Boot ROM */RESET: origin = 0x3FFFC0, length = 0x000002/* part of boot ROM*/VECTORS: origin = 0x3FFFC2, length = 0x00003E/* part of boot ROM*/
PAGE 1 :/* Data Memory *//* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE0 for program allocation *//* Registers remain on PAGE1*/BOOT_RSVD: origin = 0x000000, length = 0x000050/* Part of M0, BOOT rom will use this for stack */RAMM0: origin = 0x000050, length = 0x0003B0/* on-chip RAM block M0 */RAMM1: origin = 0x000400, length = 0x000400/* on-chip RAM block M1 *//*RAML4: origin = 0x00C000, length = 0x001000*//* on-chip RAM block L1 */RAML3L4: origin = 0x00B000, length = 0x002000/* on-chip RAM block L1 */ /*mohq Combining L3L4*/RAML5: origin = 0x00D000, length = 0x001000/* on-chip RAM block L1 */RAML6: origin = 0x00E000, length = 0x001000/* on-chip RAM block L1 */RAML7: origin = 0x00F000, length = 0x001000/* on-chip RAM block L1 */ZONE7B: origin = 0x20FC00, length = 0x000400/* XINTF zone 7 – data space *///FLASHB: origin = 0x330000, length = 0x008000/* on-chip FLASH */
}
/* Allocate sections to memory blocks.Note:codestart user defined section in DSP28_CodeStartBranch.asm used to redirect code execution when booting to flashramfuncsuser defined section to store functions that will be copied from Flash into RAM
*/
SECTIONS
{/* Allocate program areas: */.USER_CODG: > FLASHGPAGE = 0.cinit: > FLASHAPAGE = 0.pinit: > FLASHA,PAGE = 0.text: > FLASHAPAGE = 0codestart: > BEGINPAGE = 0ramfuncs: LOAD = FLASHD, RUN = RAML0, LOAD_START(_RamfuncsLoadStart),LOAD_END(_RamfuncsLoadEnd),RUN_START(_RamfuncsRunStart),PAGE = 0
csmpasswds: > CSM_PWLPAGE = 0csm_rsvd: > CSM_RSVDPAGE = 0/* Allocate uninitalized data sections: */.stack: > RAMM1PAGE = 1.ebss: > RAML3L4PAGE = 1.esysmem: > RAMM1PAGE = 1
/* Initalized sections go in Flash *//* For SDFlash to program these, they must be allocated to page 0 */.econst: > FLASHAPAGE = 0.switch: > FLASHAPAGE = 0
/* Allocate IQ math areas: */IQmath: > FLASHCPAGE = 0/* Math Code */IQmathTables: > IQTABLES,PAGE = 0, TYPE = NOLOAD /* Uncomment the section below if calling the IQNexp() or IQexp()functions from the IQMath.lib library in order to utilize the relevant IQ Math table in Boot ROM (This saves space and Boot ROM is 1 wait-state). If this section is not uncommented, IQmathTables2will be loaded into other memory (SARAM, Flash, etc.) and will takeup space, but 0 wait-state is possible.*//*IQmathTables2: > IQTABLES2, PAGE = 0, TYPE = NOLOAD {IQmath.lib<IQNexpTable.obj> (IQmathTablesRam)}*/FPUmathTables: > FPUTABLES, PAGE = 0, TYPE = NOLOAD /* Allocate DMA-accessible RAM sections: */DMARAML4: > RAML3L4,PAGE = 1DMARAML5: > RAML5,PAGE = 1DMARAML6: > RAML6,PAGE = 1DMARAML7: > RAML7,PAGE = 1/* Allocate 0x400 of XINTF Zone 7 to storing data */ZONE7DATA: > ZONE7B,PAGE = 1
/* .reset is a standard section used by the compiler.It contains the */ /* the address of the start of _c_int00 for C Code./*/* When using the boot ROM this section and the CPU vector *//* table is not needed.Thus the default type is set here to*//* DSECT*/ .reset: > RESET,PAGE = 0, TYPE = DSECTvectors: > VECTORSPAGE = 0, TYPE = DSECT/* Allocate ADC_cal function (pre-programmed by factory into TI reserved memory) */.adc_cal: load = ADC_CAL,PAGE = 0, TYPE = NOLOAD
}
TI工程你好:
我的DSP28335程序运行一段时间进入了ILLEGAL_ISR ,查找了很久没有找到原因。
(1)进入ILLEGAL_ISR的原因有哪一些?
(2)在原有程序增加点灯的代码,程序就不会进入ILLEGAL_ISR 了,增加点灯的代码影响了什么?
(3)在线仿真进入ILLEGAL_ISR后,如何定位到哪一行代码出问题?(CPU寄存器的值可以知道)
CPU寄存器的值如下:
ACC | 0 | XAR2 | 0000C39E | XAR7 | 0000C3DE | DP | 309 |
P | 0 | XAR3 | 0000C3A0 | PC | 33BD4D | SP | 043C |
XT | 0000C35E | XAR4 | 0000C35E | RPC | 33A7D8 | IER | 985 |
XAR0 | 0000C41E | XAR5 | 0000C31E | ST0 | 00D0 | IFR | 804 |
XAR1 | 0000C33E | XAR6 | 0000C3BE | ST1 | CA1B | DBGIER | 0 |
Seven Han:
回复 user4317717:
检查下您在使用温度采集时是够调用的DELAY_US()函数,该函数需要运行在RAM.
TI工程你好:
我的DSP28335程序运行一段时间进入了ILLEGAL_ISR ,查找了很久没有找到原因。
(1)进入ILLEGAL_ISR的原因有哪一些?
(2)在原有程序增加点灯的代码,程序就不会进入ILLEGAL_ISR 了,增加点灯的代码影响了什么?
(3)在线仿真进入ILLEGAL_ISR后,如何定位到哪一行代码出问题?(CPU寄存器的值可以知道)
CPU寄存器的值如下:
ACC | 0 | XAR2 | 0000C39E | XAR7 | 0000C3DE | DP | 309 |
P | 0 | XAR3 | 0000C3A0 | PC | 33BD4D | SP | 043C |
XT | 0000C35E | XAR4 | 0000C35E | RPC | 33A7D8 | IER | 985 |
XAR0 | 0000C41E | XAR5 | 0000C31E | ST0 | 00D0 | IFR | 804 |
XAR1 | 0000C33E | XAR6 | 0000C3BE | ST1 | CA1B | DBGIER | 0 |
user4317717:
回复 Seven Han:
感谢回复,我的温度采集函数没有使用DELAY_US(),程序查表法测算温度,用了浮点变量的简单加减乘除。
TI工程你好:
我的DSP28335程序运行一段时间进入了ILLEGAL_ISR ,查找了很久没有找到原因。
(1)进入ILLEGAL_ISR的原因有哪一些?
(2)在原有程序增加点灯的代码,程序就不会进入ILLEGAL_ISR 了,增加点灯的代码影响了什么?
(3)在线仿真进入ILLEGAL_ISR后,如何定位到哪一行代码出问题?(CPU寄存器的值可以知道)
CPU寄存器的值如下:
ACC | 0 | XAR2 | 0000C39E | XAR7 | 0000C3DE | DP | 309 |
P | 0 | XAR3 | 0000C3A0 | PC | 33BD4D | SP | 043C |
XT | 0000C35E | XAR4 | 0000C35E | RPC | 33A7D8 | IER | 985 |
XAR0 | 0000C41E | XAR5 | 0000C31E | ST0 | 00D0 | IFR | 804 |
XAR1 | 0000C33E | XAR6 | 0000C3BE | ST1 | CA1B | DBGIER | 0 |
Young Hu:
回复 user4317717:
你可以在仿真模式下,看看仿真器的窗口中,Illegal_ISR从什么地方进去
TI工程你好:
我的DSP28335程序运行一段时间进入了ILLEGAL_ISR ,查找了很久没有找到原因。
(1)进入ILLEGAL_ISR的原因有哪一些?
(2)在原有程序增加点灯的代码,程序就不会进入ILLEGAL_ISR 了,增加点灯的代码影响了什么?
(3)在线仿真进入ILLEGAL_ISR后,如何定位到哪一行代码出问题?(CPU寄存器的值可以知道)
CPU寄存器的值如下:
ACC | 0 | XAR2 | 0000C39E | XAR7 | 0000C3DE | DP | 309 |
P | 0 | XAR3 | 0000C3A0 | PC | 33BD4D | SP | 043C |
XT | 0000C35E | XAR4 | 0000C35E | RPC | 33A7D8 | IER | 985 |
XAR0 | 0000C41E | XAR5 | 0000C31E | ST0 | 00D0 | IFR | 804 |
XAR1 | 0000C33E | XAR6 | 0000C3BE | ST1 | CA1B | DBGIER | 0 |
user4317717:
回复 Young Hu:
你好,能否指导下怎么看ILLEGAL_ISR从什么地方进去的?看CPU寄存器吗?