一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 7168|回复: 34
收起左侧

[其他综合] 〖探讨〗聊聊汇编与C

  [复制链接]
发表于 2010-10-19 13:47 | 显示全部楼层 |阅读模式
本帖最后由 cosine 于 2010-12-11 17:28 编辑

/********************转贴说明********************

本文原于今年3月22日发于长汀,原链接:
http://ctwxdc.512j.com/viewthread.php?tid=39429

此次转贴一来是想留个底,二来也是希望能有更多的讨论和交流。
这个东西写得比较早了,是当时的思考与理解,现在看可能不对。
但考拉向无修订旧文的习惯,毕竟那是当时真实的东西…………
留个以前书本常说的“历史局限”也好,可以更好的学习与进步。

欢迎大家拍砖,但不要屁股决定脑袋,也不要攻击文以外的东西。
我们长期以来由于教育、体制及文化的影响已经习惯于标准答案,
却忘记了格物致理的本意,当然用现在流行的应该说探索与发现。
其实很多时候是无标准答案的,所谓标准也是有其前提与条件的。

故找寻最适合你的东西就是了,也就是说要适合具体情况与实际。
用另一种流行语说就是:“一切从实际出发,实事求事…………”
就多罗嗦这么多,PS:其实马哲里倒也不全是废话 ………………

********************以下正文********************/

聊聊汇编与C

早想开个贴讨论一下汇编和C,因为熊前一段在写《重温单片机》系列贴时,因为那会只会用汇编,就有很多朋友想看C的例程。因为C其实也会,只是不会51的C,就想发贴和大家讨论一下两种方式的区别和各自的利弊。但后来想想还是暂时作罢,因为51的C还不会用,连个象样的程序也没写过,实难深入讨论。最近C51初步上手,作了一些小程序及驱动基本能作到和汇编一样的效果(比如沈老师的点阵屏),于是想就此问题开个贴大家讨论一下。顺便说一下《重温单片机》还会再继续的,停止的原因一是想C熟悉后两种语言都使用,重点的比如12887钟的实验也想用C重写一遍;二是近来确实有事,忙着看书等事,除了例行的淘垃圾出垃圾,还在作辉光管测试仪(逻辑完成DC-DC待作)以及放电器(正在用C完成逻辑部分)等,所以暂时未顾上。过几天把钟那部分完成了。

汇编和C熊以前都是在计算机课程里学的,汇编学的是8088,C学的是标准C(作实验用Turbo C 2.0)。当时在不同的课程里学的,C主要的目的是编程训练(当时还同时学Pascal,开设的理由据说是结构性好),而汇编主要是为一些其他课程如微机接口等服务的,从没想过用汇编来写程序。后来学51才又学汇编并真正用汇编写程序(那会也从没想过用高级语言来作),不过有了8088的基础,再学51的汇编省不少事。其实汇编虽然不同平台间差别很大,但主要是指令和结构差别,编程方式及技巧基本是一样的。不过由于一直在不同的场合分别使用,总感觉高级语言与汇编没什么联系,离硬件近就用汇编,离硬件远就用高级语言。真正体会汇编与高级语言间的差别与利弊还是这次,因为是同样的东西用汇编和C分别写一遍,再分别看实现的效果和效益。

不管用什么来写程序,我们一定要清楚我们在作什么,而不要沉迷于指令与语句中。记得很早就看到过一句话:程序=算法+数据结构,也就是说一个程序的关健是实现算法与数据结构,而算法和数据结构支撑着我们最终要实现的目的。一个问题在解决时首先分解成不同模块和层次,再用相关的算法和数据结构来描述,最终用程序设计语言来实现这些算法和数据结构。也就是说要有一个从整体到局部的概念,自顶向下的来完成整个结构,而不是一开始就钻入细节。所以首先要在逻辑层上把问题想清楚。

