跳转至

认识编程

编程说白了就是通过编写指令,告诉机器按照步骤做事情,

编程涉及的领域范围相当广泛,

1.从底层硬件平台来说,

有MPU(微处理器,stm32,nxp,ti等,生活中大部分的电子类用品,工业控制,通信设备),SOC(系统级芯片,手机,平板,物联网设备,网络服务器,机器人,主要是arm),PC(就是我们最主要的生产环境),FPGA (即现场可编程逻辑门阵列,有xilinx,altera,lattice等,用于),GPU(并行计算编程)

编程学的到底是什么

最开始接触编程,可能是c语言课,这方面是在培养编程基础,当然单纯的c语言课是不够的

在编程中,语言设计思想系统底层是最基本的四个单元

语言:c语言课中,我们最主要关心的是语言这件事,语言是衔接机器和人的桥梁,只有掌握语言的基本语法,才能知道怎么样才能编写程序,会知道要让机器按照一定的逻辑做事情

底层:接触电子,我们最开始可能接触的就是c51,arduino,stm32这些,这些是构造比较简单的mpu微控制器,在实现一些比较好玩的小项目同时,相当于开始渐渐地去知道底层,语言,到底是怎么样去操作机器的。会知道,机器提供了各类寄存器,提供语言来操作;会知道代码本质是调用的cpu指令集

以上两件事情大多数人都会做过,但是往往忽视掉设计思想系统这两块

设计思想:这代表的是我们写代码的模式,在不同领域,都会有各种模型来描述我们的代码是怎么样去组织的。不注意模式的后果就是代码混乱,功能之间耦合度高,可移植性差,容易出bug,难以复用,可读性差。

系统:除了 裸机 或 fpga 这种硬件代码,大部分时候,我们都基本会和系统打交道,为什么要有系统这个东西呢,因为往往很多任务都是需要合作执行的,但往往又有些任务会占用很长的阻塞时间,系统的设计一方面就是为了让程序在很长的延时中跳出来去干更多的事情,但却不打断原任务的继续,也就是线程的概念;另一方面系统是一个管理器,管理各类硬件资源,通过系统来访问硬件资源会更加的安全,比如内存,离开了系统的内存,是很难去进行动态的管理的,因为内存是连续的空间,如果随意的去分配,最后会导致空余的空间很零散,不连续;比如文件系统,如果我们直接去操作数据,那么可能可以做一些比较小的,管理难度较小的东西,但是如果是更复杂的,几个文件,甚至更多文件,我们怎么样去操作更高效,更安全,更有结构性是要考虑的问题;

读完上面的话,相信大家会发现自身有很多的薄弱处,或者说发现自己还只是学到了皮毛。

如何学

刚开始学习c语言

我的建议是刚开始学习(指还不熟悉语言),那么先按着学校c语言课程的流程走一走,做一做题,这一块就是先接触下语言层面的

接触单片机

之后是接触单片机,单片机可以从51入门,这里主要是了解寄存器,了解一些硬件外设的工作原理(矩阵键盘,数码管,iic设备,spi设备,uart设备),这是底层层面的

学习stm32并制作项目

如果说前两步做完了,请不要太高兴,因为这可能只是做了千分之一。这个时候,我们应该开始给自己设立一些项目了,可以按照电赛,或者是自己的兴趣,去设定一个目标:一段时间内,学习32主控并且使用32把一个项目做出来。这一步相当于用实践来巩固之前的知识。(这一步差不多是在加入电协前后需要做到的)

完成第一个项目后

当完成第一个项目的时候,是时候开始往回考虑了。我们在过程中,是不是缺了些什么。

你是否有遇到过变量到处放,写的时候很难寻找的情况

是否遇到过控制定时器直接操作寄存器导致一换主控所有的代码都得重新写,

是否遇到过外设与外设之间的代码互相交叉,以至于想取消这个外设还需要大幅度改动其他部分代码

是否遇到过一个循环的程序中有一些需要等待(调用delay)的事情,比如屏幕数据刷新,导致其他事件运行变慢:如串口发送,网络通信

是否遇到过按键消抖采用delay导致屏幕刷新被阻塞

那这个时候就可以开始在项目中穿插着设计思想系统的学习了,

这边我提供了一个较为简单的通用mcu外设库的练习(这个练习差不多在进来电协的第二,三个月之前完成),几乎能把上面的学习全都变为一件事情,大家可以在其中学习小部分设计思想(足以能够解决以上大部分问题)

形成程序设计的思想之后

系统板块体系比较庞大,我们专门提出来进行讲解

然后专业技术领域版块对应的各个方向去深入学习所需要做的

在了解这些的同时,可以开始差不多正式准备电赛了。

同时,我们也不能停下对其他主控(esp32,ti,arduino)的了解和学习,一方面因为比赛很大可能会限制主控(ti);一方面esp32是一个高性能wifi蓝牙主控,可以进行高速的通信;一方面arduino这个框架的驱动库相当全面,如果会移植arduino的驱动,或者会使用支持arduino框架的主控,那么基本上很多需要快速验证方案的时候就可以使用arduino框架;

主要是要把之前所做的继续用下去,同时往专业技术领域适配,比如了解系统,那么可以将你的通用外设库对系统进行一个适配;比如你是高频信号方向,那么就需要适配一些跟信号处理相关的芯片,fft算法;比如你是测控方向,那么可以把pid这种模型封装出来放入通用库,常用的模块先调通后封装,电机控制的算法模型也可以进行封装

注意:以上的步骤应当是在一个具体的项目中去执行,比如一个题目,或者自己想的一个项目,请不要以写库为核心的事情,应当设定项目,在实现项目的同时,去把代码逻辑进行整理和封装。因为没有具体的项目效率会降低。所以我们在周期考核的过程中,也会要求反应项目的进度

写在最后

如果说把这整个软件板块所提到的事情都去切实的实践一遍的话,相信你已经把软件的基础打牢了。