知之者不如好之,好之者不如乐之
分类: IT业界
2012-03-26 19:44:50
读者gkxlff 在3月23日的来信如下:
尊敬的老杨同志
您好!
很高兴这么快就收到了您的回信!
我一般是网购,书从卓越网上买的。
。。。。。。
非常感谢您推荐的那几本好书,其实我也粗略读过郭老师及林锐老师写的书。一般读的是国外的书,国内的也读过,但好多自学起来没什么兴趣,大都像数据手册。
从您写书的定位来看,我觉得写得非常好了!
首先篇幅结构安排就很好,对于有单片机和C语言基础的读者来说,能很好的快速提高。书中一开始就把结构化、模块化编程介绍给读者,这对于硬件人员来说,是个很好的事。还有静态变量、数组、结构,这些好东西您也一一介绍了。
其次读您的书就是在跟您交流,语言生动,读起来感觉特别亲切,好比在跟您学降龙十八掌,感觉您在一掌一掌的教。若不认真地读,就对不起您所花的心血。
另外我希望您能多教几掌,关于调试方法及技巧,毕竟调试很重要,好的程序要经过无数次调试,许多时候,知识是在调试的乐趣中学到的。
看门狗、EEPROM、USB接口、TCP/IP接口、485、各种工业总线的硬件与软件设计也重要。其次希望能看到更多关于,嵌入式系统算法设计、数据结构方面的内容。当然,这些也许能单独出书了,嘿嘿。
还有就是书中关于实物的介绍,若是把它们安排在最前面,能让者先有个感性认识,然后再讲理论方面的知识。
以上几点愚见,见笑了。
读您的书使我对单片机有了一个更好地认识:
单片机的工作原理,硬件部分是《电子技术基础》数字部分的升华,是一个复杂的数字电路。用汇编语言编程能很好地了解它的工作原理,因为那直接在跟硬件打交道,编程时要假设自己就是单片机。
您说,单片机的编程就是对其寄存器的控制。
通过改变特殊功能寄存器的值,来改变电路,从而改变功能。单片机的可编程,实际上是能改变这些寄存器的值。从数字电路的原理来看,其它数字器件其实也这样,对吗?
C语言对单片机编程,其实就是多了一些单片机的寄存器变量,通过对这些变量的操作来实现功能。其中用户自定义的变量,对应单片机中的RAM低128位。
所以说在使用一种微控制器的时候,得先了解一下它的体系结构,看看Datasheet有哪些寄存器及如何使用。
因为寄存器是:
软硬件之间的接口,内外部之间的接口,芯片设计工程师和应用工程师之间的接口。这样应用工程师就不需要关心内部电路结构,可以集中精力放在应用上。
C语言编程描述怎么解决问题,至于电路怎样实现的我们不用关心。 C时单片机好聪明,竟然懂得高级语言,就能很好的谈谈情,恋恋爱,想怎么表白,就怎么表白。
但我们还是在对硬件操作,还是操作机器,不过我听说比尔.盖茨让它变聪明了,操作系统解决了硬件管理问题,使用我们使用起来更加抽象。
汇编则只懂指令系统,跟机器打交道,得用它能懂的语言,而我们不是机器,又要站在它的角度去思考,明显有困难。编程时不仅要知道怎么解决待解决的问题,还得用汇编语言告诉单片机让它来怎么实现。要让笨东西变聪明。
(实际上做了两部分工作,1解决问题,2用汇编实现)
我也正在过渡到AVR,也在读您写的《Protues-ATmega8仿真》。
再次感谢您无私的奉献!!
最后,第17章,简易万年历,数据是读取了,LED好像不能正常显示。
P343 两处 _nop_(),_nop_(); 是不是印刷错误 _nop_(); _nop_();
单片机爱好者 gkxlff
祝:
工作顺利,生活愉快!
我的回信:
亲爱的读者,您好!
很感谢您对我的书评价这么高,您的评价基本说中了我写书的思路和要点。这本书不敢说是很好,但的确是我单独花了半年多的心血来写的,也总结了我近些年的工作经验、学习过程。国内的书大多是在校老师或公司出版的,大多的目的在职称或开发板,所以鲜见优者,不过像林锐、郭天祥、侯捷、程序匠人。。。。。很多老师的书还都是值得拜读的。
您在来信中提到,调试方法及技巧。有关调试方法,其实我在书中也浅显的讲了些,例如P37的“联合调试”、P57的“调试分析”等。有关调试的技巧,还是主要靠自己平时经验的总结。我很看重良好习惯的培养,这也是我在书中一再强调的。现在我写简单的代码(几千行)大多不需要怎么调试,测试出问题,马上就能想到问题出在哪个模块,大多去看代码就能发现问题。
另外,你提到看门狗、EEPROM、USB接口、TCP/IP接口等,51单片机大多没有内置看门狗,所以在书中没讲到,但就其原理,也就是一个定时器而已,只是一个特殊功能的定时器。EEPROM我们就IIC、SPI总线倒是提到了一点。其他的都是比较深的内容,都要有专业的教材来写。例如USB接口、TCP/IP接口,这都是可以单独写一本教材的。而且老杨水平也是有限的,带读者走进单片机的大门,这个能力还可以,但要提高为一个真正的“工程师”,老杨是不敢说这样的大话的。
关于书中的实物,我大多在用到的章节,先放置一些图片,然后做的介绍,还是没理解到你的意思,希望再来信时进一步描述你的想法。如果能更好的安排内容的排版,帮助读者,是我高兴看到的。
简单来说说,单片机的编程可以看作是对其寄存器的控制。但我并不希望我的读者就认识到此,还应该有更深入的认识。对寄存器的控制只是了解了怎么去操作单片机,但作为一个真正的嵌入式开发者,我们还要知道为什么要去这样操作,其内部原理是怎样的,因而我上封信推荐您找两本“老古董”来看看,当然直接看数据手册也可以了解单片机的内部结构。
我希望我的读者能轻松的走进单片机的大门,然后是进一步把一款单片机真正的吃透,不管是51、AVR还是PIC,但一定要真正的吃透一款单片机,然后再进一步提高,基于ARM、DSP等做嵌入式设计就容易走的深、走的稳。
如果临时用一款单片机,如果它的数据手册写的比较好的话,有了数据手册,我们几乎说就可以用来做电路设计、程序设计了。
低端的单片机像51、PIC等,大多都是在上面直接写程序的,而高级一些的如AVR、ARM,我们会用到BootLoad,也就是写一些基本的程序来引导系统,这样可以方便系统的基本环境测试和系统升级。我的电脑中的BIOS系统就是这个功能。
进一步区分的话,ARM通常又会和Linux等嵌入式系统结合来用。这就有了三层结构,BootLoad用来引导系统,操作系统做底层操作,然后才是我们的应用软件。这样,我们就不用关心底层操作了,直接写应用程序就可以了。
不过在嵌入式系统写应用程序,就没太大的嵌入式开发的意义了,和在电脑上写软件几乎一样了。作为一个嵌入式设计者,我们要追求BootLoad的设计和内置操作系统的移植、裁剪。这也是国内稀缺的人才。
说到BootLoad和嵌入式系统就要说到汇编语言了,这两者都要用到汇编语言。所以说,真正的嵌入式设计人员还是要懂汇编的。那我的书中为什么没讲到呢?这是因为我写这本书的目的是入门级的,有了学习单片机的兴趣,再去学汇编,也就不会感觉那么枯燥了。
就盖茨和他的微软,我并不是特别欣赏,我更欣赏乔布斯和他的苹果。我现在的手机是Windows Mobile 6.1系统,感觉连内存管理都没做好,像他的Windows操作系统一样:烂!乔布斯设计苹果的理念是简单、完美。这是一个设计者应该追求的,虽然在做产品时也要为其商业价值让步。盖茨是个很好的销售者,但乔布斯不仅把其产品高价销售了,而且其能引领电子业这么多年,其理念是更可贵的。建议你可以读一下《乔布斯传》,老外写的那本。
P343 两处 _nop_(),_nop_();
这两处不算错误,是我的编写习惯。在C语言中是可以这样写的。
老杨