C6713B 程序烧到FLASH中,程序过大是在SDRAM中跑的,程序很小时是没有问题的,程序大一点就不行跑一会儿就死掉。
还有一个奇怪的问题就是SWITCH语句,SWITCH中语句过大会导致系统重启,不知道为什么?
上面的问题 在用仿真器跑时是没有问题的,烧写到FLASH运行就有问题。
会不会是我的CMD文件有问题呢?希望大家能帮忙分析分析。谢谢!
Jacob1:
你好,FLASH运行与仿真器调试还是有差别的。建议烧写完后,load symbole单步调试一下程序,看一下与仿真情况下有哪些不同。
kaiyu liu:
回复 Jacob1:
程序烧到FLASH中,启动后是将程序搬到SDRAM中运行的。(程序不是在FLASH中运行)
kaiyu liu:
回复 kaiyu liu:
这是我的CMD文件
-stack 0x1000
-heap 0x1000
-c
-x
MEMORY
{
INT: o = 00000000h l = 00000200h /*增加中断向量段*/
BOOTRAM: o = 00000200h l = 00000200h /*引导代码段*/
IRAM: o = 00000400h l = 0000FA00h /*应用程序运行地址*/
SDRAM: o = 80000000h l = 04000000h /*外部SDRAM地址这个没有用到*/
FLASH_INT: o = 0x90000000 l = 00000200h /*中断向量段在Flash中的位置*/
FLASH_BOOT: o = 0x90000200 l = 00000200h /*引导代码段在Flash中的位置*/
FLASH_REST: o = 0x90000400 l = 000F0000h /*应用程序在Flash中的位置*/
}
SECTIONS
{
.vectors : load = FLASH_INT, run = INT /*增加中断向量段的加载及运行地址定位*/
.boot_load : load = FLASH_BOOT, run = BOOTRAM/*BOOTRAM */
/* Initialized User Code Section */
.text : load = FLASH_REST, run = SDRAM/*IRAM */
/* .text: {} >IRAM | SDRAM*/
LOAD_START(_text_ld_start),
RUN_START(_text_rn_start),
SIZE(_text_size)
/* This is also a special initialized data section, which could stay
in ROM, however probably not desirable, due to Slow ROM access times.
const values never change, by definition. */
.cinit >FLASH_REST
/*
.const > IRAM
.stack > IRAM
.bss > IRAM
.data > IRAM
.far > IRAM
.switch > IRAM
.sysmem > IRAM
.cio > IRAM
*/
.csldata >SDRAM
.stack > SDRAM
.far > SDRAM
.tables > SDRAM
.data > SDRAM
.bss > SDRAM
.sysmem > SDRAM
.switch > SDRAM
.cio > SDRAM
.const > SDRAM
}
kaiyu liu:
回复 Jacob1:
load symbole单步调试,发现程序会死在 一个除法的语句上,但仿真器跑是没有任何问题的,能否帮忙分析分析下面有我的CMD文件。。