std::vector<T>.size()返回的是size_t类型
一、遇到的问题 今天写程序的时候代码运行崩溃,提示format specifier doesn’t match argument type。因为我刚刚接触C++,所以在这个问题上花了不少的时间。 代码如下: 代码非常的简单,但是一旦编译运行,就会出断言错误提示。最终发现原来vector<T>.size()返回的不是int类型,而是size_t类型,所以在wxLogDebug()中因为存在着断言,发现类型不同就报错了。而后面for()循环里面虽然不报错,那是因为for()循环里面相当于是对int < size_t进行判断,没有断言语句所以不报错,并不是因为真的没有错误。 (int < size_t)这个判断语句虽然在多数情况下都可以正确的执行,但安全起见,还是应该重新定义,改成for (size_t i=0; i<test.size(); i++)这样比较稳妥。 再回过头看wxLogDebug()里面正确的写法,就是使用%zu代替%d,这样格式化字符串的时候接受的参数类型就是size_t了。所以最终代码正确写法如下: 二、size_t和int有什么不同? 上面遇到的问题并不复杂,只是因为以前没有碰到过,所以浪费了一些时间。接下来的问题更令我感兴趣:size_t和int有什么不同吗?既然说size_t是无符号、且与当前系统最大可用内存匹配数,为什么不能直接用unsigned int代替呢? 原因是为了令代码在不同的平台上移植时更加的方便。size_t的确就是unsigned int,但具体是int16、int32还是int64并不一定,在不同的处理器、不同的系统上,size_t表示的范围是不同的。 例如在32位系统上,size_t是unsigned int32,而在64位系统上它的范围则是unsigned int64。…
系统托盘菜单点击之后500毫秒内的残影
想用C++实现一个简单的屏幕截图工具的开发,工具程序是放在系统托盘(IconTray)中的,然后通过鼠标点击托盘图标弹出菜单,再点击菜单中的截屏菜单,完成截屏操作。 软件界面如下: 一旦全屏截屏或框选区域截屏点击之后,程序就开始运行,将当前的屏幕DC保存下来,然后借助memDC将屏幕DC复制到一个bitmap中,再完成写盘操作。看上去是个非常简单的需求。 但是在Windows系统中(Win10),这个icontray的弹出菜单在点击之后并不会立即消失,我这里感觉大约会有500ms的减淡消失效果,最终导致截屏保存下来的图像,总是会带有被点击菜单的残影,如下图: 在程序里面处理其实可以有很简单的方法,就是做一个延迟处理,例如我现在延迟了0.6s、也就是600ms之后在创建screenDC: // 立即对当前屏幕进行全屏截屏操作 void MyApp::CaptureWholeScreen(wxCommandEvent& event) { wxString _imgSavePath = DatetimeUtil::getTodayScreenShotPath(); if (PathUtil::dirExistOrMkdirSuccessful(_imgSavePath) != true) { wxLogDebug("截图存储目录不存在且无法创建,无法完成截图操作"); return; } // 延迟0.6秒后将整个屏幕DC保存下来,待后面按显示器切割使用 //…
小工具开发备忘
最近用C++语言写一个小的工具程序,进展还算顺利,大的方向和功能开展的比较顺利,但是细节上有很多小问题。为了确保软件开发的进度,我是抓大放小,先力求能将整体功能全部实现出来。 对于细节问题,只能是做些备注、放在一旁,等软件整体完成之后,再回过头来逐一推敲了。这里记录一下遇到的小问题,当是给自己的备忘,等以后有时间了,再慢慢研究。 1、《系统托盘菜单点击之后500毫秒内的残影》 这个问题并不严重,临时解决方案是在程序中触发截屏时,先延迟一段时间再开始进行截屏。 2、《std::vector.size()返回的是size_t类型》 这并不是“放在一旁、暂且不管”的缺陷,而是我在写代码的时候遇到的一个“引起程序崩溃”的bug。实际上并非真的导致了程序的崩溃,而是因为wxWidgets中的调试断言弹出了警告对话框。 只不过因为我对C++不熟悉、又这个弹出警告框的文字实在难于阅读,所以起初一直以为是程序崩溃了。找了好久才找到原因,并且发现只不过是在f(x)函数的调用是,参数x使用了int类型,而真正应该使用的是size_t类型。虽然int和size_t几乎一样,但严格的断言判定最终生成了警告信息。 这个问题虽然已经解决,但是额外的需要再补充一下细节知识的缺失——《C++中的int和size_t有什么不同?》 3、《wxWidgets似乎没有事件广播机制》 我现在对wxWidgets的认知来看,它是没有事件广播机制的,但是对于我现在正在开发的一个“相对复杂”的窗口,如果能够以事件广播,将会令代码更加简单。所以想到了一个也许笨拙的方法——使用全局单例——来临时解决问题。 ================ 以下为尚未这里问题 ================ 一、已解决的问题主要有: 1、为什么在程序退出时会产生一些内存泄漏? 答:之前使用的退出方式不正确,之前的退出方式在“程序退出”时,虽然也调用了析构函数,但是那个调用析构函数的时候,实际上内存已经泄露了。我在那个析构函数中进行资源释放,实际上是对已经泄露了内存、且资源句柄已经无效的时刻,才去释放资源,结果就是无权访问会引发程序崩溃。 按照之前的错误思路,怎么办呢?释放就会崩溃,所以只能选择不释放资源,这样程序就不会崩溃了。但是在debug调试器中,就会看到有内存泄漏产生。虽然这里产生的内存泄漏会再被系统回收处理,但是这相当于是将“烂摊子”交给了操作系统的内存控制器。 现在已经解决了。解决的方法就是改用正确的退出函数,这样正确的退出函数会触发正确的析构过程,在这个新的析构过程中,释放资源,此时的资源还没有泄露,也就可以正常的被释放掉。 2、icontray的弹出菜单文字的动态调整 这里只是一个小技巧而已:将mainFrame的指针传给iconTray,这样iconTray内部就能在弹出菜单之前,判断出mainFrame当前的状态,再根据mainFrame的当前状态实时生成菜单,就能够令弹出菜单的内容“实时”,使用体验会比较好。 二、尚未解决的问题: 1、程序多次被启动,虽然我用互斥锁能判断出来,但是第二次启动只能弹出一个提示“已有实例,不要重复启动”。 但是我想做的更好一些,使用IPC通信,第二次的启动可以通过IPC通知第一个实例,第一个实例如果正处于隐藏状态(icontray状态),就自己重新唤醒起来。 2、paintDC的绘制效率很低:已经使用双缓存和悬浮层两个方案,共同解决了这个问题。 3、wxSashLayoutWindow窗口的拖拽改变尺寸,产生的事件 OnSashDrag(wxSashEvent&) 这个事件折磨了我大约4个小时,后来才想起来打印看一下,结果发现这是在鼠标抬起的时候才唯一的产生一次响应。难怪无法实时改变窗口的大小。还没有解决思路。
经过三组RC网络相移之后的电压波动
本文尚未完成,内容还有错误,只当参考资料阅读。 一、问题的提出 有了前面的结论,可以知道电容电压跟随交流电源电压的关系,是满足下面的方程的: 1、这个方程中的 Vm / [(1+(wRC)^2)^(1/2)] 可以被视为A,这个A就是电容电压波形中的峰值。也就是说:在电源正弦的作用下,电容上的电压形成了一个新的正弦波(虽然并不是完整的正弦、起始瞬态略有畸变),这个新形成的“正弦波”的波峰是A; 2、方程中的-arctan(wRC)被视为相移角φ,也就是电容正弦错后于电源正弦的相移; 3、那么新的正弦波的频率呢?频率是不变的。它的频率是和电源频率相同的,只是波峰略低、相位略微向右偏移。 有了如上概念之后,就可以完成以下的两个问题的解答: 1、如何构建一个完美的60°相移,然后通过3组RC相移,完成180°的相移; 2、在进行了180°相移之后的第三组RC网络的输出电压,波峰是多大?也就是说最终反馈回控制极的电压有多少? 这篇博客,将完成上面2个问题的计算和整理。 二、为了实现60°的单组RC相移,重新进行相关元件的参数设置 电源电压峰值:12V。之所以要将电源电压定义为12V,目的是与Jack Kilby的实验相符。在我阅读的相关书籍中提到,他在实验室中用12V直流电开始实验,并在示波器上看到了令人激动的振荡波型; 电源频率:暂定100Hz。之所以要定义成100Hz,是为了方便绘图观察。后期可以重新调整这个频率; 电容:1uF,也就是0.000001F; 电阻:之前我在仿真中是直接使用的1000Ω,现在按照相移角为60°进行计算,电阻应该使用2760Ω。这里还有一个额外的问题:为什么之前仿真中,电容使用1kΩ也可以正常振荡呢?这个问题需要以后有时间了,再深入推敲一下; 如上的基本参数就定义好了,按照上面定义的参数,进行绘图,然后进行仿真,看绘图计算结果与仿真结果是否一致。 三、三组RC相移之后的最终波形及电压 其实有了上面的计算依据之后,不画图也可以计算出经过3次RC相移之后的最终输出电压峰值是多大了。因为经过一组RC之后的电压峰值是A,所以经过3组RC之后的电压峰值是A的三次方。因而,如果电源电压的峰值时12V,那么: 经过第一组RC之后的电压将会是6V左右;第二组RC之后的电压将是3V;第三组之后的电压将是1.5V。也就是说最终反馈回控制极的电压的波动将在+1.5V ~ -1.5V之间。 下面是使用SageMath完成的画图,从只有电源电压开始、一条条的增加新的电容电压曲线。需要注意的是要忽略掉曲线开始瞬态部分的失真情况:…
电容电压跟随电源电压的过程(2)
一、问题的提出 在上一篇博客《电容电压跟随电源电压的过程》中,基本搞清楚了电容的充电过程和放电过程电压的变化规律。但是它对我想了解的电路而言太基础了,根本无法指导我对当前电路的分析。 我更想搞清楚的是当电源为交流电时,电容电压的跟随情况,如下图所示: 图中的电源是100Hz的5V交流电,可以看到在电容上形成的电压的峰值(红线)略微低于5V,并且是滞后于电源电压的。这在网上已经有不少公式说明了它们之间的关系,但是却没有给出推导过程。 并且更为令我不安的,是这些现成的公式都是指电路进入“稳态”之后,而在上电的起始阶段,可以看出电容与电源之间的电压并不出现相位差。 所以在我想来,这个“现成的公式”是无法解答我的困惑的,所以这篇文章以及接下来的一段日子,我将尽可能搞清这个问题:电容电压是如何跟随交流电压的。 二、困扰 又陷入了“AI胡说”的困扰,这篇博客提出来的问题,我自认为问题定义的还是比较清晰的,但却找不到准确的文献。如果继续执着于利用搜索引擎或AI问答引擎,恐怕接下来要浪费的时间将是巨大的。 其实我觉得这个问题应该比较容易,它只是在解如下的方程: 这似乎没什么难度,但因为缺少相关的参考资料,所以我很难确定自己的推导过程每一步是否准确。尤其又因为我自己解出的答案,绘制成图形之后和预期的图形相差太远——因而可以确定我的求解是错误的。 有些不知该如何继续了。 三、找到了正确的计算公式、虽然并不完美 经过多次的搜索、查找,终于找到了一篇“正确的”参考资料: https://www.iitp.ac.in/~siva/2016/ee101/Sinusoidal_Steady_State_Analysis.pdf 之所以可以认为这篇参考资料是正确的,是因为基于这篇资料计算电容电压,绘制出来的电容电压的波形是准确的(相移角准确、电容可以得到的最大电压准确、并且是稳定持续输出的): 这很不容易!我之前一个下午都在使用AI问答引擎找答案,结果给出来的各个计算公式都不正确。直到晚饭之后,都已经准备放弃了。但不甘心又找了一下,才找到上面这篇文档。 虽然这个文档给出的结论并不是我要的最终结论——它显然缺少系统上电的起始阶段的分析和曲线。但至少有了稳态之后的正确公式,可以先把后面的知识了解、掌握一下。 四、瞬态响应阶段和稳态阶段的完美波形 我感觉自己是找到“宝”了,上面的参考文档实际上是准确、完美的。只不过起初找到的时候没有细看,草草的照葫芦画瓢画了个初步的图形。细看之下,这篇文档实际上是含有初始瞬态响应阶段的分析的。按照最终的正确公式进行绘图,得到的图形正确、完美: 文档中给出来的推导公式也非常的简要明了。所以接下来只需要将文档中提及的公式好好学习、自行推导一遍,这一目的功课就应该算是完成了。 五、小节 1、其实上面的图形我完全可以在仿真软件里模拟出来,然后直接截屏就可以正常使用了。但是之所以纠结这个图形的产生过程,是因为我想搞清楚仿真软件中这个“电容电压跟随电源电压”的计算过程,究竟是怎样的; 2、如果不知道具体计算过程、不知道具体的推导过程,就很难理解为什么最终是RC的阻值、容值决定了它的相移。也无法自己利用SageMath绘制图形。不能自己绘制图形,就很难在博客文章或者“视频文章”中给出更详细的展现; 3、如今已经有了这个具体的“绘图公式”,我就可以按照自己之前的想法,绘制一系列的曲线,通过这些曲线说明为什么每一个RC网络可以实现(0°-90°)之间的相移、为什么必须需要至少3组RC网络才能形成180°的相移; 4、额外的,除了可以说明三组RC网络形成的180°相移外,还可以计算出最终反馈回去的电压有多少,与控制极的初始电压叠加之后形成的控制极电压波动有多大、进而推算出控制极的电流形成的开关效应,最终将Jack Kilby的RC Phase…
电容电压跟随电源电压的过程
一、问题的提出: 一颗有电且“满电”的电池,它的正极有着比负极更高的电势。 当将这颗“满电电池”的正负极通过导线连通时,通过电场力的作用,这条通路上的电子便会从低电势区域向高电势区域移动,目的是减小正负极之间的电势差,从而形成电子持续的定向移动,也就是电流。 因为这条导线是理想的、电池也是理想没有内阻的,所以电子的定向移动不会受到任何的阻碍,单位时间内通过导线横截面的电子数量可以无限多、电流无限大,只需近乎于0秒的时间,电池正负极的电势差就被拉成零、没有了电势差。 重新回到初始状态,在这条理想导线上加入一颗电阻,目的是阻碍电流的移动,使得导线上的电流不再是无限大,而是I=U/R,问:此种状态下,需要经过多少时间,电池的正负极电势差才能从U降低到0呢? 二、初步讨论 上面的问题中,一直用的是“电池”,目的是让问题更感性一些。其实这篇文章主要聊的是电容,因为电池和电容基本相似、可以类比,所以上面一直用“电池”来做表述。但电池和电容本质上是有差异的,所以为了更加严谨一些,下面不再使用“电池”的称呼,而是用“电容”来继续讨论。 一旦系统接通,电池(电容)将开始进行放电,电流经过电阻做工,并且逐渐的电容内部的电压会降低、直至电容电压降低到0。这也是上面提出来的问题:要经过多久的时间,电容电压才会从初始电压(例如5V),降低到0V呢?这里有一个值得注意的事情:电容初始电压虽然是5V、在系统导通的起始时刻,流经电阻(100Ω)的电流是I=5V/100Ω=50mA,但是这个电流并非恒定不变的。 随着时间的推移,电容内部的电场强度(如果是电池、则可以理解成电量)会越来越低、电容的端电压也会随之下降,从而导致流经电阻的电流也会越来越小。这个过程是连续的——每一个当前时刻的电流都是上一个时刻的电容电压决定的。在没有仔细的推敲之前,不妨先随手胡乱的画一画它们随时间t的变化关系: 如上的若干图形都是肆意画出来的,只有大概的猜测、并没有任何的理论依据。大方向上而言,电容电压随时间的推移一定是越来越低的,但究竟是上面图中哪一种形式呢?如果花更多一些时间思考,似乎能从“电能密度”的角度上猜测出,上面的3个曲线中,最右边的曲线似乎是更贴近于真实情况的。但也只是猜测。 另外,我们最关心的“经过了多长时间,电容电压变为0”,在上面的图形中也是无法推敲出来的。虽然我们知道这个时间一定非常小,所以图中都是“拍着脑袋决定”,在0.01s的时候,电容电压就已经降低到0V了,但实际情况究竟应该是怎样一个时刻?所以接下来就要从数学的角度具体推算一下了。 三、具体数学推导 电容放电过程中的电压变化,可以从两个维度上考虑,分别是KVL和KCL两个角度,也就是考虑电容上的电压时时刻刻等于电阻上的电压、或电容上流出的电流时时刻刻等于电阻上流过的电流。这两种思考角度本质上是一样的,具体的推到过程由下面的两个参考资料中可以详尽的看明白: 1、以电压考虑,依据Kirchhoff’s voltage law (KVL)进行推导: 参考资料:https://web.mit.edu/sahughes/www/8.022/lec09.pdf 2、以电流考虑,依据Kirchhoff’s current law (KCL)进行推导: 参考资料:https://mechatrofice.com/circuits/charging-capacitor-derivation 3、额外的,一篇不错的科普概述文章: 参考资料:https://courses.lumenlearning.com/suny-physics/chapter/21-6-dc-circuits-containing-resistors-and-capacitors/ 这里直接给出最终的结论,电容上的电压随时间T的关系式是: 由此看出电容电压在数学上是永远不会等于0的,它只会越来越趋近于0。但是现实世界中,因为电路上的IC并非理想的、并且存在着热扰动,所以只要经过一段时间,电容趋近于0的电压就会因为一个“小的波动”而抵达X轴,从而时电压归零。…
RC振荡电路初学笔记(3)
这是一篇临时的备忘文章,主要是将最近几天对RC振荡器的学习进展做一个简单的罗列。虽然已经花了不少时间在这个电路上,但是我对这个电路的细节还有很多的欠缺。好在最令我困惑的几个问题,已经基本搞清楚了: 1、在这个振荡电路中,使用相移器的目的是什么? 答:这个问题我现在“隐约”有了答案,但是还需要对当前的认知进行更深入的学习,以便从数学公式上对相关的“相移量”有个更加准确的认识、并且要能通过参数计算出具体的结果。尤其是我现在所初步感受到的“电容电压跟随源电压”,它的跟随程度和如何控制,要学会具体的计算过程; 2、为什么要使用3组RC相移网络? 答:这个问题现在我已经可以通过画图的方法得出答案了。这个问题的答案的得来对我而言十分的不易:自己既没有夯实的基础知识、网络上又没有比较明确的答案。幸好最后自己想出了答案。虽然暂时没有办法印证我当前的答案是否标准、正确,但感觉应该基本是靠谱的。为了让答案更容易理解,这个知识点要配合一些画图才能完成。所以接下来将学习使用SageMath将相关的正弦波形绘制出来; 3、电容的容抗的本质是什么? 答:还没有搞清楚; 4、NPN为什么是电流控制型元件? 答:这个问题似乎也有了一个初步的答案。不过也还没有将答案从头梳理、逐一印证。所以还需要一定的时间完成这部分知识的整理、证实。并且在确定自己的想法就是书本上表述的意思之后,整理成博客文章,发在这个系列文集之中。 5、我当前绘制的RC相移振荡器电路,起振阶段的工作原理是怎样的? 答:不确定,不了解。因为我现在使用的2款仿真软件对于起振阶段的仿真并不相同,所以也说不清哪一个软件的起振阶段描述是准确的。因为无法确定哪一个表现准确,也就无法去“打哪儿指哪儿”的想它的起振过程。所以这个起振阶段的起振过程,还要再花时间推敲; 6、我当前绘制的RC相移振荡器电路,是否真实、准确? 答:这是相比Jack Kilby的论文而言的。他的论文中对于RC相移部分使用了一个很简略的画法。现在不确定他的简略画法是:a、一坨电容覆盖在一坨电阻上面,就是与3组RC网络等效的;b、其实简略画法要展开成3组RC网络才可以;c、在他的真实电路实现内部,还有其它未知的细节;以上哪种情况呢? 以上,就是现在我对RC相移振荡器的学习进展。如此看来,已经学习过的内容还没有整理成文章、大体了解了的内容还没有深入探究、尚未了解的内容还有很多……如此看来,这个系列的学习工作,还是有很多事情要继续的。
重新学习有关电阻和电容的基础知识
最近看RC相移振荡器的时候,发现自己欠缺的基础知识有些多,所以不得不重新学习有关电阻和电容的基础知识。 一、基本概念和定义: 要想了解关于电容的基础知识,我想应该从最基本的电流、电压、电阻方面的知识学起。而这三个基本概念分别是安培、伏特和欧姆三位先生所定义出来的,所以这三个基本的单位使用了三位先生的名字作为定义。 于是就有了: 1、电流:单位是“安培”(Ampere),这是在1836年时为了纪念在电磁学方面有突出贡献的法国科学家安德烈·马里·安培,而以他的名字命名的(虽然是1836年正式命名,但是电流的定义应该早于1800年、早于电压的定义时间)。电流的定义是I=Q/t,含义为在导体内单位时间内所移动的电荷量。 2、电压:单位是“伏特”(Volta),这个概念是亚历山德罗·伏特(Alessandro Volta)在1800年提出的。它的定义是:U=W/Q,即单位电量做出的功。如果电量Q做出的功是n焦耳,说明这些电量Q的电势能降低了、从而释放出了n焦耳的能量。这些Q之所以电势能降低、释放出能量,是因为它们从处于高势能的电场区域移动到了低势能的电场区域。 3、电阻:单位是“欧姆”(Ohm),欧姆定律是在1827年首次提出的。德国物理学家乔治·欧姆(Georg Ohm)在当年发表的《The galvanic circuit investigated mathematically》中,详细描述欧姆定律。在这本书中,欧姆解释了通过简单电路中的各种长度导线时的电压和电流的测量结果,并提出了与现代形式略有不同的稍微复杂的方程来解释他的实验结果。电阻的定义是R=V/I。 二、直接和间接: 从上面的对电流、电压、电阻的定义能够看出来:电流和电压都是有着明确的定义、并且可以通过直接测量,例如直接使用电流表和电压表得到的物理量。所以他们是被精确定义的物理量和物理单位。 而电阻则是根据欧姆定律计算得到的,属于间接物理量和物理单位。虽然电阻也可以通过万用表测量出来,但是使用万用表进行电阻的测量,其内部原理仍然是施加一个电压、然后测量电流,通过电压和电流的测量值,计算出来电阻。所以电阻是计算出来,而不是测量出来的。所以电阻是间接定义、计算得到的物理量。 三、展开说一下“间接”计算: 之所以上面会提到“电阻是基于电压和电流、通过欧姆定律计算”而间接的得出的,原因是对于很多类似的公式,我都存在着困惑:这些计算公式是怎么得来的? 例如,除了电阻R=U/I外,在《电磁学》中提到的Priestley实验,这个Henry Cavendish在1773年完成的实验中,得到了如下的电场力公式: 这个公式我也存在同样的疑惑:Henry Cavendish是凭什么给出的这样一个公式的呢?在这篇blog写作的时候,我似乎解答了自己多年的困惑——这些“间接计算量”并不是想当然地提出来的,而是通过大量的试验,根据试验的数据拟合出来的结果。 为了进一步的将自己的想法整理清晰,先将上面的公式简化一下,直接用库仑定律来当例子。库仑定律是说两个点电荷q1和q2之间的库仑力F,定义如下: 这个库仑定律以及库仑力的计算公式,我之前长久的困惑就是:为什么库伦当年就能“定义成”力是与距离的平方成反比的,为什么偏偏是“平方”,而不是“3次方”、“8次方”呢? 我的想法应该说是非常幼稚的,但我就是闹不明白。现在应该大体上有了答案:库伦之所以能够肯定,是因为他做了大量的实验,并通过实验得出的结论。例如我也给出一些数字来,这些数字假设是实验的记录,那么根据这些数字,反推出公式应该是不难的。 A球电荷量 B球电荷量…
RC振荡电路初学笔记(2)
在上一篇Blog最后提及的Jack Kilby设计制造的人类历史上第一片集成电路芯片,是一枚RC相移振荡器(RC Phase shift oscillator),在输入12V的直流电时,可以产生特定频率的波形输出信号,具体的输出频率和幅值是通过其中的RC相移器设置产生的。 这枚人类历史上的第一枚集成电路芯片,诞生于1958年9月12日的德州仪器实验室中。它之所以与众不同、并且成为今天计算机发展历史上的重要一环,原因在于它是第一枚完全使用半导体工艺、在单晶片上集合集成了电阻、电容、PNP管的电路、也就是我们常说的“集成电路”。 在当时的德州仪器,已经可以规模化生产电阻器、电容器、PNP等电子元件,但是电阻和电容并不是通过半导体工艺生产的,所以要想将这些不同的IC小型化、集成化的“封装”在一起,则需要针对不同的IC进行不同的工艺制作,以便让每一个IC都缩小、让不同的IC彼此靠的更加紧密,从而使最终整体封装出来的电路尽可能小型化、高集成化。 这种令每一个元件都更小、令他们彼此考得更近的“小型化”想法,是比较朴素的想法,德州仪器也是在这种朴素的想法的指引下,设计了多种方案(可能是三种设计方案),但是这些方案本质上都是先将每一个IC缩小、再进行整体组装,如此就不可避免地还是会令最终的产品是一个“组装设备”,相对而言还是会比较大。 图中,Jack Kilby坐在正中间。图片来源:https://commons.wikimedia.org/wiki/File:TIDallasPhippsWeaverBiardKilbyFischer.png Jack Kilby则采用了与上面想法不同的思路:他直接使用半导体生产工艺进行电阻、电容的制造,具体是使用氮化钛制作电阻、使用聚四氟乙烯制造电容,这样就可以令电路中所有用到的IC都是采用相同的半导体制造机制来生产,也就是说最终的所有IC都是“生长”在多片硅晶体上的,不再需要进行彼此的组装,而是一层层“生长、叠放”在一起,从而大幅度的缩小了最终电路的尺寸。 Jack Kilby的想法在实验室中最终得以实现,并且成功的在示波器上看到了预期的振荡输出波形。 最终,Jack Kilby被称为“集成电路之父”并于2000年时因发明集成电路而荣获了诺贝尔物理学奖。与Jack Kilby齐名的是来自于仙童半导体的罗伯特·诺伊斯,他则因集成电路平面制作工艺的发明,所以他们两人被同时誉为“集成电路之父”。