共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 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【笔记】生成报错synthdesignERROR被打赏50分 | |
【STM32H7S78-DK评测】LTDC+DMA2D驱动RGBLCD屏幕被打赏50分 | |
【STM32H7S78-DK评测】Coremark基准测试被打赏50分 | |
【STM32H7S78-DK评测】浮点数计算性能测试被打赏50分 | |
【STM32H7S78-DK评测】Execute in place(XIP)模式学习笔记被打赏50分 | |
每周了解几个硬件知识+buckboost电路(五)被打赏10分 | |
【换取逻辑分析仪】RA8 PMU 模块功能寄存器功能说明被打赏20分 | |
野火启明6M5适配SPI被打赏20分 | |
NUCLEO-U083RC学习历程2-串口输出测试被打赏20分 | |
【笔记】STM32CUBEIDE的Noruletomaketarget编译问题被打赏50分 |