|
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
发现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楼: | >>参与讨论 |
作者: 冷若寒 于 2007/4/23 16:01:00 发布:
续 为什么这句OSPrioHighRdy = OSFindHighPrio(); 译成汇编之后成了 STX 0X0119 STX 0X011A 而不是把A 中的数据给OSPrioHighRdy? |
3楼: | >>参与讨论 |
作者: 张明峰 于 2007/4/23 16:46:00 发布:
也许返回值是16位的. |
4楼: | >>参与讨论 |
作者: 冷若寒 于 2007/4/23 18:32:00 发布:
返回值 是8位的 返回值 是8位的 |
5楼: | >>参与讨论 |
作者: 冷若寒 于 2007/4/23 18:34:00 发布:
GO ON OSUnMapTbl[] 是一个放在FLASH里的数组 |
6楼: | >>参与讨论 |
作者: JerryBJ 于 2007/4/23 22:21:00 发布:
优化? 从函数OSFindHighPrio()的汇编代码看,返回的值确实是从A传递的,没有错。不知道你上下文是什么样子的,C编译器经常根据上下文做一些优化处理。得到的结果对吗?变量OSPrioHighRdy被赋值了吗?看MAP文件,该变量的存贮器地址? |
7楼: | >>参与讨论 |
作者: free_tech 于 2007/4/24 9:27:00 发布:
看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:00 发布:
有点进步 我看了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:00 发布:
续 现在我考虑是: 原来我的这段代码是在 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:00 发布:
有点含糊了 觉得要设置的选项太多,还不是很明白其中的意思啊? |
11楼: | >>参与讨论 |
作者: 冷若寒 于 2007/4/27 16:05:00 发布:
续 OS_CPU_A.ASM 是一段汇编代码 |
12楼: | >>参与讨论 |
作者: 冷若寒 于 2007/4/27 16:08:00 发布:
关于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:00 发布:
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) 主要是返回参数不对, |
|
|
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入 |
Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号 |