一般我们遇到大的问题常用的办法是分而治之,也即把一个复杂的问题分解为许多相对简单的问题进行解决。计算机里常见的分解方式是分层+模块化。分层也就是从最高的也最贴近应用的部分到最细节的硬件划分为许多层次,每个层次里再根据功能划分为许多的模块。这样作的好处是一是问题分解容易解决,二是各层可以实现独立性,也就说由于实现了分层,如果各层间的接口是标准化的,这样各层内部的变化不会影响到其他层。这样的例子在计算机中很多,比如网络协议的分层(OSI,TCP/IP),比如系统结构的分层,比如操作系统结构的分层等。前两天讨论一个问题时熊也提到了单片机程序的分层:
http://ctwxdc.512j.com/viewthread.php?tid=39361
其实这里层次的划分是抄《51系列单片机应用软件编程技术》这本书里的:
http://ctwxdc.512j.com/viewthread.php?tid=38799
分层的好处就是层内部的实现对上一层以及更高是“透明”的,也即上一层以及更高层是不知道也不需要关心的。举个时钟的例子,应用层只需要向系统层的时钟读写模块发出读时钟及写时钟的命令就行了,不需要知道是如何实现的。而系统层的时钟读写模块向驱动层的1302驱动程序发出读写数据的指令,但具体1302读写时序如何实现系统层是不关心的,由驱动层的来实现。这样作的好处是什么呢?一是分别实现难度低,另一个就是某一层发生改动不影响其他层,代码也容易复用,好维护好移植。比如哪天1302换成PCF8583,只要把驱动层的读写程序换成I2C的,再修改一下系统层与硬件相关的地址读写方式等就可以了,应用层完全不需要改动,只需要修改驱动层以及系统层的一部分即可。

扯了半天好象一直还没说汇编和C,呵呵,熊写东西就容易下笔千言离题万里,现在拉回来说。当我们写一个单片机程序时有时会意识不到这些层次,实际要作的也是事情不外乎安排数据结构和算法来实现逻辑上的功能,也即最高层应用层的功能。一般要作的事情不外乎两件,一是分配存储空间,二是实现逻辑结构。前者实际就是实现数据结构,后者就是实现算法。例如要在LED数码管上显示内容就需要一个显示缓冲区,这实际就是需要一个数组。再比如需要在主程序里不断的扫描键盘同时显示内容,就是要用查询算法来循环实现。说到底用不同的语言来写程序就是要用程序的语句结构来实现这些算法和数据结构。下来看看汇编和C有哪些不同。

高级语言和汇编语言在这两方面差别很大,高级语言有相当的优势。先看数据结构的实现,汇编语言对数据结构没有直接的支持,只提供了一些有限手段来支持少量的数据结构(比如变址寻址及间接寻址对数组提供了一定的支持),而且不同的平台相差可能很大(实现方式不同,甚至缺少相关的指令)。我们要定义一个数组,只能自己定义首址,然后把首址送进相关寄存器,进行间址寻址或变址寻址,这实际就是数组的操作了。至于更高级的数据结构如队列等,就只能自己想办法了,呵呵。栈有的单片机提供了实现比如51,但有的单片机如PIC虽然有栈但只保存程序地址,如果你要保存其他现场数据比如寄存器什么的,对不起,自己想办法实现吧。C则提供了丰富的数据结构实现手段,底层的存储分配和安排对我们来说是“透明”的,也就是说不需要关心的。同时C在子程序存储空间的隔离上也有优势,比如局部变量的概念。汇编语言如果定义一个存储单元就等于定义了一个全局变量,我们必须自己去考虑不同子程序访问的冲突和隔离,如果要实现一个存储单元的复用(比如Rn),就必须在进入子程序时自己PUSH入栈、子程序返回时再自己POP出栈(也可以用通用寄存器组切换的办法,但这依赖于51的结构,换个平台就不一定适用),一旦处理不当就可能有问题。而C你就不用操心了,这些事都由编译程序去作。

