由于所设计的工程以后会取消外部RAM和NOR FLASH,所有的代码需要全部在内部RAM上跑,所以调试的时候就不好使用ZLG的工程模板,所以将其中一个target修改了一下;自己参照其他三个scf文件写了一个Mem_d.scf如下: ROM_LOAD 0x40000000 { ROM_EXEC 0x40000000 { Startup.o (vectors, +First) * (+RO) }
; RW code Offset 32K IRAM +0 { ;Startup.o (+RW,+ZI) ;os_cpu_a.o (+RW,+ZI) * (+RW,+ZI) }
; No ERAM
; HEAP Offset 32K + All RW and ZI area HEAP +0 UNINIT { heap.o (+ZI) } ; STACKS Offset 32K + All RW and ZI area + Heap area STACKS +0 UNINIT { stack.o (+ZI) }
} 同时也将MEMMAP设置成为0x02; 程序可以正常的加载,但是不知道跑着跑着就到了PrefetchAbort; 参考网上的资料,说如果碰到这种情况最好使用zlg设置好的PLL设置,由于我的板子上的晶振为24Mhz的,所以与ZLG的设置稍微不同,我是这样设置的: #define Fosc 24000000 //晶振频率,10MHz~25MHz,应当与实际一至 #define Fcclk (Fosc * 2) //系统频率,必须为Fosc的整数倍(1~32),且<=60MHZ 4 Fosc #define Fcco (Fcclk * 4) //CCO频率,必须为Fcclk的2、4、8、16倍,范围为156MHz~320MHz 16 Fosc #define Fpclk (Fcclk / 4) * 2 //VPB时钟频率,只能为(Fcclk / 4)的1 ~ 4倍1 Foscs
我觉得这样应该没有问题啊?有没有那位大哥大姐有过类似经验?共同探讨一下,(另外我的代码在DebugInExRAM或RelOUTChip下都是可以正常操作的,我想应该不是代码的问题)
|