简介
作为嵌入式学习推送的第一弹,这篇小推送呢可以说是货真价实(价值一般)。对大家而言,本篇而已只是引导大家学习,对于那些有在单片机一定基础的同学,稍微看下,然后敬候我的第二篇就OK了。
一、前言
1、绪论
讲道理呢其实也只是浅谈,说是嵌入式,其实反倒是讲一些入门嵌入式需要做好的准备工作。文章可能并没有各位大佬那么鞭辟入里,但也希冀能给曾经和我一样迷茫着、困惑着找不到方向的同学一点点小的建议。
2、推送安排
就我目前的推送安排的话,会以连载的形式做3~4的推送,都是涉及一部分技术的小文章,讲述的也大都是我自己从学习51到学习嵌入式板子的经历的反思,希望读者能在我的经历中得到一点启迪吧,内容大体安排就是三篇:一篇51单片机(单片机入门阶段),一篇STM32(单片机进阶和提升阶段),一篇ITOP4412(三星A9开发板,也就是嵌入式入门开发板)。
下面做一些关于这几篇连载的说明。以后的这几篇帖子看似是技术贴,其实也就是方向引导帖,旨在给初学者搭出一个框架,在学习的时候知道为什么学以及以后的路在哪。
3、文章针对对象
这几篇推送适用的对象:喜欢微型计算机或者处理器,主要学习方向在于硬件逻辑的实现。
对嵌入式学习方向分类的话,我个人喜欢分成三个大的方向:底层硬件电路的设计以及实现、底层软件驱动以及协议的编写和上层系统裁剪以及软件的开发。这几篇文章主要针对的对象就是第二类方向,即底层软件驱动以及协议的编写,但也只是一个大的方向,说到底都是硬件逻辑的实现。至于硬件电路的设计实现和我们的关系不大,所以不会涉及。而上层系统的裁剪以及软件的开发问题,我们有可能会会稍稍涉及,但是如果一开始是想做系统层面的开发的话,就没必要过分的学习底层知识了。因为系统层面的知识体系才是根本,底层的知识只是你学习的加分项,千万不要舍本逐末。
至此,我们可以开始我们的第一篇推送了。
二、单片机的选型
goto title1;
title1:emmm,开个玩笑,下面好好讲话。
正如大部分人所说的那边,学单片机亘古不变的起步就是学习51单片机。为何要从51开始学习呢,理由如下:
1、51单片机网上资料相当多,作为一个行业里已经被用烂,在学校里却有着不小受众的单片机,他拥有着及其丰富的资源。作为一款简易落后的单片机,毫无疑问,他大部分的坑都被前人踩过无数遍了,因为在遇到问题时,甚至都不用翻墙查阅外网资料,看两个百度搜索链接就把问题解决了。
2、51单片机入门的时候,平台搭建简易,代码容易实现和看懂。对于大部分初学者而言,C语言的基础约等于0,直接接触高级的单片机势必就要接触到厂家提供的函数包,里面丰富的函数定义、指针、引用、结构等等稍微看起来有点高级的语法,让初学者目瞪口呆,望而却步。
3、最重要的一个原因:便宜,入手价格20元左右的核心板就可以开始学习,开发板的话100块以内就能买一个很不错的板子了。
讲道理原因不是什么特别重要的东西,你只需要记得51单片机适合新手学习就OK了。当然了,有一定的编程能力并且对C语言有一定的了解的同学,想跳过51单片机,直接学习后面的32位的单片机,我觉得问题也不太大,只要需要付出更多的时间罢了。如果有一定的C语言基础和编程能力,强烈推荐学习STM32等Cortex---M系列的单片机,51只是对于C语言能力不足的妥协,毕竟51已经落后于时代潮流很久了,精不精通意义不大。但是是直接向上Cortex-A系列单片机的同学,我只想说:请开始的你的表演。
三、单片机的学习
1、学习的方法
学习51单片机的方法一般都是通过书、文献类PDF或者视频。对于学习能力较差的同学,我推荐你跟着视频学习,视频讲解的十分细致,会告诉你哪里需要学,哪里跳过。但是对于大部分学生来说,我更推荐的是利用书或者是文献。买开发板的同学一般卖家都会给你一大堆资料,里面有对应的学习文献,对应他的章节进行学习即可。卖家给的资料如果质量很差甚至没有的同学,推荐大家看51行业的老大哥:郭天祥的《新概念51单片机C语言教程》,至于老大哥的板子并不推荐大家购买,老大哥的板子有点贵,所以不如大家在淘宝挑一个其他牌子的51单片机。
小结下,最普遍的学习方法就是对照着郭天祥的51单片机教程,买一个单片机,按照他的教程进行学习。在过程中会遇到板子和书不匹配带来的代码移植问题,但是我觉得都是非常小的问题,百度搜索几条链接就能解决。
2、重要信息的获取
学习51单片机最忌讳的就是按照高中的那套,将所有的内容记下来,一本书几百页,并不是所有内容对你都是有用的。学习单片机最需要思考的是:你需要掌握的内容是什么。单片机对于大部分人来说只是一个工具,就初学者而言并没有什么算法可言,就是功能的实现,所以有时候会用比理解要简单多,对于初学者而言,应该先学会用起来,然后慢慢的理解。
其次还要注意,不是书上所有的内容都是你需要去记忆的。就比如郭天祥书上的第一章,会讲很多的内容,但是大部分内容是只需要你了解,并不需要你去记忆的东西,比如:51单片机型号命名的原则、封装、引脚以及引脚功能之类的,这类内容你并不需要去记忆,当你需要的时候直接去翻阅书籍就OK了,而且也很少会被用到。你应该学习的是编程语言和功能实现的能力。
编程语言在单片机里面主要是指C语言,书很多,入个门没什么难度,功能实现而言在前面几章都是很容易实现的,但是后面难度上来了,往往容易让人萌生放弃的想法,其实讲道理,无论你学习什么都会遇到这种情况,在开始阶段很容易解决,越往后越耗费精力。其实,每次你觉得来了一个比较大困难时,时候就是能力发生突变的关键点,因为你遇到了挑战你原本能力范围的困难,但一旦将困难啃下来,能力将发生一个飞跃。
至于功能实现的部分,主要指的是底层寄存器的配置。51单片机功能的实现都是通过底层寄存器来实现的,寄存器数量不多,也没必要记每个寄存器的功能和对应的位含义,可以自己整理成一个文档,当然也可以直接每次需要的时候翻书。寄存器的配置难度其实也不大,就是一些常规讨论,把对应寄存器位填写数据即可。
3、学习单片机的忌讳
忌讳一:疯狂看书不写代码者。不写代码的阶段各不相同,有的人一开始就不写代码,只是单纯的看书,觉得看懂了就和这本书就此别过,有的人在前面几次还会动手写写代码,随着渐渐代码量上来了,就不愿意动手写代码了。怕麻烦肯定学不好编程,理论要和实践并驾齐驱,就算是做理论研究的,也不可能脱离实际做科研。一般代码量小的同学,在遇到一个工程时,需要花费的时间是经常写这类代码的同学的几倍,甚至可能还解决不了问题,即使你觉得你会了。看了和理解了是一个层次,理解了和能写出来是另一个层次。难度系数自己实践下就知道了。
忌讳二:一瓶不响,半瓶晃荡。万不可学习了一星半点之后就自我满足、自我膨胀。从书上敲两行代码,就敢说自己会了,自己学的很棒棒。那么学习到什么程度算是学习的比较好呢。所有的功能配置会通过代码实现,可以自己独立编写小的工程。(网上还有一些51单片机的外包单,如果能做出来就算水平很高了,会写简单的驱动,可以实现4,5个功能集成的工程,也算可以了)
四、51单片机学习的本质
讲道理51单片机真的只是用来入个门,它只是一个工具。在学习51的过程中最重要的是提升代码的编程能力(主要是C语言的学习能力),其次是会配置寄存器,平台熟悉后,能够独立编写一些工程时,开始学习32位的单片机问题也不大。学习51单片机只是为了后面学习嵌入式打下一点基础,如果C语言基础过关,懂一点寄存器的知识,只需要大体了解下单片机是什么,就可以直接上32位的单片机。
五、结尾的XJB扯淡
随便谈谈人生,讲讲理想。单片机只是工具,只是加分项,并不是你的核心生产力。对单片机功能配置熟悉以后就很膨胀的话其实是一种很蠢的行为,因为只是实现了一些基础且没有太大意义的东西,这种东西人人简单学习后都会。问题多了解决的方法就多了,并不可能就只用一个工具打天下,用一块51就能掌控世界显然也是不现实的。编程的核心是算法,平台变了,解决问题的思想和逻辑却没有变,舍本逐末的去过分的炫耀平台使用的能力,还不如踏踏实实学点基础理论的知识。至于知识体系的问题,考虑到篇幅,就放到下次的推送里面讲吧。
最后一点建议,就是课内知识很重要,别为了获得解决问题的工具,放弃了解决问题的方法。即使你想做的和本专业无关,那就把相关专业的基础课学学好。