既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
为什么要用50us?因为我产品的RFD波形定时采集频率是50us采一次。
如果你产品没定时这么频繁的功能需求,你完全可以把定时时间源配置成10ms,甚至100ms,这个是根据不同的产品去调整的。
**图右边的就是定时器矩阵,**就是各种乱七八糟的不同定时需求组合,比如LED特效定时功能的定时需求、RFD波形定时采集、RFD重复码滤波延时等等。
最终这些定时器矩阵都有一个时间单位/基准,这个时间单位/基准是由定时器时间源提供,如果我配置定时器中断是50us,那定时器矩阵的时间单位就是50us。
有了这种想法以后,剩下的就是考验你的经验和代码水平了。
三、代码设计思路
一个工程师工作越久,做过的项目越多,就要慢慢形成一个面向对象的思维。
虽然上面雏形出来了,但是我相信很多人依然不知道怎么动手去写代码。
这个是正常的,最好的方法就是先抄后超。
我是用面向对象的思维去做的,对于c语言来说,结构体是实现面向对象最好的方式。
这里的对象不是你的男女朋友,而是世间万物皆可以当做一个对象。
比如说人是一个对象,这个对象有很多属性,比如说性别、年龄、身高、体重等等。
Ok,那在程序里,如何把这个对象的特征用结构体展现出来呢?
可以通过下面这个代码:
那回到我们定时器矩阵这里,我们把定时器矩阵当做一个对象。
那这个定时器矩阵都需要具备哪些共同的特征?
我总结了下面几个:
- 需要有个变量当做开关标志控制该定时器启动/停止
- 需要有个变量当做当前的定时值
- 需要有个变量当做该定时器的定时周期。
- 定时时间到了以后,需要去执行相应动作,为了灵活使用,需要一个函数指针。
那用结构体来表示代码如下:
这里很多人可能有点懵逼,我怎么想不到要这些东西呢?
这个是正常的,不用去纠结,我也不是一开始就把这几个成员都想到的,而是后面做功能的时候慢慢完善的,你刚开始抄我的思维就行了。
后面很多应用都是用这种套路去做的,比如说我们的任务管理、比如菜单这些,用多了自然就熟了,以后你自己也能设计别的对象了。
Ok,这样我们就把定时器矩阵这个对象的特征设计好了。
四、定时器代码实战
1.前面我们用结构体自定义了一个定时器的对象来,下面就要用这个定时器对象”生”出定时器矩阵。
我们直接用定义结构体数组的方式,T_SUM就是我们定时器矩阵的个数,也就是我产品有多少个定时器需求。
后面我们所有的操作都是围绕这个结构体来进行的。
2.配置定时器矩阵时间源,初始化定时器矩阵参数
A). 我们首先要给这个定时器矩阵一个时间源,也就是配置我们要去配置单片机定时器中断。
我们的定时频率配置的是50us,是因为我们产品有的功能最短需要50us的定时。
然后,我们需要写一个初始化函数,去调用这个定时器配置,以及初始化定时器矩阵参数。
B). 然后在这个50us定时器中断函数里,去实现给定时器矩阵定时代码。
这里,我单独写了一个函数。
然后我们在定时器中断函数里调用这个函数,实现给定时器矩阵定时。
3.附加功能
定时器矩阵时间源配置好了,但是我们还需要一些函数来操作定时器矩阵对吧?
A). 编写创建定时器
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
,可以添加戳这里获取](https://bbs.csdn.net/topics/618658159)**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!