工作中写单片机代码,与学校里有什么不同?

来聊聊我的经历,提供几个提升方向,亲测有效,希望能让你少走几年弯路。

10几年前,还没参加工作的时候,主要是玩玩开发板,也接触不到实际产品的代码,很好奇那些产品级的代码是怎样的。

第一份工作,先是维护老产品, 一看公司产品的代码,其实跟开发板的差不多,有些代码可能还没开发板的工整,是用STC 51单片机的项目,代码也复杂不到哪去,能实现功能就行了。

接着维护基于NXP ARM7单片机项目,相对就复杂很多了,复杂度主要体现在要自己配置寄存器,去使用单片机外设,还有整体功能多,组合起来看就有点云里雾里,不过从代码架构上,也是挺乱的。

经过前面3,4年的磨炼,水平慢慢从维护,到能独立完成各种功能。其实就是接触多了,能在原有的功能上,懂得举一反三了。

虽然能实现各种功能吧,但总觉的还是差那么点劲,就是总是感觉代码写得不够专业,又说不出来哪里不专业。

大概在工作到第4年左右,自身也有经验了,跳槽也有更多的选择,能进一些项目相对复杂点的公司了。

从那个时候,自己的认知,确实被一些大佬写的代码颠覆过几次,原来单片机的代码还能这样写?

就像很多无际项目特训营的老铁,系统学习我们项目后,也会被颠覆原有的认知一样。

并不是说有多复杂,或者多高深的技术,而是每个人写代码的思维,确实不一样。

你接触到的产品代码,可能是上一任工程师,积累了很多年,一次次迭代出来的版本。

所以为什么工作以后,能力提升才比较快,这是其中一个因素,直接能学到别人积累几年的东西。

不过这个也要看机遇和选择,也有可能工作10年也碰不到。

后面我也找到了代码提升的方向,就是实现功能的同时,怎么把代码写得扩展性和移植性更高一点,再是整体程序架构的设计,能做到这一步,基本就能独立开发各种项目了。

有人带,能接触到好项目,又有学习意识的话,其实也很快,大概2-4年左右。

有些同学说,接触不到,那该怎么去提升?

其实还是有现成的,且非常优秀的学习渠道的。

可以按照顺序,把我说的这3套程序搞明白,编程思维和水平基本就到天花板了,哪怕没到,去做任何项目都没问题。最多就是不同的行业,可能涉及到行业的专业知识和算法,这个可能还要针对性学习下。

第一,STM32固件库,学习他们面向对象的编程思维,学习代码的封装方法,对模块化编程思维帮助很大。

第二,无际单片机那套程序架构教程,是我2018年录着玩的。

熟悉c语言"三板斧":枚举、结构体、指针的实际应用,初步学习系统的一些原理,比如任务管理,队列,以及用这些对实际项目有什么帮助等等。

可以找我安排拿。

第三,学习OSAL系统,这个是TI蓝牙协议栈的事件型驱动系统,也能适用于别的单片机,之前我做过几款蓝牙产品,对系统挖的比较深,然后按照他们的设计思路,经过剪裁改编,用于后面的STM32项目上。

能把以上3套架构吃透,我觉得水平已经可以吊打大多数有10年开发水平的工程师了。

这个阶段,项目上RTOS,对你来说就是一种累赘。

第四,RTOS,如果OSAL系统都不能满足你了,下一步可以深入研究,或者把前面两个系统,加上现场切换和优先级管理,改变成更加精简的RTOS。

不过,如果你有前面三个架构的经验积累,RTOS对你来说,就是小菜一碟,也就是1-2周学会的事。

以上4个方向,需要有一定开发经验的人去学习,否则看不出里面的门道和精华。

下面还是总结下,在学校,和实际工作,有什么区别?

1.学校学习的目的,是为了通过考试,工作学习的目的,是解决业务需求。

2.在学校喜欢刨根问底,重复造轮子。

编程的能力不在于,你对这门语言语法背诵,以及几个数据结构和算法的记忆。

