打印
[STM32F1]

STM32 IAP

[复制链接]
1872|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
icefox225|  楼主 | 2013-12-19 20:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
目前碰到一个问题,我的IAP程序从0X0800000-0X08007000,APP程序从0x08008000-0x08011000.如果我的APP程序先用仿真器烧写进去,然后用IAP直接跳转可以跳转成功。然后我在APP程序中新的APP程序使用HTTP下载程序到0x08012000开始的地址内,然后复位重新从IAP开始运行,此时就跳过去后有时候直接进入hardfault中断中,可以确定没有进入到主程序,因为刚进入主程序的时候我通过串口输出一个字符'S'。程序大小30K,可以确定的是通过KEIL生成的BIN文件跟我下到0x08012000开始的数据是完全一致的,我通过IAP搬移过去的也是对的,但就是不能像仿真器烧写进去的代码一样直接执行,不知道是不是KEIL生成的BIN文件跟直接仿真器烧进去的不一样?我的KEIL版本是V4.72.
这个问题纠结了一个多礼拜了,有时候烧进去的程序是对的,但是如果程序中修改了一点小问题,比方说串口输出的's'变成'h',有时候都会跳不过去。
堆栈我已经设置到0x00001400,APP的最大堆栈式2172,BOOT端的最大堆栈是200字节,我在.s文件中把两个程序的栈全部设置为难0x00001400了。

沙发
airwill| | 2013-12-19 20:10 | 只看该作者
代码一致, 还有一个可能性, 我曾经遇到类似的问题, 结果是代码没有烧写全. 程序的最后部分还有一些常数数据可能丢了. 再仔细核实一下

使用特权

评论回复
板凳
oliver123| | 2013-12-19 22:40 | 只看该作者
1,iap烧成的时候flash好像需要将一个块都写完,不够的用0补充
2,中断向量表重新映射下试试看。

使用特权

评论回复
地板
icefox225|  楼主 | 2013-12-20 09:23 | 只看该作者
这些我都试了,今天发现个更奇怪的问题,我仿真器不能看MEMORY里的数据了,FLASH的数据要么是全A要么是全0,不会是FLASH坏了吧?

使用特权

评论回复
5
副BAN主就是我| | 2013-12-20 10:33 | 只看该作者
icefox225 发表于 2013-12-20 09:23
这些我都试了,今天发现个更奇怪的问题,我仿真器不能看MEMORY里的数据了,FLASH的数据要么是全A要么是全0 ...

我遇到我一次这样的问题,我误操作了选项字节。

你看看你的代码是不是误设置读保护了?或者修改了选项字节?

使用特权

评论回复
6
icefox225|  楼主 | 2013-12-22 11:13 | 只看该作者
读不出来倒也不是什么问题,因为程序是能运行的,现在网页下载下去的程序我跳到BOOT端把0X08012000的程序拷贝到0X08008000,然后再跳回到主程序,进入主程序后感觉程序乱跑了,死在根本不会执行的程序那里了。
大神们,求助啊。。。
还有选项字节我根本没去动过啊,我就是用仿真器烧写,然后BIN文件是用KEIL文件生成的,BOOT程序和APP程序都没有对选项字节操作。

使用特权

评论回复
7
ABHK| | 2013-12-22 17:22 | 只看该作者
也有可能是自己哪里误操作   导致了   我觉得  应该是程序哪里的中断出了错

使用特权

评论回复
8
icefox225|  楼主 | 2013-12-23 09:52 | 只看该作者
问题解决了,还是网页操作方面的问题使得数据不对从而导致指针错误。

使用特权

评论回复
9
icefox225|  楼主 | 2013-12-23 09:56 | 只看该作者
怎么结贴啊,回复我的我每个给5分不就20分了么,怎么还提示我分数分配错误啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

222

主题

352

帖子

1

粉丝