再看对算法的支持。汇编只由原始的单片机指令提供了有限的算术及逻辑操作,其他的基本都得自己去想办法。比如熊想作一个放电器,需要用时间乘以电流得出容量。51只有单字节乘法,熊得考虑是用二进制表示还是BCD,然后还得考虑多个字节的操作。至于C熊只要定义足够表示最大值的数据类型(INT还是LONG),然后一个*就OK,至于MCU怎么干的活,熊不知道也不关心。此外一个算法在一个平台上实现了,换一个平台比如PIC,麻烦了,16系列没乘法指令,你得自己去移位去加来实现单字节乘法,再象51一样实现多字节乘法。而用C就不这么麻烦,PICC编译器会替你作好一切的。还有逻辑操作,在C中我们进行一些逻辑操作时只需要给一个逻辑表达式就行,比如i<16,到了汇编里麻烦了,51没有比较大小的指令,只有判断是否相等,如果要知道大小还得判断相关标志位。换个MCU指令又是不同的,还得自己去干,而在高级语言中,这些都是编译器的活,这些“脏活累活”对于我们来说是“透明”的。

综上所述,在算法和数据结构的实现上,C(高级语言)相比汇编有着天然的优势,这是无庸置疑的。由于高级语言作到了底层细节的透明化,使得我们在编写程序时可以集中精力去解决应用层的逻辑问题,而不必考虑细节问题,可以大大提高解决应用问题的效率,节省时间。但并不是说高级语言编译器作好了底层的封装我们就不用考虑其他的分层和模块化了,我们一样是要考虑的。在更高的层次上一样要划分层次分而治之,以实现良好的可维护性和可移植性。一些高级语言编译器提供了现成的库函数(比如CVAVR提供了很多驱动程序库),就是替我们作好了分层,但由于是某一个平台上的库,所以如果跨平台移植时这些活我们就得重新干一次。同时,如果汇编语言在编程时使用了分层的概念,在移植以及代码复用时也会省很多事,此外在调试以及故障定位及排除时也能提供很大的方便。

事物都是一分为二的,前面我们只考虑了算法和数据结构的实现难易与方便,却没提到另一个问题,那就是实现的效率。高级语言编译器是按照相应的算法把高级语言的语句翻译成机器指令的,这个翻译过程由于是机器来作,毕竟比不上人脑的精打细算,所以在效率上往往比不上汇编语言(一一对应机器指令)写出来的程序。当然,如果人脑没想清楚可能比不上编译程序干出来的活,但那是另外一回事。C我们写起来是舒服了,但可能一编译出来的东西效率不高,如果写的方法再不恰当,那就是我们很舒坦,但MCU很累,呵呵。比如前几天写沈老师的点阵屏驱动,由于扫描的行数比较多,用汇编写出来的延时1ms就不觉得闪烁,而用C写出来的就觉得闪的厉害,怎么改都不行,最后只能把延时改为0.5ms才行。所以在效率上汇编语言有天然的优势。

还有在与时间特别相关的场合汇编语言也有天然的优势。比如我们用软件延时,用汇编可以精确到微秒级,我们可以一条指令一条指令的计算,一个机器周期一个机器周期的掐,一次定时精确到几个微秒并不难。而C不行,一个循环到底多少个机器周期由于是编译程序干的,对于我们是透明的所以我们根本不清楚。要想搞清楚只能借助于软仿真,然后慢慢的调,但仍然达不到汇编的精度(熊作放电器,最后还是每5次中断会多计2微秒,不知道什么原因,无法再调整,不过已经满足需求就算了,1个月几秒的误不影响放电器的计时)。

因此在一些需要精确定时以及实时处理的场合,汇编还是有用武之地的,另外一些与硬件密切相关的地方汇编也是需要的。比如操作系统的底层一般都有一部分是用汇编写成的。此外由于我们用C写的是MCU的程序,不象PC很多东东由操作系统来处理,所以一些和硬件相关的我们还是要管的。因此MCU的C编译器都针对具体的平台作了一些和硬件相关的扩充,具体到C51就是象sfr、sbit一类的,另外我们还可以使用象code、bdata一类来约定存储的分配。对于外部扩充的东西我们还可以用absacc.h来进定端口的定义来实现具体地址的访问。但是虽然C51提供了一些可以操作底层的手段,但除非特别必要的情况下,不要使用这些底层的手段,以保证程序的良好分层结构及底层实现对上层的透明,这是用惯汇编的朋友开始用C时容易出现的问题,比如用absacc.h来指定变量在RAM里的位置,调用_crol_来实现移位等,现在用是没问题,但换个平台如AVR你的程序是不是要改动很多呢?

