这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » IAP 关于IAP使用的若干疑问

共2条 1/1 1 跳转至

IAP 关于IAP使用的若干疑问

院士
2006-09-17 18:14:16     打赏
IAP 关于IAP使用的若干疑问



关键词: 关于     用的     若干     疑问    

院士
2006-12-22 22:43:00     打赏
2楼
问 我在IAP例子上如下修改为何不行:
void main(void)
{
uint32 i1;
uint32 *ramp;
uint32 *flashp;
IAP_Entry = (void(*)())IAP_ENTER_ADR;    // 初始化函数指针IAP_Entry
   flashp=(uint32*)0x0001c000;   //使用LPC2104 序号14的扇区
   ramp=(uint32*)0x40000200;
   for(i1=0;i1<8;i1++)
   {*ramp=i1;++ramp;}
   ReadParID();
   BootCodeID();
   
   SelSector(14,14);                          // 选择扇区14
   EraseSector(14,14);                        // 擦除扇区14
   BlankCHK(14,14) ;                          // 查空扇区14
   
   SelSector(14,14);  
  
   RamToFlash(0x0001c000,0x40000200,8); // 写数据到扇区14
   BlankCHK(14,14) ;
   Compare(0x0001c000,0x40000200,512);    // 比较数据
   while(1);
   return(0);
}
问题1:为何执行 RamToFlash(0x0001c000,0x40000200,8); 就死机
问题2: 这么写 RamToFlash(flashp,ramp,8); 为何错误

1: 第一问知道了 2: 写入字节数不对RamToFlash(flashp,ramp,8);
不能是8个,必须是512的2的N次方倍,请查看红皮书 3: 老兄解决了吗?我也碰到同样问题了 4: 我的程序中用IAP就死将iap加到我的程序中,一运行到写FLash就死掉。
int main(void)
{
   uint32 cnt,cnt1;
   uint8 last;
   uint8 i;
   uint8 temp[512];
   
    uint8 *p;

    uint8   Flash_Var[512];//系统变量在内存中的位置
    p=(uint8 *)0x1C000;
  
   Serial_Init();                             //串口调试的初始化
   Output_Init();                             //led和继电器的初始化
   LCD_Init();                                //lcd的初始化
   Eeprom_Init();                             //i2c以及eeprom的初始化
   RTCinter_Init();                               //内部时钟的初始化
   RTCinter_Set();
  // Watchdog_Init();                             //看门狗初始化
   Key_Init();                                    //按键输入的初始化

   Feed_Dog();
   DelayNS(10);
   Feed_Dog();
   LCD_Clear();
   
     FlagKeyPressed=1;
   KeyValue=RUN;
   
   
   
   LCD_Clear();  
   LCD_Send_Data( 7,8);   //在第7个字符处显示站号
   LCD_Send_Data( 6,8);   //在第7个字符处显示站号
   for(i=0;i<512;i++)
     Flash_Var[i]=1; //将系统变量读出来
    
   MAMCR = 0;                                                // 关闭MAM
   PLLCON = 0;                                              // 关闭PLL
  PLLFEED = 0xAA;
  PLLFEED = 0x55;
  SelSector(14,14);                          // 选择扇区1
  EraseSector(14,14);                        // 擦除扇区1
  SelSector(14,14);
  RamToFlash(0x0001C000, (uint32)Flash_Var, 512); // 写数据到扇区1
  TargetResetInit();
  while(1)
  {

  Display_Inter_Time();                       //显示内部时钟的时间数值

  Output_Driver();                            //驱动继电器和led

  Key_Process();                              //按键处理程序

   }
   return(0);
}
5: iap没有问题,是有个变量弄错了程序中的变量应该定义为 uint32,如果定义成uint8就永远出不了循环了。

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]