打印

IAP编译文件问题

[复制链接]
1934|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yanghuyue|  楼主 | 2007-7-19 13:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想用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)
}

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

23

帖子

0

粉丝