最后总结一下。C作为高级语言在数据结构及算法的实现上相对汇编有天然的优势,这使我们可以把精力主要集中在应用逻辑的实现上而不必关心很多底层的细节,同时由于编译程序作好了底层的层次化和功能封装,使得程序的可维护性及可移植性大为提高。汇编语言则在效率与精确性上见长,因此在一些与硬件密切相关以及要求精确定时及时响应的场合上仍有用武之地。如果你编制较大的应用,建议用C,省时省力容易实现,移植维护都方便。如果编制小的应用同时硬件资源较紧或对精确及实时性要求较高,可以用汇编。另外要想写好MCU的C,学习汇编是必要的,不一定非要使用,但至少要了解底层的工作原理,不然是写不好高效率的C程序的。还有就是如果想玩很多个平台比如AVR、PIC、ARM等,那C是必须的。

===========================================

多说两句时间和空间的问题。我们在编写一个程序时经常要进行时间和空间的权衡,同一个问题可以用时间优先的方法来写,也可以用空间优先的方法来写。例如:
http://ctwxdc.512j.com/viewthread.php?tid=39238

流水灯的显示输出可以用移位的方法来写,也可以用查表的方法来写。当你的应用不大而MCU存储空间有余量时,建议尽量考虑查表的方法,这样以后更改起来很容易而且实现逻辑简单。

再有就是如果应用不是很大对于实时性要求不强时,宁可把逻辑写得清楚些,哪怕影响到一些效率和浪费一些空间,只要不影响到实现,那么可维护性和可移植性(代码复用)永远都是应该非常重视的问题。

时间和空间的权衡是非常重要的,一个良好的权衡结果对于整个系统的实现以及今后的维护及代码复用都是影响很大的。这个话题也很大,以后有空再接着聊。

{:3_472:} {:3_472:} {:3_472:}
发表于 2010-10-19 15:22 | 显示全部楼层
占个沙发给坏熊捧个场,熊谈到C和汇编,俺顺便转一篇关于单片机上的C和basic的帖子吧,原创作者已不可考,转自http://www.diyzone.cn/forum/view_9312.html,在此对作者表示感谢!

Basic相对于C,就好象C相对于汇编,按教科书上的划分,basic是高级语言,C是中级语言,汇编是低级语言,这里的高级与低级的划分,和生活中的划分不同,不是说高级的就好,低级的就不好,而是指与硬件关系的紧密程度,越高级的与硬件的相关程度越低(比如Prolog),越低级的与硬件相关程度越高(比如机器语言)。

打个比方,比如建房子,0和1是沙土,所有的程序都是由0和1组成的。机器语言之上的各种语言提供的语言要素(函数库、过程库等)相当于利用沙土做成的预制标准件,这种预制件是标准的一个个材料块,越高级的语言,其材料块越接近最终的房子的样子。汇编的预制件是红砖的话,C的预制件就相当于是预制的地板和墙壁,basic的预制件相当于是一个房间。建一座房子,用basic,可能只需要把厨房、厕所、客厅、睡房、书房这几个预制件一拼起来,就齐活了,工期半天;用C来做的话,你得拿这些预制板先拼成一间间的房,再N间房拼在一起才成为一套房子,工期可能要一个月。用汇编呢,那就是拿红砖一点点砌,先砌好墙再砌成房间,再一点点拼成一整套房,所有的工作都得自己去做,工期可能要半年。

但话说回来,因为高级语言的都是预制件,因此,用它建出来的房子,基本就是离不开预制件的样子了,房间是统一大小、客厅是一样的规格。如果你需要造一所与众不同的房子,恐怕这些预制件不能满足你的要求,比如你要求100平的客厅,可预制件只有20平和40平的规格,这下就麻烦了,你需要定制(从第三方定制你需要的部件)。而用汇编就没有这样的问题,从砖头起,你要建造什么样的房子可以随心所欲。

