那些认为"简单"的人,要么是老手,要么是新手。
老手是已经解决了那些复杂的问题,新手是还没遇到那些复杂的问题。
现在开发板太多了,以及Arduino的出现,提供了成熟的开发工具和丰富的例程,随便找个开发板,把例程都跑一遍,就以为自己已经掌握了单片机开发的精髓。
其实这是一种错觉,对于做产品来说,单片机的工作量,可能只占到10%左右的工作量。
例程再多,也只能作为我们学习的起点,真正的提高,还是要在项目实践中不断总结和领悟。
我工作了2年左右,甚至还有类似的误区,公司项目都能胜任了,觉得单片机不过如此。
后来,碰到了很多棘手的项目,我老实了,东西怎么都学不完,虽然外设和协议就那么几个。
但是这些东西都是通用的。
举个例子,IIC协议可以用于EEPROM、OLED屏、调光芯片、陀螺仪等等,成百上千种传感器…
你可能熟悉IIC协议,但不一定熟悉芯片或者传感器,这些都是需要额外去学习的,每换一个领域的产品,芯片都不一样。
除了IIC协议,还有SPI也是同样,是标准协议,应用也是非常多的…
光这个就够喝一壶了。
实际远远不止这个,这些协议接口的目的,是读取传感器或芯片的数据,读出来以后,有些还要经过一些算法的处理,这也是难点之一。
不管单片机也好,协议也好,算法也罢,都是会随着产品动态变化的,我们没法通过某个教程,就能完全学会所有的,最多就是触类旁通的效果,后面随着你经验越来越丰富了,你学习起来的效率也会越来越高。
你这时可能会说,哎好烦啊,难道就没有通用的东西?不用老是学来学去。
还真有,我做了研发10几年,也慢慢领悟到了,对于偏软件来说,编程水平是工程师的核心能力,通俗来说就是程序架构设计的能力,这是大多数产品能通用的。
编程水平包括了思维和代码。
思维是给你一个功能,你有没有实现的思路,你的思路够不够好?
怎么才算好?
我觉得是能实现功能的同时,又能保证后期功能的扩展性和移植性。
这其实非常考验你的经验,就像下棋,走一步,看三步。
为什么说是考验你的经验,而不是思维?
因为我一直觉得,程序是调出来的,不是想出来的,都是从V1.0……V10.0这样迭代出来的。
而且,平白无故的创新,非常难,你都没经历过,怎么可能想得出来?
大多数优秀的工程师,都是从模仿别人的思维开始。
比如,我第一次接触TI蓝牙协议栈代码时,上面跑了个OSAL系统,我惊呆了,单片机的程序还TM能这样写?
OSAL本质其实还是轮询调度,只是把对数据或者单片的操作转化成各种任务,各种事件,真正做到有条不紊。和较为复杂RTOS系统比起来,OSAL实现起来更加简单,而且占用资源也少,Flash大概3-4K的样子。
说单片机简单的,可以去研究下。
后面我也把这个系统修改了以下,移植到更复杂的STM32项目上,做很多功能确实爽多了,比如需要内存动态分配,定时器这些,简直是做按键消抖那些的神器。
不过,相对来说,我还是比较喜欢用我第一代的程序架构,也是轮询,但比osal还简单一些。
这个架构我还特意录过一套教程在小破站,也可以直接找我安排。
以上仅仅是软件层面的知识,还有仪器的使用,以及后面走全栈的话,要还学习硬件,只能说10年磨一剑,都算是快的了。
最近发现,很多私聊我学单片机的小伙伴,99%的人都走了弯路,所以我花几个小时,写了一篇保姆级学习路线^ ^
单片机怎么学?保姆级学习路线(附教程+工具)https://blog.csdn.net/2401_86645590/article/details/141437874