在实际工作中,更多在于怎么设计架构,怎么组织整合代码。 语法是可以百度的,单片机外设例程原厂/代理商也会提供,你只需要知道怎么调用修改。

工作后,见过鬼,怕黑了,不想再装逼秀技术了,只想快点完成任务,有现成代码可以抄,我觉得贼幸福,领导和甲方,大概是魔鬼。

所以后面我写了通用程序架构,换了项目直接移植,修改。目前我们特训营项目就用这些架构。

3.工作才是学习的开始,大学生活只是让你准备好。

4.除了技术,你还要考虑业务知识、测试、质量、生产效率和可持续性。

5.学校学的也有用,但是理论和实践之间,有巨大的鸿沟,要趁早多做点实际项目,培养经验和工程感。

6.工作前几年,能从头到尾,让你完整做一个项目的机会,其实并不多。

7.机会总是有的,你要做的只是准备好。


最近很多粉丝问我单片机怎么学,我根据自己从业十年经验,累积耗时一个月,精心整理一份「单

片机最佳学习路径+单片机入门到高级教程+工具包」全部无偿分享给铁粉!!!

除此以外,再含泪分享我压箱底的22个热门开源项目,包含源码+原理图+PCB+说明文档,让你迅速进阶成高手

教程资料包和详细的学习路径可以看我下面这篇文章的开头

《单片机入门到高级开挂学习路径(附教程+工具)》

《单片机入门到高级开挂学习路径(附教程+工具)》

《单片机入门到高级开挂学习路径(附教程+工具)》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/16961.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多线程理论及操作

【一】什么是线程 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程 线程顾名思义,就是一条流水线工作的过程 一条流水线必须属于一个车间,一个车间的工作过程是一个进程 车间负责把资源整合到一起&#xff…

06_Tomcat

文章目录 Tomcat1.概念2.Tomcat安装3.Tomcat项目结构4.标准web项目结构5.Tomcat部署项目方式6.IDEA关联Tomcat6.1 构建tomcat和idea关联6.2 使用idea创建一个Javaweb工程6.3 使用idea将工程**构建**成一个app6.4 使用idea将构建好的app**部署**到tomcat中 Tomcat 1.概念 Tomc…

Nginx R31 doc-13-Limiting Access to Proxied HTTP Resources 访问限流

前言 大家好,我是老马。很高兴遇到你。 我们为 java 开发者实现了 java 版本的 nginx https://github.com/houbb/nginx4j 如果你想知道 servlet 如何处理的,可以参考我的另一个项目: 手写从零实现简易版 tomcat minicat 手写 nginx 系列 …

进程信号(2)

一、信号的处理 进程对应信号的处理的一般步骤就是:先去遍历pending位图,找到比特位为1的位置对应的信号,然后再去检测block位图对应位置的比特位是否为1。若不为1,就hander表的对应位置去调用信号的处理动作函数,若为…

探索增强现实(AR)的未来:超越智能手机与AR滤镜

随着技术的不断进步,增强现实(AR)正逐渐从智能手机和简单的AR滤镜中解放出来,迈向一个全新的时代。Ericsson ConsumerLab的最新研究报告《Augmented tomorrow: AR experiences beyond smartphones and AR filters》为我们提供了一个关于AR技术未来发展的深刻洞见。本文将探…

JS入门学习

JS JavaScript是一门解释型的脚本语言,其是弱类型的,对变量的数据类型不做严格的要求,变量的类型可以在运行过程中变化 JavaScript能改变HTML内容,属性,样式 大纲 使用方式变量运算符数组JS函数自定义对象事件补充 …

训练的过程中内存一直增加的问题(内存泄漏)、如何检查是否内存泄漏

更新于:2024年5月27日09:47:01 经过了漫长的排查,使用tracemalloc也并不能找到哪里内存泄漏,最后只能通过给出的错误去反思,然后再凭感觉去猜测错误所在位置: 所报的错误是: Too many open files&#x…

