打印
[STM8]

关于STM8 iap升级会复位的问题

[复制链接]
4593|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
a7208184|  楼主 | 2011-10-13 14:41 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
大家好!小弟现在已经在STM8AH61上实现IAP远程升级。但是在两个程序段之间跳转的时候,STM8所有的寄存器和GPIO口都会复位,这样实现出来的跟我实际的产品硬件有违背。不知道朋友们,知道有没办法,能够让芯片的寄存器不要让GPIO复位就可以了,不知道有这种实现方式吗
沙发
香水城| | 2011-10-13 15:09 | 只看该作者
芯片不会自己复位寄存器和端口,除非是看门狗超时。LZ还是需要从自己的程序上找原因,找到了问题根源,才能有解决办法。

使用特权

评论回复
板凳
a7208184|  楼主 | 2011-10-13 15:25 | 只看该作者
香主,您的意思是正常的情况下,IAP或者APP跳转的时候,芯片是不会自动复位寄存器或者端口,是这个意思吗?

使用特权

评论回复
地板
香水城| | 2011-10-13 15:29 | 只看该作者
香主,您的意思是正常的情况下,IAP或者APP跳转的时候,芯片是不会自动复位寄存器或者端口,是这个意思吗?
a7208184 发表于 2011-10-13 15:25


芯片本身还没有聪明到可以知道你哪里是IPP哪里是APP,它怎么能知道你的跳转操作然后自做主张地复位呢?

使用特权

评论回复
5
a7208184|  楼主 | 2011-10-13 15:39 | 只看该作者
可是香主,我的IAP工程与APP工程是分开的,两个工程之间的跳转也是不会复位的,是吗?

使用特权

评论回复
6
a7208184|  楼主 | 2011-10-13 17:08 | 只看该作者
香主,找到问题出在的地方,但是没怎么理解这个原因,执行_asm("jp $8000\n");指令,由APP跳到IAP,这个时候会出现由于非法操作码导致的复位。IAP跳到APP却不会出现情况。就仅仅是跳转的时候出现,APP运行都一切正常的。能够给点意见吗?

使用特权

评论回复
7
a7208184|  楼主 | 2011-10-14 08:01 | 只看该作者
请问朋友们,这个非法操作码复位需要怎么去调试代码,小弟有点迷糊了。因为在APP程序里面,在执行这条代码之前都是没有问题的,无论寄存器、堆、栈,都是OK的,但是一执行这条指令就会出现这种情况。小弟初步以为是中断引起的。比如说定时器中断等。但是小弟已经把总中断关掉了,没有效果的。
另外小弟有一个APP测试程序,只有3.8K,执行那条跳转指令,没有问题,不会出现非法操作码复位的情况,所以肯定排除了这条指令的问题。

使用特权

评论回复
8
香水城| | 2011-10-14 09:59 | 只看该作者
会不会跳转到的地方的第一个字节是非法指令,以后又都正确了?

使用特权

评论回复
9
a7208184|  楼主 | 2011-10-14 10:56 | 只看该作者
那除非是跳到那个地方被APP改掉了。但是那个地方应该不会啊。那个地方存储的字节是在FLASH里面呀。而且我用的测试APP,执行这条指令是很正常的,不会出现这种情况呢。难道是RAM没有分配好吗?香主,能不能帮我看下我的IAP和APP的配置是否正确。还有MAP

1.jpg (31.22 KB )

IAP的配置

IAP的配置

2.jpg (87.48 KB )

IAP的MAP图

IAP的MAP图

3.jpg (28.67 KB )

APP的配置

APP的配置

4.jpg (60.24 KB )

APP的MAP图

APP的MAP图

使用特权

评论回复
10
香水城| | 2011-10-14 11:42 | 只看该作者
单步运行那条指令也会有问题吗?

使用特权

评论回复
11
a7208184|  楼主 | 2011-10-14 14:21 | 只看该作者
单步运行不会出现这种情况,不过单步不会再跳回到APP就是了。全速运行肯定会出现问题。

使用特权

评论回复
12
a7208184|  楼主 | 2011-10-14 14:38 | 只看该作者
香主,我现在把这个测试APP程序单步执行这条跳转指令和实际产品的APP程序单步执行这条指令后,反汇编那边好像不同。现在小弟把这个贴出来,请帮忙分析下。这个没分析过,不知道从哪里分析。 小弟觉得有可能问题是不是出在这里。因为小弟是想跳转到0x8000,但是实际产品好像单步后,跳到0x18000了。不知道是不是。

7.jpg (9.43 KB )

实际产品APP单步跳转指令后的反汇编

实际产品APP单步跳转指令后的反汇编

8.jpg (5.96 KB )

测试APP单步跳转指令后的反汇编

测试APP单步跳转指令后的反汇编

使用特权

评论回复
13
香水城| | 2011-10-14 15:31 | 只看该作者
香主,我现在把这个测试APP程序单步执行这条跳转指令和实际产品的APP程序单步执行这条指令后,反汇编那边好像不同。现在小弟把这个贴出来,请帮忙分析下。这个没分析过,不知道从哪里分析。 小弟觉得有可能问题是不 ...
a7208184 发表于 2011-10-14 14:38


这是一个有趣的发现。

可以检查一下PCE的内容;有关PCE描述请看这个文档:http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/PROGRAMMING_MANUAL/CD00161709.pdf

使用特权

评论回复
14
a7208184|  楼主 | 2011-10-15 16:57 | 只看该作者
香主。小弟这两天调试有发现几个有趣的问题,大家探讨下。 1、我将APP的地址如果放到0xa000,则IAP跳入到IAP也是会出现复位的情况。 2、小弟使用跳转指令不能跳转到0x1000以上的地址,请问是因为长跳转只支持32K以内的跳转吗? 3、小弟将APP的起始地址放到0xe000,会报一大堆的编译错误。我查了网上的说法,说是程序代码超过32K导致的,可是如果是这样的话,与FLASH放置的位置应该没有关系吧。现把编译错误上传如下,小弟现在初步怀疑是APP存放的FLASH位置不对,导致可能IAP进入APP过程中,其实这个时候已经把APP要跳入到APP的地址所存放的指令已经破坏了,所以我现在想把FLASH的位置移到0x10000后,但是不知道是编译器的问题,还是核的问题,不能跳转到0x10000后的地址。
      希望高手们也都进来,大家一起讨论下。。小弟也继续努力中。。

1.jpg (188.58 KB )

1.jpg

使用特权

评论回复
15
bobo5650| | 2011-10-18 13:39 | 只看该作者
_asm("jp $8000\n");
我没记错的话对STM8S,0x8000是flash开始的地方,是存放中断向量的,直接跳进中断向量表算是什么意思?

使用特权

评论回复
16
a7208184|  楼主 | 2011-10-19 07:46 | 只看该作者
呵呵,兄弟们,问题已经全部解决。是因为APP内存过大,有可能将APP的栈破坏掉了。所以在进入APP的时候,出现了这种情况。小弟把一部分全局变量数组放到FLASH中,就没有问题了。多谢兄弟们了

使用特权

评论回复
17
a7208184|  楼主 | 2011-10-19 07:48 | 只看该作者
另外,香主。小弟有一个问题想请教下。我的APP有24K。本来之前放到0xf000的时候,编译没有问题。我将APP中的一部分全局数组放到FLASH中,这个时候就会报一大堆的编译错误。编译错误截图我已经在14楼贴出来了。请问这种是什么原因导致的呢。我初步怀疑是链接文件出了错,但是不知道该怎么修改它。。

使用特权

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

本版积分规则

0

主题

76

帖子

1

粉丝