发现CODEWARRIOR 的一个奇怪问题??帮忙

[复制链接]
5827|12
 楼主| 冷若寒 发表于 2007-4-23 15:50 | 显示全部楼层 |阅读模式
我观察到一个关于编译器的问题,不知道是什么问题,当然我不是怀疑编译器的本身的问题!请大家帮忙分析一下:下面是C代码和对应的汇编代码,看看其中的问题;<br /><br />OSPrioHighRdy&nbsp;=&nbsp;OSFindHighPrio();&nbsp;<br />INTOS&nbsp;&nbsp;&nbsp;&nbsp;OSFindHighPrio(void)<br />{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if(OSRdyMap&0x000F)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(OSUnMapTbl[(INT8U)(OSRdyMap&0x000F)]);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />对应的汇编代码:<br />LDA&nbsp;0X104<br />BIT&nbsp;#0X0F<br />BEQ&nbsp;*+10<br />AND&nbsp;#0X0F<br />CLRH&nbsp;<br />TAX<br />LDA&nbsp;7390,X<br />RTS<br /><br />STX&nbsp;0X0119<br />STX&nbsp;0X011A<br />
 楼主| 冷若寒 发表于 2007-4-23 16:01 | 显示全部楼层

为什么这句OSPrioHighRdy&nbsp;=&nbsp;OSFindHighPrio();&nbsp;译成汇编之后成了<br /><br />STX&nbsp;0X0119<br />STX&nbsp;0X011A<br /><br /><br />而不是把A&nbsp;中的数据给OSPrioHighRdy?
张明峰 发表于 2007-4-23 16:46 | 显示全部楼层

也许返回值是16位的.

  
 楼主| 冷若寒 发表于 2007-4-23 18:32 | 显示全部楼层

返回值 是8位的

返回值&nbsp;是8位的
 楼主| 冷若寒 发表于 2007-4-23 18:34 | 显示全部楼层

GO ON

OSUnMapTbl[]&nbsp;是一个放在flash里的数组
JerryBJ 发表于 2007-4-23 22:21 | 显示全部楼层

优化?

从函数OSFindHighPrio()的汇编代码看,返回的值确实是从A传递的,没有错。不知道你上下文是什么样子的,C编译器经常根据上下文做一些优化处理。得到的结果对吗?变量OSPrioHighRdy被赋值了吗?看MAP文件,该变量的存贮器地址?
free_tech 发表于 2007-4-24 09:27 | 显示全部楼层

看MAP表,就知道了

LDA&nbsp;0X104&nbsp;&nbsp;;A=(0X104)<br />BIT&nbsp;#0X0F&nbsp;&nbsp;;A&0X0F否<br />BEQ&nbsp;*+10&nbsp;&nbsp;&nbsp;;=0,PC+10,RTS<br />AND&nbsp;#0X0F&nbsp;&nbsp;;/=0时A=地4位,周期最短<br />CLRH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;H=0<br />TAX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;X=A<br />LDA&nbsp;7390,X&nbsp;;A=(X+7390)查表<br />RTS<br /><br />STX&nbsp;0X0119&nbsp;&nbsp;;<br />STX&nbsp;0X011A&nbsp;&nbsp;;应该是下面程序用的<br /><br />看一下&nbsp;0X119和0X11A得程序表就知道了<br />
 楼主| 冷若寒 发表于 2007-4-27 15:54 | 显示全部楼层

有点进步

我看了MAP&nbsp;表;但是没有看出什么问题啊?<br /><br />但是&nbsp;我改动了&nbsp;CODEWARRIOR&nbsp;/&nbsp;EDIT&nbsp;/&nbsp;standard&nbsp;setting&nbsp;/&nbsp;compiler/&nbsp;option/&nbsp;-cs08&nbsp;&nbsp;就可以通过了,而且再看上面的代码就成<br /><br />LDA&nbsp;0X104&nbsp;&nbsp;;A=(0X104)<br />BIT&nbsp;#0X0F&nbsp;&nbsp;;A&0X0F否<br />BEQ&nbsp;*+10&nbsp;&nbsp;&nbsp;;=0,PC+10,RTS<br />AND&nbsp;#0X0F&nbsp;&nbsp;;/=0时A=地4位,周期最短<br />CLRH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;H=0<br />TAX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;X=A<br />LDA&nbsp;7390,X&nbsp;;A=(X+7390)查表<br />RTS<br /><br />STA&nbsp;0X0119&nbsp;&nbsp;;<br />STA&nbsp;0X011A&nbsp;&nbsp;;应该是下面程序用的<br /><br />之前是<br />STX&nbsp;0X0119&nbsp;&nbsp;;<br />STX&nbsp;0X011A&nbsp;&nbsp;;应该是下面程序用的<br /><br /><br />
 楼主| 冷若寒 发表于 2007-4-27 15:59 | 显示全部楼层

<br />现在我考虑是:&nbsp;原来我的这段代码是在&nbsp;HC08GZ32&nbsp;上移植到&nbsp;HCS08AW32上的;<br />而且其中的一段汇编代码编译还出现WARNING&nbsp;;<br />如下:Warning&nbsp;:&nbsp;C4401:&nbsp;Recursive&nbsp;comments&nbsp;not&nbsp;allowed<br /><br />&nbsp;<br /><br />L4021:&nbsp;Incompatible&nbsp;derivative:&nbsp;HCS08&nbsp;in&nbsp;previous&nbsp;files&nbsp;and&nbsp;CPU08&nbsp;in&nbsp;current&nbsp;file&nbsp;(OS_CPU_A.ASM.o)<br /><br /><br />
 楼主| 冷若寒 发表于 2007-4-27 16:01 | 显示全部楼层

有点含糊了

觉得要设置的选项太多,还不是很明白其中的意思啊?
 楼主| 冷若寒 发表于 2007-4-27 16:05 | 显示全部楼层

<br /><br />OS_CPU_A.ASM&nbsp;是一段汇编代码
 楼主| 冷若寒 发表于 2007-4-27 16:08 | 显示全部楼层

关于LIBRARY

还有就是<br />Project&nbsp;Name&nbsp;&nbsp;Memory&nbsp;Model&nbsp;&nbsp;&nbsp;Library&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compiler&nbsp;Options<br />---------------------------------------------------------------------<br />C&nbsp;&nbsp;&nbsp;IEEE32/32&nbsp;small&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ansif.lib&nbsp;&nbsp;&nbsp;&nbsp;-W2&nbsp;-Os&nbsp;-Ms&nbsp;-Fd&nbsp;-NoPath<br />C&nbsp;&nbsp;&nbsp;IEEE32/64&nbsp;small&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ansi.lib&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-W2&nbsp;-Os&nbsp;-Ms&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-NoPath<br />C&nbsp;&nbsp;&nbsp;Integral&nbsp;only&nbsp;small&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ansii.lib&nbsp;&nbsp;&nbsp;&nbsp;-W2&nbsp;-Os&nbsp;-Ms&nbsp;-Fd&nbsp;-NoPath<br />C++&nbsp;IEEE32/32&nbsp;small&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cppf.lib&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-W2&nbsp;-Os&nbsp;-Ms&nbsp;-Fd&nbsp;-NoPath<br />C++&nbsp;IEEE32/64&nbsp;small&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cpp.lib&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-W2&nbsp;-Os&nbsp;-Ms&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-NoPath<br />C++&nbsp;Integral&nbsp;only&nbsp;small&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cppi.lib&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-W2&nbsp;-Os&nbsp;-Ms&nbsp;-Fd&nbsp;-NoPath<br />C&nbsp;&nbsp;&nbsp;IEEE32/32&nbsp;tiny&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ansitf.lib&nbsp;&nbsp;&nbsp;-W2&nbsp;-Os&nbsp;-Mt&nbsp;-Fd&nbsp;-NoPath<br />C&nbsp;&nbsp;&nbsp;IEEE32/64&nbsp;tiny&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ansit.lib&nbsp;&nbsp;&nbsp;&nbsp;-W2&nbsp;-Os&nbsp;-Mt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-NoPath<br />C&nbsp;&nbsp;&nbsp;Integral&nbsp;only&nbsp;tiny&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ansiti.lib&nbsp;&nbsp;&nbsp;-W2&nbsp;-Os&nbsp;-Mt&nbsp;-Fd&nbsp;-NoPath<br />C++&nbsp;IEEE32/32&nbsp;tiny&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cpptf.lib&nbsp;&nbsp;&nbsp;&nbsp;-W2&nbsp;-Os&nbsp;-Mt&nbsp;-Fd&nbsp;-NoPath<br />C++&nbsp;IEEE32/64&nbsp;tiny&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cppt.lib&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-W2&nbsp;-Os&nbsp;-Mt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-NoPath<br />C++&nbsp;Integral&nbsp;only&nbsp;tiny&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cppti.lib&nbsp;&nbsp;&nbsp;&nbsp;-W2&nbsp;-Os&nbsp;-Mt&nbsp;-Fd&nbsp;-NoPath<br /><br />C&nbsp;&nbsp;&nbsp;IEEE32/32&nbsp;small&nbsp;HCS08&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ansifs.lib&nbsp;&nbsp;&nbsp;-W2&nbsp;-Os&nbsp;-cs08&nbsp;-Ms&nbsp;-Fd&nbsp;-NoPath<br />C&nbsp;&nbsp;&nbsp;IEEE32/64&nbsp;small&nbsp;HCS08&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ansis.lib&nbsp;&nbsp;&nbsp;&nbsp;-W2&nbsp;-Os&nbsp;-cs08&nbsp;-Ms&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-NoPath<br />C&nbsp;&nbsp;&nbsp;Integral&nbsp;only&nbsp;small&nbsp;HCS08&nbsp;&nbsp;ansiis.lib&nbsp;&nbsp;&nbsp;-W2&nbsp;-Os&nbsp;-cs08&nbsp;-Ms&nbsp;-Fd&nbsp;-NoPath<br />C++&nbsp;IEEE32/32&nbsp;small&nbsp;HCS08&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cppfs.lib&nbsp;&nbsp;&nbsp;&nbsp;-W2&nbsp;-Os&nbsp;-cs08&nbsp;-Ms&nbsp;-Fd&nbsp;-NoPath<br />C++&nbsp;IEEE32/64&nbsp;small&nbsp;HCS08&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cpps.lib&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-W2&nbsp;-Os&nbsp;-cs08&nbsp;-Ms&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-NoPath<br />C++&nbsp;Integral&nbsp;only&nbsp;small&nbsp;HCS08&nbsp;&nbsp;cppis.lib&nbsp;&nbsp;&nbsp;&nbsp;-W2&nbsp;-Os&nbsp;-cs08&nbsp;-Ms&nbsp;-Fd&nbsp;-NoPath<br />C&nbsp;&nbsp;&nbsp;IEEE32/32&nbsp;tiny&nbsp;&nbsp;HCS08&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ansitfs.lib&nbsp;&nbsp;-W2&nbsp;-Os&nbsp;-cs08&nbsp;-Mt&nbsp;-Fd&nbsp;-NoPath<br />C&nbsp;&nbsp;&nbsp;IEEE32/64&nbsp;tiny&nbsp;&nbsp;HCS08&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ansits.lib&nbsp;&nbsp;&nbsp;-W2&nbsp;-Os&nbsp;-cs08&nbsp;-Mt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-NoPath<br />C&nbsp;&nbsp;&nbsp;Integral&nbsp;only&nbsp;tiny&nbsp;&nbsp;HCS08&nbsp;&nbsp;ansitis.lib&nbsp;&nbsp;-W2&nbsp;-Os&nbsp;-cs08&nbsp;-Mt&nbsp;-Fd&nbsp;-NoPath<br />C++&nbsp;IEEE32/32&nbsp;tiny&nbsp;&nbsp;HCS08&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cpptfs.lib&nbsp;&nbsp;&nbsp;-W2&nbsp;-Os&nbsp;-cs08&nbsp;-Mt&nbsp;-Fd&nbsp;-NoPath<br />C++&nbsp;IEEE32/64&nbsp;tiny&nbsp;&nbsp;HCS08&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cppts.lib&nbsp;&nbsp;&nbsp;&nbsp;-W2&nbsp;-Os&nbsp;-cs08&nbsp;-Mt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-NoPath<br />C++&nbsp;Integral&nbsp;only&nbsp;tiny&nbsp;&nbsp;HCS08&nbsp;&nbsp;cpptis.lib&nbsp;&nbsp;&nbsp;-W2&nbsp;-Os&nbsp;-cs08&nbsp;-Mt&nbsp;-Fd&nbsp;-NoPath<br /><br /><br /><br /><br /><br />这些都有什么不同啊
XUHUADONG 发表于 2007-4-28 12:28 | 显示全部楼层

HS08和HC08的内核不同,汇编有几句不一样

他们的汇编指令不完全相同,STX就不一样,<br /><br />你可以新建项目,移植程序,不能直接改个CPU<br /><br />如下:Warning&nbsp;:&nbsp;C4401:&nbsp;Recursive&nbsp;comments&nbsp;not&nbsp;allowed<br /><br /><br /><br />L4021:&nbsp;Incompatible&nbsp;derivative:&nbsp;HCS08&nbsp;in&nbsp;previous&nbsp;files&nbsp;and&nbsp;CPU08&nbsp;in&nbsp;current&nbsp;file&nbsp;(OS_CPU_A.ASM.o)<br /><br />主要是返回参数不对,<br /><br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

137

帖子

1

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