浅谈技术-------计算机(嵌入式)

  何为单片机,何为嵌入式?有什么关系和区别?
  14年开始糊里糊涂选到了自动化这个专业,0基础接触单片机,嵌入式,从此走上了这条不归之路(夸张了点哈哈)。
也并非0基础。想起小时候的四驱车,很好奇里面怎么实现的。其实里面只有电动机,电生磁,磁生力,只属于机械。再看看玩的游戏机,小小的盒子,连上电视就可以玩起来,拆开来全是电路----------
  小时候的四驱车,游戏机,遥控车,多么神奇,多么有趣,多么童真!(跑题了貌似哈哈)。
何为单片机?单芯片微型控制器。51,stm32,出来工作之后,还有arduino,atmel,芯科,恩智浦,飞凌,市面上太多太多了。但很多企业为了省钱,都在51单片机的基础上不断增强性能从而满足功能实现的需要,例如stc,efm8,CC2530(zigbee),z-wave等等。
  为什么从51单片机开始学起?什么是51单片机?80年代的产物,intel公司开发了名为8051的内核而由来。为什么80年代的东西一直到今天才存在?原因只有一个:省钱。所有的嵌入式设备,只要功能满足,都会选择便宜的方案去做出来。所以很多企业都在51内核的基础上不断增强,增强到满足产品的所有功能为止,所以efm8,stc这些就诞生了。51应该是最简单的单片机,凡事从简单开始学起,逐步深入,由简而繁,化繁为简。是最基本的逻辑之一,是做编程最基本的思维。学会了51,所有单片机都是千篇一律的,其它单片机自然而然就会触类旁通,举一反三。
  广义上,单片机就是嵌入式。
  狭义上,跑操作系统的叫做嵌入式,反之为单片机。
  单片机都有一个共通点,就是多数是裸机,不跑操作系统。裸机的意思是程序都是一行一行往下执行,单线程,不会跑到其它地方。带了操作系统,就会多个线程同时一起工作。
下图是裸机的万年老套路:
浅谈技术-------计算机(嵌入式)
  一开始就是初始化。初始化什么东西?主要两部分。首先第一部分是系统运行的时钟。CPU要工作都需要一个时钟源,就是不断高电平,低电平的组合。时钟运行多块就决定了CPU运行有多快。第二个是IO口引脚的设置。
浅谈技术-------计算机(嵌入式)
  上图,就是某款单片机(stm32f103)的时钟源图,从左到右,有梯形,正方形,很多箭头,有分频,倍频,眼花缭乱~以后实用例程会讲解。
浅谈技术-------计算机(嵌入式)
  任何一个功能实现,都绝对会用到IO口。何为GPIO(General-purpose input/output)?51单片机的引脚叫做GPIO吗?不是。51单片机的IO叫做双向IO,同一时刻既是输入也是输出。特点是功能少,上拉能力弱。而GPIO往往都有上下拉输入,推挽,开漏,浮空输出等,这样的IO才叫真的IO。51真的太弱了。
  初始化完时钟之后,第二个要初始化的就是外设。外设就是外围设备。计算机的三大组成部分,CPU,运行内存,外设。GPIO就是最简单的外设。其它的,adc,dac,spi,i2c,i2s,uart,can,再高级的rgb总线,8080总线,FMC……你会发现,嵌入式真的是无尽路。
  初始化完外设之后,剩下的就是死循环实现功能了。为什么要死循环?如果return跳出了主函数,芯片就不工作了。这样你的单片机又有什么意义呢~
  无论任何平台,裸机都是这个模样。跑了操作系统的,例如rtos,ucos,RF-thread等,多任务多线程同时运作,根据时间片调度。

浅谈技术-------计算机(嵌入式)
  那么,裸机能否实现带有操作系统所实现的所有功能呢?答案是肯定的。
  何为裸机的极限?何为单片机的极限?单片机的极限就是嵌入式的门槛。因为单片机最终会跑一个轻量级的操作系统,从而变成嵌入式。而裸机的极限就是时间片的运作。时间片就是时间碎片,把CPU分成一块块的碎片,去运作所有的任务。
