导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→IAP在线升级,最后一步有点问题,请教[yanghuyue]

 *第5731篇: IAP在线升级,最后一步有点问题,请教

  
楼 主:yanghuyue 2007年7月19日15:05
 IAP在线升级,最后一步有点问题,请教
我想用IAP在程序运行中升级程序
分散加载文件如下:
ROM_LOAD 0x0
   这个运行区中的文件是独立的。用于升级程序,只有在main文件中调用了main_user文件中的main_user涵数,这里面的文件是不会动的。生成的HEX文件为    ROM_EXEC.hex

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)
}


>>>>>>对该主题发表你的看法

本主题贴数1,分页: [第1页]


[上一篇主题]:单片机培训

[下一篇主题]:请问,哪款mcu是 有16k flash 在6元以下的