您的位置:首页技术文栏综合技术
内容搜索:
阅读内容
背景:#EDF0F5 #FAFBE6 #FFF2E2 #FDE6E0 #F3FFE1 #DAFAF3 #EAEAEF 默认  

C51 库函数(FrankLin) 的一些bug

[日期:2008-08-04 ] [来源:net 作者:佚名] [字体: (投递新闻)

头文件:intrins.h
库函数:_crol_()
编译器版本:3.20
原函数反汇编如下(截取自程序段):
        ...
        mov     r0,#01h         ;var=_crol_(var,1)
        mov     r7,06h          ;var's address is 06h,temp var
        mov     a,r7
        inc     r0
        sjmp    jp2
jp1:
        rl      a
jp2:
        djnz    r0,jp1
-->     ;此处并没有将数据写回var(address is 06H)
        rrc     a               ;out_dat=var&0x01
        mov     0a2h,c          ;
        ...

相同的函数在keil7.01下编译为:
        ...
        mov     r7,44h          ;var=_crol_(var,1);
        mov     r0,#01h
        mov     a,r7
        inc     r0
        sjmp    jp2
jp1:
        rl      a
jp2:
        djnz    r0,jp1
        mov     r7,a            ;此处将数据写回var(address is 44h),ram var
        mov     44h,r7
        ;以下为其他操作
        mov     a,44h           ;out_dat=var&0x01
        rrc     a
        ...


    相信现在有很多人仍习惯于使用以前的franklin命令行编译器。至少我就一直在用。
写好一个批处理 , 一条命令完成全部工作,很舒服。不过希望那些怀旧的单片机程序
开发者,以后要慎用它了。FranklinC库中其他函数是否有问题,我不知道。不过既然
keil编译出来的程序没问题,那么我们不妨全都转到keil下。

 

阅读:
录入:面面

推荐 】 【 打印
本文评论
      全部评论
发表评论


点评: 字数
姓名:
站长推荐