mysql中InnoDB的表空间--独立表空间

大家好,上篇文章我们在讲mysql数据目录的时候提到了表空间这个名词,它是一个抽象的概念,对于系统表空间来说,对应着文件系统中一个或多个实际文件;对于每个独立表空间来说,对应着文件系统中一个名为表名.ib…

DQL( 数据查询语言)

1. 基本查询 select * from 表名; select 字段,字段2,… from 表名; select * from 表名 where 筛选条件; select 字段,字段2,… from 表名 where 筛选条件; 2. 范围查询 select * from emp where sal 3000; select * from emp where sal ! 3000; select * from emp where s…

node.js学习P3-P10

P3 npm package.json(package解读npm工具换镜像源) 一个package.json文件可以的作用 作为一个描述文件,描述了你的项目依赖哪些包 ,用来干什么的允许我们使用“语义版本规则”,指明你项目依赖的版本让你的构建更好的…

Java绩效考核系统源码 springboot员工绩效考核系统源码

Java绩效考核系统源码 springboot员工绩效考核系统源码-009 源码下载地址:https://download.csdn.net/download/xiaohua1992/89352195 项目介绍 本系统的功能分为管理员和员工两个角色 管理员的功能有: (1)个人中心管理功能&a…

代码随想录训练营Day49、50、52:Leetcode123、188、309、714、300、674、718

Leetcode123: 问题描述: 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。 注意:你不能同时参与多笔交易(你必须在再次购买前…

一文搞定cuda版本、显卡驱动及多CUDA版本管理

安装cuda是每个AI从业人员必经之路。网上关于cuda、显卡驱动已经相关命令很多都解释不清楚,于是本文梳理一下,既方便自己记忆,也方便小白学习。 CUDA 首先,CUDA版本,一般指cuda-toolkit,即cuda开发工具包…

XShell免费版的安装配置

官网下载 https://www.xshell.com/zh/free-for-home-school/ 下载地址 通过邮箱验证 新建会话 通过ssh登录树莓派 填写主机IP 点击用户身份验证 成功连接

hadoop基础之MapReduce的学习

hadoop基础之MapReduce的学习 MapReduce的执行步骤: 1.Map package com.shujia.mr.worcount;import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapp…

24校招总结

个人背景 本科:三本通信专业 硕士:B区双非计算机硕 今年2月签了东南沿海二线城市某公司C游戏服务端开发 我同学大部分都是去电网,大专老师,气象局事业编……就我这个是纯牛马了。 离收到Offer3个月了,前段时间参加…

高项案例分析知识点总结

文章目录 纠错题计算题进度估算成本管理立项管理版本管理组合管理知识产权信息技术计算题运筹学 纠错题 人:人员经验、能力、数量、缺少培训;自己一个人完成需求和计划不正确流程:先做什么,后做什么,流程是否正确。是…

前端基础入门三大核心之JS篇:掌握数字魔法 ——「累加器与累乘器」的奥秘籍【含样例代码】

前端基础入门三大核心之JS篇:掌握数字魔法 ——「累加器与累乘器」的奥秘籍 🧙‍♂️ 基础概念:数字的魔杖与炼金术累加器(Accumulator)累乘器(Multiplier) 📚 实战演练:…

c++ (命名空间 字符串)

思维导图&#xff1a; 定义自己得命名空间myspace,在myspace中定义string类型变量s1,再定义一个函数完成字符串逆置 #include <iostream> #include <cstring> //定义自己得命名空间myspace,在myspace中定义string类型变量s1,再定义一个函数完成字符串逆置 using n…

抽屉网关停,Digg类网站退出互联网舞台

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 别人我不清楚&#xff0c;至少在松松我心中&#xff1a;抽屉网是世界著名的网站&#xff0c;而近期抽屉新热榜突然宣布关站了&#xff0c;我内心充满遗憾。因为抽屉网站收集的内容&#xff0c;让我看到了更大的世界…