您好,写了个简单测试程序,大端模式下
if(DNUM == 0){
while(1){
*(volatile int *)(0x80000000) = 0x12345678;
TSC_delay_ms(1000);
*(volatile int *)(0x80000000) = 0x87654321;
TSC_delay_ms(1000);
}
}
if(DNUM == 1){
while(1){
*(volatile int *)(0x80000010) = 0x12345678;
TSC_delay_ms(1000);
*(volatile int *)(0x80000010) = 0x87654321;
TSC_delay_ms(1000);
}
}
if(DNUM == 2){
while(1){
*(volatile int *)(0x80000020) = 0x12345678;
TSC_delay_ms(1000);
*(volatile int *)(0x80000020) = 0x87654321;
TSC_delay_ms(1000);
}
}
if(DNUM == 3){
while(1){
*(volatile int *)(0x80000030) = 0x12345678;
TSC_delay_ms(1000);
*(volatile int *)(0x80000030) = 0x87654321;
TSC_delay_ms(1000);
}
}
通过spi烧写进去,重上电连接仿真器,发现core1,core2,core3对应的地址上 数据 0x12345678和0x87654321交替刷新,说明从核启动正常。
然而core0对应地址也写入了 0x12345678或者是0x87654321。但是没有再刷新。说明core0在某处死了,或者core0没成功启动???在线调试没问题。
magic addr上 都有 入口地址,有点不同的是core0 magic addr 上的地址并非全局地址(如:core0: 0x00800000,core1:0x11800000,core2:0x12800000,core3:0x13800000)
生成启动镜像步骤是:
hex6x simple0.rmd
hex6x simple1.rmd
hex6x simple2.rmd
hex6x simple3.rmd
mergebtbl simple0.btbl simple1.btbl simple2.btbl simple3.btbl simple.btbl
.rmd 相比小端改为 -order M
保持大端数据格式生成.dat
单核是能启动的,多核只是多了mergebtbl.exe这个工具
mergebtbl.exe是论坛中提供小端例子的工具,可否在大端中使用。
谢谢
Allen35065:
既然core 1,2,3都启动了,那么core 0启动应该没问题,因为都是需要core 0来写magic address;
core 0不需要写magic address,本身就是从core 0启动的;
所以你生成的boot table是正确的;需要检查的是你的cmd文件里是否在core用了局部地址?(0x800000)或者程序有其它错误,你可以查看core 0的PC看挂起在什么地方。