原创 谈谈我对C51语言的看法

2008-5-17 00:57 2141 6 6 分类: MCU/ 嵌入式
目前单片机的编程中,C51语言可以说是十分盛行,这种语言我也用过,但基本上都是用汇编语言.
C51语言的好处是可读性强、移植性好、浮点运算,除此之外没有别的好处了.我们不妨将两种语言作一个比较:
1、效率方面:我曾对编译后的C51语言分析过,可以发现由它生成的代码数量,至少是汇编语言的两倍以上,有的甚至高达十倍以上.占用空间大了,效率自然低.
2、移植性:C51的可移植性是比汇编好一些,但是单片机程序不同于微机控件程序那样通用,几乎没有一个程序是可以到处移植的.单片机中最常用的移植程序大概就是运算子程序了,在这方面,汇编格式的运算子程序移植起来一个也不比C51逊色.
3、浮点运算:以我的感觉,单片机不适合采用浮点运算,我曾经做过试验,编译了一个1.2+2.3的浮点运算,编译后代码长达2K多,完成这个运算所需要的时间就不用说了.我从八四年就开始研究单片机,到现在做过的系统中,含有单片机的超过五十项,所有系统中的运算,全部都采用定点运算,几个定点子程序成了法宝,代码效率非常高,请看下面的一段:

;W = W130 * (130 / Dia) * (130 / Dia) = W130 * 16900 / (Dia * Dia)
CalAndMem:      MOV     R5, SetPie130War1H
                MOV     R4, SetPie130War1L
                MOV     R3, #HIGH 16900
                MOV     R2, #LOW 16900
                CALL    QKMUL                           ;W130 * 16900
;双字节乘法子程QKMUL
;(R3、R2)*(R5、R4)=R7、R6、R5、R4
;R3、R5、R7为高字节
                MOV     A, SetDiamt
                MOV     B, A
                MUL     AB
                MOV     R3, B
                MOV     R2, A
                CALL    NDIV                            ; /(Dia * Dia)
;二进制除法子程:NDIV
;入口:R7654=被除数,R7高字节,R32=除数,R3高字节
;出口:R76=余数,R7高字节,R54=商,R5高字节
;R765432用于参数传递,不用保护
                MOV     SetPieWar1H, R5                 ;当前缸径下的压力报警点
                MOV     SetPieWar1L, R4

--------
其中的子程序都是网上的成品,非常精简.

4、实时性:用汇编编程序的人都知道,单片机的实时性要求很高,经常需要计算这段程序需要多长时间,什么时间来中断,中断后执行多长时间,对原程序有没有妨碍,等等,这都是C51程序难以做到的.
5、节省内存:当然,这和代码效率是成反比的,同样的内存所能完成的功能也就大大提高.
永远记住:高性能的代码是用汇编语言编写出来的,而不是用高级语言生成的,高质量的PCB是有经验的工程技术人员用手工排出来的,而不是软件自动布线出来的.

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /3 下一条