浅谈技术-------计算机(嵌入式)
  以上就是MCU的所有流程。
  操作那么,为什么跑了操作系统才叫做嵌入式?嵌入式有什么严格定义?操作系统比裸机到底方便了哪些内容?
  MCU和dsp,FPGA有什么关系和区别?人工智能怎么结合起来?
  MCU,GPU,协议栈,嵌入式linux,嵌入式python都是什么?
  什么是物联网,大数据,人工智能?怎么结合起来?
  何为内存窥探?
  何为MVC架构?有什么含义?
  需要什么工具研发?烙铁,松香,海绵,热风枪?示波器,逻辑分析仪?Jlink?MDK?sourceinsight,Beyond Compare?SVN?以后再讲解。
  当学习一种新的知识时,你是否会去关注它的博客,社区,论坛?是否会想起以前学过的一丝关联的点滴?当你买台新的电脑时,你是否会去贴吧,测评室探个究竟?工作之后,无论技术也好,业务也好,你是否会形成一个属于自己的技术圈,交际圈?是否会约朋友出来多多交谈?还是始终自己一人闭门造车,孤军奋战?
  最后,谈谈我对计算机的看法。从小见过太多人类的太多虚伪,你欺我诈,不懂得何为相互理解,充满谎言的世界,有点可悲。所以,有时候,还想更多地一个人静静,想想游戏机,电脑,它们至少不会存在欺骗,即使也会犯错,也比人类可靠太多太多了。所以也许有了这个潜意识,大学之后糊里糊涂选了这个专业,从此走上了这条不归之路。每天面对的是不同的芯片平台,不同的外围设备,不同的上层代码,眼花缭乱,经常手足无措。编程世界,在这样的世界里前进,奔跑,没有丝毫的情感。每天对着毫无感情的事物,也许会很枯燥,厌烦,甚至恐惧,从而产生暴脾气,焦虑。在这个职场,真的见得太多这样的人了。而我不相信枯燥,无味。了解自己所做的研发,用心体会,用以前学过的单片机知识,用会的知识去学不会的知识,不断对比,不断感悟。相信逻辑世界都是共通的,你掌握了一样东西,那么你就可能很轻易地学会另一样东西。触类旁通,举一反三。一个人可以没有智商,但绝对不能没有理性。在枯燥无味的事物面前,保持最高度的理性,找到事物的共通之处,做到心无旁贷,理性分析,以最后解决问题、学会知识、技术来化解一切所谓的枯燥无味。要真正领悟其实很不容易,需要不断学习,探索,领会。
  做技术并非只有赚钱,并非一无是处,并非是一条不归路。正因为你懂的更多,掌握的更多,从而替代了枯燥,替代了焦虑,厌倦,恐惧,孤独,让自己的内心更加好受好过一点,那么是多么微不足道的一点。程序员的世界,思维严谨,明察秋毫。理解的事物多了,你也会去理解身边的人和事,看得更加清楚。你会发现,社会并非虚伪,人与人还是存在太多的善意,值得用心体会,哪怕身处这个钢铁森林。在这个大城市,这个钢铁混凝土的森林里打滚,拼搏,灯红酒绿,每天只有上下班,本身也许是一种残酷。能够化解工作的枯燥,压抑,能够拥有一颗平静心,不急躁,不焦虑,理解身边的人,还有一副热心肠去帮助他人。也算是给自己的内心一丝的慰藉。不论怎样的行业,怎样的工作,都希望自己开开心心。而不是每天求下班,求放假。多积累技术,丰富自己。生活并非过眼云烟,时时刻刻都可以有自己喜欢的事情,需要不断寻找,理解,多珍惜,多领悟,自己才会获取到更多,走得更远。