昨天看到freescale工程师写的一个**

[复制链接]
 楼主| JerryBJ 发表于 2007-10-9 16:27 | 显示全部楼层 |阅读模式
在网上的一篇**《在HCS08微控制器上使用FLASH&nbsp;存储器模拟EEPROM》中发现一点问题,讨论如下:<br /><br />在原来的函数<br />unsigned&nbsp;char&nbsp;flash_byte_prog(unsigned&nbsp;int&nbsp;_addr,&nbsp;unsigned&nbsp;char&nbsp;_data)中,因为FLASH擦写的操作要拷贝到RAM中执行,为了使这部分RAM在被使用后可以自动回收,原函数将代码拷贝到stack中执行。这段代码在原来的CW5.1中运行没有问题。<br />但最近发现在CW6.0下编译后,调用该函数会导致程序异常。跟踪发现,ROM_PGM[]中的数据拷贝到stack中后,执行<br />__asm<br />{<br />LDA&nbsp;_data&nbsp;//&nbsp;pass&nbsp;'_data'&nbsp;thru&nbsp;A<br />TSX&nbsp;//&nbsp;transfer&nbsp;SP&nbsp;to&nbsp;HX<br />JSR&nbsp;2,X&nbsp;//&nbsp;first&nbsp;2&nbsp;bytes&nbsp;of&nbsp;_pgm[]&nbsp;are&nbsp;'_addr'<br />}<br />时,JSR跳到了代码中,但是往后错了一个字节,因此出现异常。<br /><br />造成该问题的原因,该是CW6.0在函数调用的时候stack的祯结构和CW5.0不一样。<br /><br />这样修改原来的代码后,可以在CW6.0下正常运行:<br />&nbsp;__asm<br />&nbsp;{<br />&nbsp;&nbsp;LDA&nbsp;_data&nbsp;//&nbsp;pass&nbsp;'_data'&nbsp;thru&nbsp;A<br />&nbsp;&nbsp;TSX&nbsp;//&nbsp;transfer&nbsp;SP&nbsp;to&nbsp;HX<br />&nbsp;&nbsp;JSR&nbsp;3,X&nbsp;//&nbsp;first&nbsp;2&nbsp;bytes&nbsp;of&nbsp;_pgm[]&nbsp;are&nbsp;'_addr'&nbsp;&nbsp;&nbsp;&nbsp;//原来是JSR&nbsp;2,X,改为JSR&nbsp;3,X<br />&nbsp;}<br /><br /><br />const&nbsp;unsigned&nbsp;char&nbsp;ROM_PGM[]&nbsp;=<br />{<br />&nbsp;&nbsp;0x9E,&nbsp;0xFE,&nbsp;0x04,&nbsp;//&nbsp;LDHX&nbsp;3,SP&nbsp;&nbsp;;&nbsp;get&nbsp;the&nbsp;target&nbsp;address&nbsp;'_addr'//原来是9EFE03,改为9EFE04<br /><br /><br />如果还有人遇到类似问题,欢迎一起讨论。<br />
forthlab 发表于 2007-10-9 17:16 | 显示全部楼层

我在CW5.1上调试的,好像就有这个问题啊。

我当时以为是印刷错误,现在CW6.0也有,<br />是否是编译器设置问题?
yewuyi 发表于 2007-10-10 08:33 | 显示全部楼层

发现MOTO的写FLASH比较麻烦……

感觉MSP430在这上面做的比较简单明了。
forthlab 发表于 2007-10-10 09:48 | 显示全部楼层

昨天看到freescale工程师写的一个**

意思是高可靠性的程序要求,其中有一条:写flash的程序最好不要放在应用程序内,防止程序跑飞删除代码。。。。。。
afanti 发表于 2007-11-16 22:41 | 显示全部楼层

??我怎么没有这个问题

Jerry,这个函数我在5.1和6.0上都用过,没有发现这个问题啊!按照你的修改,造成非法代码复位,观察了执行过程,JSR&nbsp;2,X跳得地方就是0x9E,&nbsp;0xFE,&nbsp;0x03。没错,为什么你们的和我的不一样?
forthlab 发表于 2007-11-18 19:45 | 显示全部楼层

所以我怀疑是否是编译器设置问题?

有人能解释一下么?
afanti 发表于 2007-11-19 16:23 | 显示全部楼层

re

院创作者Jerry这几天也不来了,等待ing
张明峰 发表于 2007-11-27 18:26 | 显示全部楼层

我自己用的Flash模拟E2程序

  
forthlab 发表于 2007-11-28 11:33 | 显示全部楼层

如果有专用版PE的license,包含flash模块的

如果有专用版PE的license,里面包含flash模块的,应该不会有BUG的。<br />可惜没有啊。。。。。
afanti 发表于 2007-12-3 13:54 | 显示全部楼层

re

学习一下张教主的程序~~~
hantian521314 发表于 2014-4-27 11:43 | 显示全部楼层
非常感谢!若能分析一下原因就更好了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

84

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部