电子常识
《像设计电路一样编程》系列博客文章由陈明计原创,在此特别鸣谢!
十九世纪六十年代末的开始的“软件危机”始终没有远离我们。即使像软件巨头微软,也是隔三差五的发布一个新的软件补丁。
与之同时,与计算机相伴相随的电子工业,也在蓬勃发展,却从未有过“电子危机”或“硬件危机”的说法。原因很多,但我认为很重要的一点是它们的开发方式引起的。
从表面看,电路的开发方法是图形形式;而软件的开发方法是文字形式。人对于图形的理解远比对对文字的理解来的容易和深刻,所以好书的一个要求就是“图文并茂”。人越容易理解当然越不容易出错。因此,现在图形化编程也是软件开发的一个研究方向。
本人将在业余时间研究一下软件编程方法,让编程就像设计电路一样方便。第一步使用C语言实现,以方便其在嵌入式系统中应用。第二步将用C++实现。在我的估计中,用C++更容易实现这个编程思想。当然,最终需要电脑软件辅助,这是到整个编程思想基本完成后再做的事情了。
此为开博第一篇,写的较少。关键是这台电脑上资料较少,且业余时间不多。以后可能重写此篇,或丰富其内容。
电路设计与软件编程的区别
高级编程语言可分为命令式语言(Imperative programming language)和声明式语言(declarative programming language),两者的编程方法有很大的不同。声明式语言又可分为函数式语言、逻辑式语言等;而命令式语言可分为冯。诺伊曼式编程语言、脚本编程语言、面向对象编程语言等。目前,软件编程中命令式语言主导地位,这里将以此为例说明软件编程与电路设计的区别。
电路设计与软件编程的区别表面上看只是一个图形形式,一个是文字形式;但实质上有很大的不同。
迄今为止,凡是能够实用的电子计算机都是按照冯·诺依曼提出的结构体系和工作原理来设计制造的,简而言之,计算机就是存储程序并按地址顺序执行的。其要点如下:
* 计算机是按照事先编好的程序执行的;
* 计算机的程序被事先输入到存储器中,程序运算的结果也被存放在存储器中;
* 计算机能自动连续地完成程序;
* 程序运行的所需要的信息和结果可以通输入/输出设备完成;
计算机由运算器、控制器、存储器、输入设备与输出设备所组成。其中最广泛应用编程语言的C语言(属于冯。诺伊曼式编程语言)充分表达计算机结构原理。
因此,计算机编程实际上是“按步骤解决问题”:把解决问题的方法分成若干的大步骤,每个大步骤又分为若干个小步骤,一直分下去,直到分不可分;然后计算机就按照步骤来一丝不苟的执行。这种“按步骤解决问题”的思路很利于执行,但从步骤中分析解决问题的思路就非常困难了;进而分析程序是否完全符合解决问题的思路也是很困难的。很简单的例子,网上有大量的教程,很多也是step by step的,但很多人按照教程做,依然无法解决问题。
与计算机编程不同,电路是连续工作的,没有“步骤”一说。数据(电流或电压)持续的流入一个器件,经过一个器件加工后,又流出这个器件。例如放大器,会只要通电,就会持续不断的对输入信号放大,在工作范围内,输出信号一直与输入信号成正比或反比。数字电路同样如此,例如二输入与门,其输出信号时时刻刻是两个输入信号的与。即使有时钟参与的时序数字电路,可认为时钟也是一个输入信号,同样脱离不了上述规律。即使不把时钟当作输入信号,时序电路也没有“步骤”,只是信号处理不再是连续的,而是离散的而已。
综上所述,计算机编程关注的是解决问题的步骤。如果步骤太多(程序规模较大),则编程时很容膝疏忽某些步骤,造成程序隐含的BUG。而电路设计关注的是数据流动,每个器件都对数据进行特定的处理,数据按照指定的方式路径流过这些器件后,自然就解决了要解决的问题。因此,电路的行为比计算机编程更容易预测,更容易理解,也就更不容易出错。计算机领域中,硬件发展的速度远高于软件发展的速度就很好的证明了这一点。
全部0条评论
快来发表一下你的评论吧 !