登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

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

作者:冷若寒 栏目:单片机
发现CODEWARRIOR 的一个奇怪问题??帮忙
我观察到一个关于编译器的问题,不知道是什么问题,当然我不是怀疑编译器的本身的问题!请大家帮忙分析一下:下面是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


2楼: >>参与讨论
冷若寒

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

STX 0X0119
STX 0X011A


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

3楼: >>参与讨论
张明峰
也许返回值是16位的.
 
4楼: >>参与讨论
冷若寒
返回值 是8位的
返回值 是8位的

5楼: >>参与讨论
冷若寒
GO ON
OSUnMapTbl[] 是一个放在FLASH里的数组

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

7楼: >>参与讨论
free_tech
看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楼: >>参与讨论
冷若寒
有点进步
我看了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楼: >>参与讨论
冷若寒


现在我考虑是: 原来我的这段代码是在 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楼: >>参与讨论
冷若寒
有点含糊了
觉得要设置的选项太多,还不是很明白其中的意思啊?

11楼: >>参与讨论
冷若寒



OS_CPU_A.ASM 是一段汇编代码

12楼: >>参与讨论
冷若寒
关于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
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)

主要是返回参数不对,



参与讨论
昵称:
讨论内容:
 
 
相关帖子
我在MCF52221DEMO板上用CW调试,总遇见这个问题,怎么解决?
为什么在调试的时候出现ILLEGAL_BP,这是什么意思,而且频率还变了
有没有人那FSL的产品做开关电源的?
请教张教主和各位高手
有没有在杭州作FSL 单片机的兄弟呀?
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号