从做一个程序看,使用高级语言省功夫,但你只能使用预制件,如果生产编译器的厂家没有提供预制件的,你的想法就要受到限制。使用低级语言可以随心所欲做任何事,不受编译器厂家的限制,但你得多花费N倍于使用高级语言的精力。孰优孰劣,很难一刀切,完全取决于你要完成什么样的任务和你愿意花费多少精力。
[转帖]看到有些朋友们对MCU使用basic语言有所疑虑,在此我说几句
看到有些朋友们对MCU使用basic语言有所疑虑,在此我说几句  
  

很多朋友们使用过原来武汉力源的PS58BS、PS1008BS 内带basic解释程序的单片机,也用过VB,对于basic的执行速度比较慢有深刻印象,但是,朋友们应该以与时俱进的眼光来看待这个历史问题,当初basic语言确实有这样那样的历史问题,但是,那只是过去了,现在工业控制中,上位机监控软件绝对是VB为主流,看看组态软件(特别是组态王)就知道了,而下位机中,虽然C语言占有绝对优势,但是,并不是basic语言就根本没有出路,现在MCU中,basic应该说是个不可忽视的一个分支,因为现在的MCU的basic编译器并不是解释型的,我收集到的AVR的两种(bascom、fastavr)、PIC的一种(mikroBasic)以及51的一种(bascom)都是编译型的语言。  

C语言繁琐,主要繁琐在语言表述采用符号非常多,符号不容易记住;C语言灵活,主要灵活在直接面向寄存器操作和对于器件的支持。但是,我看到AVR开发软件中,很多都采用了官方的库函数调用,别的不说,就拿CodevisionAVR来说,它对很多外设器件支持比较好,比如1wire、LCD、I2C、SPI等等,特别是代码向导可以在你的程序的光标处直接插入一段由官方写好的代码来支持你所使用的器件,很大程度上方便了使用,使开发难度下降了很多,但是朋友们注意到没有?这个代码向导(或者叫做代码自动生成器)同basic语言里面的调用语句有何不同?我看到只是调用方式不同,其余没有任何实质上的差别,如果是这样,那为什么不用简单的语言表述方式来实现?也有人说C语言库函数可以自行编写,这点我承认,但是看到了BASCOM-AVR和BASCOM-8051等软件都可以编写自己的库函数,就算不能编写库函数的也可以用$include语句调用,其实,真正编写库函数的时候,自己编写肯定不如官方编写的准确,而且也不如官方对寄存器处理得那么得体,自行编写库函数有一个目的我听说就是为了骗过老板,为了维护自己的技术地位,因为专用的库函数可以用很简单的语言表述出来,而只拿到这个主程序的人却毫无用处,必须要专门的库函数才能运行。相比之下,basic语言由于是标准语言而不是”自制“语言,所以程序可读性、可重现性要好得多,这一点上,我认为作为决策者来说更为重要,保持技术的连续性远比留住一个所谓的“高手”重要。  

basic语言简单,主要简单在他的语言描述是采用近似自然语言表述的,而不是难记的符号;basic语言看上去不灵活,那是因为很多人习惯了依赖basic语言本身的库函数来实现功能,离开了函数语句就无从下手,但是,我看到了也有不依赖basic语言自身的函数而实现不少功能的,比如panxiaoyi先生的那个BASCOM-AVR和BASCOM8051驱动5110LCD的例子就是个典型,本来BASCOM并没有直接写3310兼容LCD的语句(这一点比fastavr差一些),但是他却实现了这个功能,而且实现得非常好,试想想看,如果把这段程序改造改造,变成$include"XXXX.bas"会是个什么样子?那不还是等效于自己编写的库函数?  

