NTK宏的问题,请高手帮忙解决

[复制链接]
1581|4
手机看帖
扫描二维码
随时随地手机跟帖
int3|  楼主 | 2008-10-30 12:54 | 显示全部楼层 |阅读模式
se, AC, rim, DM, mac
编写一个在4K范围内调用宏,在跨页调用后导致标号地址出错问题
宏如下:
MCALL    MACRO    NUM
    IF    (NUM>>11)==($>>11)
    CALL    NUM
    ELSE
    CALL    $+2
    JMP    $+2
    JMP    NUM
    ENDIF
    ENDM
如果改为:
        MCALL    MACRO    NUM
    IF    (NUM>>11)==($>>11)
    nop
    CALL    NUM
    nop
    ELSE
    CALL    $+2
    JMP    $+2
    JMP    NUM
    ENDIF
    ENDM     
就没问题。

有朋友说由于不对称引起的,但下面的宏也没问题。
MSET    MACRO    NUM
;对位NUM,置1
;数据,位,如400H=40H的0位
    IF    ((NUM>>11)&07H)==0
    IF    (NUM&0FH)==0
    ORIM    (NUM>>4),0001B
    ELSE
    IF    (NUM&0FH)==1
    ORIM    (NUM>>4),0010B
    ELSE
    IF    (NUM&0FH)==2
    ORIM    (NUM>>4),0100B
    ELSE
    IF    (NUM&0FH)==3
    ORIM    (NUM>>4),1000B
    ENDIF
    ENDIF
    ENDIF
    ENDIF
ELSE
    IF    (NUM&00FH)==0
    LDI    ACC,0001B
    ORM    (NUM>>4&7FH),((NUM>>11)&07H)
    ELSE
    IF    (NUM&00FH)==1
    LDI    ACC,0010B
    ORM    (NUM>>4&7FH),((NUM>>11)&07H)
    ELSE
    IF    (NUM&00FH)==2
    LDI    ACC,0100B
    ORM    (NUM>>4&7FH),((NUM>>11)&07H)
    ELSE
    IF    (NUM&00FH)==3
    LDI    ACC,1000B
    ORM    (NUM>>4&7FH),((NUM>>11)&07H)
    ENDIF
    ENDIF
    ENDIF
    ENDIF    
ENDIF
    ENDM
请高手帮忙解决
int3|  楼主 | 2008-10-30 17:04 | 显示全部楼层

本来听说NTK完全解决宏的问题才开始使用的。我打电话到上海说是编译器问题。不知道NTK的编译器在经过怎么多的版本后还存在多少问题。
看来做完这个项目后,又要和NTK说再见了。

使用特权

评论回复
warm_ice| | 2008-10-31 13:32 | 显示全部楼层

这样

编译器对宏的支持不是很完美,不建议客户用比较复杂的宏,使用一些比较简单的是没有问题的.

做单片机的有很多厂家,每一家的编译器都会有自己的优势和不足,您不能因为中颖编译器对宏支持的不完美就臆断编译器存在很多其它问题,这样是没有任何根据和道理的.
选择是否使用中颖MCU是您的权力,无论如何,我们都会全力做好我们的服务工作.

使用特权

评论回复
int3|  楼主 | 2008-11-4 10:19 | 显示全部楼层

不支持C,如果连宏也做不好,会给调试和维护带来很多麻烦。做不好就不要推,直接用机器码编好了。

使用特权

评论回复
warm_ice| | 2008-11-4 14:58 | 显示全部楼层

对宏支持不好,确实会给喜欢用宏写程序的客户带来麻烦,我理解您的想法.

使用特权

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

本版积分规则

29

主题

327

帖子

6

粉丝