共2条
1/1 1 跳转至页
问
我在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就永远出不了循环了。
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 跳转至页
回复
我要赚赏金打赏帖 |
|
|---|---|
| 【S32DS】S32K3 RTD7.0.1 HSE 组件配置报错问题解决被打赏¥27元 | |
| 【S32K3XX】MCME 启动 CORE1被打赏¥23元 | |
| AG32VH407下温度大气压传感器及其检测被打赏¥20元 | |
| AG32VH407下光照强度传感器BH1750及其检测被打赏¥22元 | |
| AT32VH407下使用温湿度传感器DHT22进行检测被打赏¥20元 | |
| DIY一个婴儿澡盆温度计被打赏¥34元 | |
| 【FreeRtos】FreeRtos+MPU region 配置规则被打赏¥23元 | |
| 【分享开发笔记,赚取电动螺丝刀】三分钟快速上手驱动墨水屏(ArduinoIDE)被打赏¥28元 | |
| 【S32K3XX】LIN 通讯模块使用被打赏¥31元 | |
| 【FreeRtos】FreeRtos + MPU模块的配置使用被打赏¥32元 | |
我要赚赏金
