ROM_LOAD1 0x00004000
这个运行区是我的应用程序,这里面的程序要改变,但我的main_user文件不会改变。生成的HEX文件为 ROM_EXEC1.hex
我通过改变ROM_LOAD1 0x00004000 文件内容。用ROM_LOAD 0x0中的程序升级ROM_LOAD1 0x00004000 区。
现在我改别ROM_LOAD1 中的其他文件(此时ROM_LOAD 0x0区的文件没有动),编译后ROM_EXEC1.hex和ROM_EXEC.hex都发生变化。这样就不能用用ROM_LOAD 0x0中的程序升级ROM_LOAD1 0x00004000 区。因为ROM_EXEC1.hex和ROM_EXEC.hex都发生变化。
请教:
1:为什么我没有改变ROM_LOAD 0x0的内容为何ROM_EXEC.hex的内容发生变化?2:如何实现任意改变ROM_LOAD1 0x00004000 区内容而ROM_LOAD 0x0内容不变:
附:
ROM_LOAD 0x0
{
ROM_EXEC 0x00000000 0x00004000
{
Startup.o (vectors, +First)
CFlash_Fix.o (+RO)
CIap.o(+RO)
CGPIOOUT_Fix.o (+RO)
CGPIOIN_Fix.o (+RO)
CGPIOINOUT_Fix.o (+RO)
CSMISPI_Fix.o(+Ro)
main.o(+RO)
}
}
ROM_LOAD1 0x00004000
{
ROM_EXEC1 +0 FIXED
{
main_user.o(+RO)
* (+RO)
}
IRAM 0x40000000
{
Startup.o (MyStacks)
* (+RW,+ZI)
}
HEAP +0 UNINIT
{
Startup.o (Heap)
}
STACKS 0x40008000 UNINIT
{
Startup.o (Stacks)
}
}
//main在ROM_LOAD 0x0区运行
int main(void)
{
for(INT8U i=0;i <20;i++)
{
Xms_Fix(100);
WatchDog();
}
UpProgram();
main_user();
}
//main_user 在ROM_LOAD1 0x00004000 区运行
int main_user (void)
{
//CDesPassword padeal;
// padeal.deskey(key,0);
// padeal.des(proc, temppwd);
for(INT8U i=0;i <20;i++)
{
Xms(100);
WatchDog_Task();
}
OSInit();
GUart0Sem = OSSemCreate(1);
GUart1Sem = OSSemCreate(1);
GSPISem = OSSemCreate(1);
GI2CSem = OSSemCreate(1); //(4)
OSTaskCreate (TaskWatchDog,(void *)0, &TaskWatchDogStk[TaskwatchDogStkSize-1], TaskWatchDogPro);
OSTaskCreate (Task9,(void *)0, &Task9Stk[Task9StkSize-1], Task9Pro);
OSTaskCreate (Task8,(void *)0, &Task8Stk[Task8StkSize-1], Task8Pro);
OSTaskCreate (TaskWorkModeLed,(void *)0, &TaskWorkModeLedStk [TaskWorkModeLedStkSize-1], TaskWorkModeLedPro); //(5)
OSTaskCreate (TaskIPOKLed,(void *)0, &TaskIPOKLedStk [TaskIPOKLedStkSize-1], TaskIPOKLedPro); //(5)
OSTaskCreate(TaskUart0,(void*)0,&Taskuart0Stk[Taskuart0StkSize-1],Taskuart0Pro );
OSTaskCreate(TaskUart1,(void*)0,&Taskuart1Stk[Taskuart1StkSize-1],Taskuart1Pro );
OSStart();
//(6)
return 0; //(7)
}