关于basic语言在MCU中使用时运行速度问题,一直是使用者迷惑的问题,其实,用什么语言编译,最关键的是这块芯片的内部硬件结构能否有效支持这种语言运行模式。举例来说,在这个论坛里的人大多数用过51,都知道51有两个累加器(A、B),也都知道汇编语言用在51上运行速度非常快,但是,如果用高级语言编写51的程序,估计慢速处理还可以,快速处理肯定要大打折扣的,就算现在51高级语言的老大—Keil C51都是如此,因为高级语言运行时由于语言设计原因,需要保存堆栈和中间结果,那么对累加器的操作将会非常频繁,因为所有的数据传送和处理必须要累加器完成,由于累加器硬件限制,所以无论用什么样的高级语言,都几乎没太大的差别,如果累加器比较多,比如AVR,那么累加器瓶颈将不复存在,使用高级语言将会有无可比拟的巨大优势,所以对于高级语言来说,累加器越多,高级语言编译效率肯定也越高,这一点在80C196系列单片机上得到了充分表现,256-512个通用寄存器可以使196的运行速度达到最高,而PIC由于是单累加器结构,所以汇编速度快,但是高级语言普遍比较慢,不论C语言还是basic语言都是如此的。因此说AVR是第一款专门为高级语言而设计的MCU并不为过,注意,这里高级语言包括C语言、basic语言、pascal语言。  

实际使用效果,包括PWM调节和PID调节程序,以及触发可控硅的一些程序都表明,basic语言在AVR运用中运行速度完全可以达到C语言的效果,这个请朋友们参考MCS公司的网站,上面的应用笔记(application notes)已经详细讲到这一点,另外,朋友们也看到了本站basic语言的一些实例,也可以判断出这个道理,并且,据我使用的一些情况来看,basic语言在运行速度、代码效率上并不输于C语言。当然,每种编译语言还是各有差异的,但是这种差异综合下来最多只有3%-5%,不足以使“日月换新天”。优化代码其实很多时候还容易出问题,还不如不优化为好,至少asm程序思路没有被打断为碎片。  

basic语言最大优势就是语句好记,几乎不要记忆就可以上手,而且所有basic语言都可以符合结构化特征,这只是编程者的问题,而不是语言的问题,巧妙使用语句和组合,可以实现很多“不可能的任务”,这有赖于程序设计和对系统工作原理的深刻理解。优秀的程序员,并不是使用GCC什么的才是高手,basic语言里一样有,例如favr老大就是个典型例子,“菜刀是切菜的,但千万别以为菜刀不能用来砍人”!!  

PS:我说所有上述basic编译器都是编译型不是没有根据的,bascom我不说了,这里bascomchina先生最有发言权,fastavr自己看汇编语言生成就知道了,而PIC的basic语言mikroBasic是可以直接生成asm的,下载那个软件,打开看看就一目了然,生成的asm文件也堪称完美,风格与fastavr非常类似。fastavr和mikroBasic转变成汇编语言以后开头都没有对中断和SFR清除,我认为这不一定是个bug,因为硬件复位可以完全保证SFR和中断完全清除,原来Z80年代就这么用的,51汇编年代还是如此,只是对I/O口清零而已,如果心里觉得不踏实,可以用一些相关语句做这个初始化工作,呵呵(心理)安全第一。  

希望朋友们对basic语言放开手脚,尽情享用,特别是对于AVR,ATMEL给我们提供了这么好的芯片,不用实在浪费。  
 楼主| 发表于 2010-10-19 15:43 | 显示全部楼层
呵呵,BASIC是不错,问题是现在很多人已经不是象我们那会从BASIC入门了,教学语言多数不是C就是PASCAL,重学BASIC也是一个负担呀,呵呵.另外不知道现在单片机的BASIC是早期的标准BASIC还是后来的变种结构化BASIC(象TRUE BASIC或TURBO BASIC),如果是变化的,复习也是有成本的.

