打印

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

[复制链接]
4658|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
冷若寒|  楼主 | 2007-4-23 15:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我观察到一个关于编译器的问题,不知道是什么问题,当然我不是怀疑编译器的本身的问题!请大家帮忙分析一下:下面是C代码和对应的汇编代码,看看其中的问题;

OSPrioHighRdy = OSFindHighPrio(); 
INTOS    OSFindHighPrio(void)
{

    if(OSRdyMap&0x000F)
    {
        return(OSUnMapTbl[(INT8U)(OSRdyMap&0x000F)]);
    }
}

对应的汇编代码:
LDA 0X104
BIT #0X0F
BEQ *+10
AND #0X0F
CLRH 
TAX
LDA 7390,X
RTS

STX 0X0119
STX 0X011A

相关帖子

沙发
冷若寒|  楼主 | 2007-4-23 16:01 | 只看该作者

为什么这句OSPrioHighRdy = OSFindHighPrio(); 译成汇编之后成了

STX 0X0119
STX 0X011A


而不是把A 中的数据给OSPrioHighRdy?

使用特权

评论回复
板凳
张明峰| | 2007-4-23 16:46 | 只看该作者

也许返回值是16位的.

使用特权

评论回复
地板
冷若寒|  楼主 | 2007-4-23 18:32 | 只看该作者

返回值 是8位的

返回值 是8位的

使用特权

评论回复
5
冷若寒|  楼主 | 2007-4-23 18:34 | 只看该作者

GO ON

OSUnMapTbl[] 是一个放在flash里的数组

使用特权

评论回复
6
JerryBJ| | 2007-4-23 22:21 | 只看该作者

优化?

从函数OSFindHighPrio()的汇编代码看,返回的值确实是从A传递的,没有错。不知道你上下文是什么样子的,C编译器经常根据上下文做一些优化处理。得到的结果对吗?变量OSPrioHighRdy被赋值了吗?看MAP文件,该变量的存贮器地址?

使用特权

评论回复
7
free_tech| | 2007-4-24 09:27 | 只看该作者

看MAP表,就知道了

LDA 0X104  ;A=(0X104)
BIT #0X0F  ;A&0X0F否
BEQ *+10   ;=0,PC+10,RTS
AND #0X0F  ;/=0时A=地4位,周期最短
CLRH       ;H=0
TAX        ;X=A
LDA 7390,X ;A=(X+7390)查表
RTS

STX 0X0119  ;
STX 0X011A  ;应该是下面程序用的

看一下 0X119和0X11A得程序表就知道了

使用特权

评论回复
8
冷若寒|  楼主 | 2007-4-27 15:54 | 只看该作者

有点进步

我看了MAP 表;但是没有看出什么问题啊?

但是 我改动了 CODEWARRIOR / EDIT / standard setting / compiler/ option/ -cs08  就可以通过了,而且再看上面的代码就成

LDA 0X104  ;A=(0X104)
BIT #0X0F  ;A&0X0F否
BEQ *+10   ;=0,PC+10,RTS
AND #0X0F  ;/=0时A=地4位,周期最短
CLRH       ;H=0
TAX        ;X=A
LDA 7390,X ;A=(X+7390)查表
RTS

STA 0X0119  ;
STA 0X011A  ;应该是下面程序用的

之前是
STX 0X0119  ;
STX 0X011A  ;应该是下面程序用的


使用特权

评论回复
9
冷若寒|  楼主 | 2007-4-27 15:59 | 只看该作者


现在我考虑是: 原来我的这段代码是在 HC08GZ32 上移植到 HCS08AW32上的;
而且其中的一段汇编代码编译还出现WARNING ;
如下:Warning : C4401: Recursive comments not allowed

 

L4021: Incompatible derivative: HCS08 in previous files and CPU08 in current file (OS_CPU_A.ASM.o)


使用特权

评论回复
10
冷若寒|  楼主 | 2007-4-27 16:01 | 只看该作者

有点含糊了

觉得要设置的选项太多,还不是很明白其中的意思啊?

使用特权

评论回复
11
冷若寒|  楼主 | 2007-4-27 16:05 | 只看该作者



OS_CPU_A.ASM 是一段汇编代码

使用特权

评论回复
12
冷若寒|  楼主 | 2007-4-27 16:08 | 只看该作者

关于LIBRARY

还有就是
Project Name  Memory Model   Library      Compiler Options
---------------------------------------------------------------------
C   IEEE32/32 small          ansif.lib    -W2 -Os -Ms -Fd -NoPath
C   IEEE32/64 small          ansi.lib     -W2 -Os -Ms     -NoPath
C   Integral only small      ansii.lib    -W2 -Os -Ms -Fd -NoPath
C++ IEEE32/32 small          cppf.lib     -W2 -Os -Ms -Fd -NoPath
C++ IEEE32/64 small          cpp.lib      -W2 -Os -Ms     -NoPath
C++ Integral only small      cppi.lib     -W2 -Os -Ms -Fd -NoPath
C   IEEE32/32 tiny           ansitf.lib   -W2 -Os -Mt -Fd -NoPath
C   IEEE32/64 tiny           ansit.lib    -W2 -Os -Mt     -NoPath
C   Integral only tiny       ansiti.lib   -W2 -Os -Mt -Fd -NoPath
C++ IEEE32/32 tiny           cpptf.lib    -W2 -Os -Mt -Fd -NoPath
C++ IEEE32/64 tiny           cppt.lib     -W2 -Os -Mt     -NoPath
C++ Integral only tiny       cppti.lib    -W2 -Os -Mt -Fd -NoPath

C   IEEE32/32 small HCS08      ansifs.lib   -W2 -Os -cs08 -Ms -Fd -NoPath
C   IEEE32/64 small HCS08      ansis.lib    -W2 -Os -cs08 -Ms     -NoPath
C   Integral only small HCS08  ansiis.lib   -W2 -Os -cs08 -Ms -Fd -NoPath
C++ IEEE32/32 small HCS08      cppfs.lib    -W2 -Os -cs08 -Ms -Fd -NoPath
C++ IEEE32/64 small HCS08      cpps.lib     -W2 -Os -cs08 -Ms     -NoPath
C++ Integral only small HCS08  cppis.lib    -W2 -Os -cs08 -Ms -Fd -NoPath
C   IEEE32/32 tiny  HCS08      ansitfs.lib  -W2 -Os -cs08 -Mt -Fd -NoPath
C   IEEE32/64 tiny  HCS08      ansits.lib   -W2 -Os -cs08 -Mt     -NoPath
C   Integral only tiny  HCS08  ansitis.lib  -W2 -Os -cs08 -Mt -Fd -NoPath
C++ IEEE32/32 tiny  HCS08      cpptfs.lib   -W2 -Os -cs08 -Mt -Fd -NoPath
C++ IEEE32/64 tiny  HCS08      cppts.lib    -W2 -Os -cs08 -Mt     -NoPath
C++ Integral only tiny  HCS08  cpptis.lib   -W2 -Os -cs08 -Mt -Fd -NoPath





这些都有什么不同啊

使用特权

评论回复
13
XUHUADONG| | 2007-4-28 12:28 | 只看该作者

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

他们的汇编指令不完全相同,STX就不一样,

你可以新建项目,移植程序,不能直接改个CPU

如下:Warning : C4401: Recursive comments not allowed



L4021: Incompatible derivative: HCS08 in previous files and CPU08 in current file (OS_CPU_A.ASM.o)

主要是返回参数不对,

使用特权

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

本版积分规则

35

主题

137

帖子

1

粉丝