共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 跳转至页
回复
我要赚赏金打赏帖 |
|
|---|---|
| 基于MCP23S17的输入输出功能模块控制被打赏¥20元 | |
| 【S32K3XX】SPD 软件包使用Link文件修改被打赏¥22元 | |
| Switch-Case局部变量定义问题被打赏¥23元 | |
| 基于米尔TIAM62L开发板的串口通信及应用被打赏¥20元 | |
| PCF8574功能模块及其使用被打赏¥20元 | |
| 传感器LSM6DSO及LIS3MDL的功能检测被打赏¥18元 | |
| LPS25HB气压传感器及其检测被打赏¥18元 | |
| HTS221温湿度传感器及其检测被打赏¥18元 | |
| 【S32K3XX】HSE FW 版本更新被打赏¥21元 | |
| 基于ArduinoUNO开发板的AT24C02读写测试被打赏¥16元 | |
我要赚赏金
