共2条
1/1 1 跳转至页
IAP 关于IAP调试过程中的一堆疑问
问
2100板,用你们的所给的例子程序,调试
有如下疑问:
1:isp软件中bootid为:1.61
而iap程序中通过此句BootCodeID(); //读取boot代码的版本号
得到的是317 ,如何解释?
2:
在调试时,进入main入口后,为什么不能修改地址0x00002000及后续地址的值?
我修改了地址 0x40000000及后续地址的值,执行
RamToFlash(0x00002000, 0x40000000, 512);
一句之后发现地址0x00002000及后续4个地址的值与地址 0x40000000及后续4个地址的值不一样,在执行Compare(0x00002000, 0x40000000,512);
一句后发现Paramout[0]为状态代码COMPARE_ERROR,请问这是为什么,如何做使源和目标的值相同?
3:
还有,我设了指针,想读出地址 0x40000000及后续地址的值,如下:
uint32 *p = (uint32*) 0x00002000;
RamToFlash(0x00002000, 0x40000000, 512);
....
for (i=0; i<4*4; i=i+4)
{
a[i/4]=*(p+i);
}
发现取出来的值:为0x00000033,0x00002b33,0x00000000,0x00000000,
而这四个值却是 地址0x00002000,0x00002010,0x00002020,0x00002030的值,与我的程序(应该是不一致地址0x00002000,0x00002004,0x00002008,0x00002012的值),如何解释出现这种情况?
烦请一一作答。 答 1: 自己顶 答 2: 为什么不回答? 答 3: 顶 答 4: 为什么不回答? 答 5: re:1. 应该是ISP和IAP程序都有一个版本号。
2. 调试是使用DebugInRAM进行调试,0x40000000为程序代码空间,不要去修改。这个例子只是简单的使用0x40000000地址上的数据而已,如果真正使用IAP,可以定义一个512字节的数据缓冲区(数组),然后设置相应的数据再IAP写入即可。
3. 程序要自己DEBUG,可以参考以下代码
unsigned int i;
uint32 *cp1, *cp2;
extern void Reset(void);
cp1 = (uint32 *)Reset;
cp2 = (uint32 *)0x40000000;
for (i = 0; i < 16; i++)
{
*cp2++ = *cp1++;
}
......
有如下疑问:
1:isp软件中bootid为:1.61
而iap程序中通过此句BootCodeID(); //读取boot代码的版本号
得到的是317 ,如何解释?
2:
在调试时,进入main入口后,为什么不能修改地址0x00002000及后续地址的值?
我修改了地址 0x40000000及后续地址的值,执行
RamToFlash(0x00002000, 0x40000000, 512);
一句之后发现地址0x00002000及后续4个地址的值与地址 0x40000000及后续4个地址的值不一样,在执行Compare(0x00002000, 0x40000000,512);
一句后发现Paramout[0]为状态代码COMPARE_ERROR,请问这是为什么,如何做使源和目标的值相同?
3:
还有,我设了指针,想读出地址 0x40000000及后续地址的值,如下:
uint32 *p = (uint32*) 0x00002000;
RamToFlash(0x00002000, 0x40000000, 512);
....
for (i=0; i<4*4; i=i+4)
{
a[i/4]=*(p+i);
}
发现取出来的值:为0x00000033,0x00002b33,0x00000000,0x00000000,
而这四个值却是 地址0x00002000,0x00002010,0x00002020,0x00002030的值,与我的程序(应该是不一致地址0x00002000,0x00002004,0x00002008,0x00002012的值),如何解释出现这种情况?
烦请一一作答。 答 1: 自己顶 答 2: 为什么不回答? 答 3: 顶 答 4: 为什么不回答? 答 5: re:1. 应该是ISP和IAP程序都有一个版本号。
2. 调试是使用DebugInRAM进行调试,0x40000000为程序代码空间,不要去修改。这个例子只是简单的使用0x40000000地址上的数据而已,如果真正使用IAP,可以定义一个512字节的数据缓冲区(数组),然后设置相应的数据再IAP写入即可。
3. 程序要自己DEBUG,可以参考以下代码
unsigned int i;
uint32 *cp1, *cp2;
extern void Reset(void);
cp1 = (uint32 *)Reset;
cp2 = (uint32 *)0x40000000;
for (i = 0; i < 16; i++)
{
*cp2++ = *cp1++;
}
......
共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元 | |
我要赚赏金