PS:该文的基础是多累加器MCU,象AVR/196一类的,而51和PIC仍然有瓶颈...
发表于 2010-10-19 16:08 | 显示全部楼层
从头入门,basic也比C和汇编更容易上手,毕竟basic叫“初学者代码指令”,语法和保留字都更接近自然语言。关键是学的人目标是要达到什么程度。如果只是要求自己能编程序让单片机工作,实现一些自己的想法,basic足矣,如果是立志从事开发以此为职业的,就应该一开始就学C和汇编并精通之。
网上文章来来去去拿差几个毫秒说事,其实自己玩的,精确延时并不太重要,如果你需要做个准确的时钟,有专门的时钟芯片可用啊。再说了,编译器厂家提供的delay函数,虽然不能保证非常精确,但还是靠谱的,差不了太多。
至于51/低端PIC这些只有一两个累加器的MCU,是否能用basic?我想存在即合理,市场已经证明了,如果编译器的效率低到会影响应用,这软件还能卖吗?
 楼主| 发表于 2010-10-19 16:14 | 显示全部楼层
从头入门,basic也比C和汇编更容易上手,毕竟basic叫“初学者代码指令”,语法和保留字都更接近自然语言。关键是学的人目标是要达到什么程度。如果只是要求自己能编程序让单片机工作,实现一些自己的想法,basic足矣,如果是立志从事开发以此为职业的,就应该一开始就学C和汇编并精通之。
网上文章来来去去拿差几个毫秒说事,其实自己玩的,精确延时并不太重要,如果你需要做个准确的时钟,有专门的时钟芯片可用啊。再说了,编译器厂家提供的delay函数,虽然不能保证非常精确,但还是靠谱的,差不了太多。
至于51/低端PIC这些只有一两个累加器的MCU,是否能用basic?我想存在即合理,市场已经证明了,如果编译器的效率低到会影响应用,这软件还能卖吗?fat 发表于 2010-10-19 16:08 https://www.yleee.com.cn/images/common/back.gif


主要看干嘛,如果只是业余玩玩没什么,找大容量片子就是了. 几个毫秒如果只是少量语句无所,循环时就厉害了.存在确实可能意味着一定程度上的合理,但是否常用就是另一回事了,也就是份额问题.对于厂家来说内核是一样,移植一下边际成本是很低的.下来就看有多少人用了,用是肯定有人用,但也要看适用的场合,我还是坚持那个观点,关健要看是不是适合你的用途.

fat不是很随大流吗?这会咋不随主流的C了?
发表于 2010-10-19 16:51 | 显示全部楼层
C我也学过一点点,Basic是准备要学,呵呵,我自己定位非专业人士,业余玩的,看jun427老师把basic用得出神入化,所以想学
发表于 2010-10-19 18:24 | 显示全部楼层
不是电子这一行的,弄单片机纯属找乐。 感觉工作的话用c 方便, 玩的话用汇编。
最高级的编程语言就是领导的话,只要说:你们开发个xxx,要在两个月之内完成。。” 两个月之后,这东西就出现了。
发表于 2010-10-19 20:02 | 显示全部楼层
...最高级的编程语言就是领导的话,只要说:你们开发个xxx,要在两个月之内完成。。” 两个月之后,这东西就出现了。
老弹弓 发表于 2010-10-19 18:24 https://www.yleee.com.cn/images/common/back.gif



    精辟啊
 楼主| 发表于 2010-10-19 20:28 | 显示全部楼层
不是电子这一行的,弄单片机纯属找乐。 感觉工作的话用c 方便, 玩的话用汇编。
最高级的编程语言就是领导 ...
老弹弓 发表于 2010-10-19 18:24 https://www.yleee.com.cn/images/common/back.gif



    如果有计算机高级语言基础的话还是用C好,如果一点基础都没有,确实可以考虑BASIC.
 楼主| 发表于 2010-10-19 20:30 | 显示全部楼层
C我也学过一点点,Basic是准备要学,呵呵,我自己定位非专业人士,业余玩的,看jun427老师把basic用得出神入 ...
fat 发表于 2010-10-19 16:51 https://www.yleee.com.cn/images/common/back.gif



    fat你好意思说学过一点点,仿真器都用过的人倒来这里装大尾巴鹰了,HOHO,以你的计算机基础,还学什么BASIC,哼哼…………,在俺看来,你不是蛋疼了就是想在鼻子里插葱了…………:63;

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-5-19 12:46 , Processed in 0.074519 second(s), 48 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表