对于嵌入式工程师,需要掌握的知识是广还是精?

我刚开始接触嵌入式的时候,感觉学这个好变态啊。

要学的东西太多了,数字电路、模拟电路、C语言、汇编、51单片机、Protel 99SE、Pcb Layout、STM32单片机、RTOS、Linux、ARM等等....

可以说,随便拿个魔法电路出来,想达到精的程度,都够摸索好几年。

所以,我的建议是:精于基础,广于工具

做了单片机开发10年,虽然产品类型一直在变,但如果做多了,会发现,很多都是能够改改复用的,很多都是能够举一反三的。

特别是对于单片机来说,更是大同小异。

我用过STC、NXP、NUC、ST、TI等单片机,其实内部资源,最常用的无非就是GPIO、定时器、串口、ADC、IIC、SPI等等,也不多..

你会用ADC采集电池电量,你也能举一反三,用ADC去采集各种传感器信号了。

无非就是,采集以后,数据结构和算法的差异。

我见过大多数的新手,普遍分不清工具基础,以及对它们重要性的权衡失误

有些新手,51单片机都玩不转,常用通信协议都没用过,就疯狂进阶STM32、RTOS。

最后发出感叹,卧槽,这太难了。

其实就是花了太多时间,在工具层面的学习,而基础是千疮百孔的。

工具是什么?

我觉得是编程语言、单片机、RTOS、Keil、stm32cubeMX、AD...

要知道,我们最终的目的是什么?

往近了说,就是要有做项目的能力,这决定你找工作,能否有优势?能否开高工资。

往远点说,就是要解决用户的需求,这决定企业能不能挣到钱,能不能在市场立足。

好比写作文,哪怕你精通行书,楷书,草书,隶书....对于写好作文来说,帮助不大。

工具,其实会随着时间,不断变化的,比如今年STM32用得多,或许明年就被国产替代了。

基础是什么?

以我们无际单片机项目特训营的项目3为例,举个简单例子。

比如我要检测按键短按、短按释放、长按、连续长按、长按释放功能,要求做到移植方便,扩展按键方便。

这种功能,我的实现思路和步骤是什么?

第一步:先搞懂硬件原理。

硬件原理很简单,就是检测单片机IO电平,低电平代表按键按下。

第二步:思考单个按键实现按键短按、短按释放、长按、连续长按、长按释放的逻辑。

其实检测短按、短按释放、长按、连续长按、长按释放的核心,就是检测IO口低电平的持续时间。

我程序对短按的定义,就是2秒以下,都是短按,2秒以上是长按,然后2秒以后,每个150ms,代表连续长按。

所以,写代码,首先要抓到功能硬件原理的规律线索,再思考程序怎么实现。

刚开始,先实现功能,出第一个功能版本,再继续优化成几个按键的,这样难度会小一点。

代码有点长,且是我们付费项目代码,就不截全了。

这个代码,有很多数组,是因为已经实现可多按键的功能。

第三步:考虑如何扩展多按键

为什么要考虑多按键的扩展?

因为傻杯项目经理,整体要改功能需求,做好预留,免得哪天晚上加班改到凌晨。

像这种,多个器件(按键/LED)有同样功能的,最好的解决方式,就是用数组,然后用for循环去遍历了。

所以,我采用数组的方式,单个按键电平检测是单独的函数,最后整合到函数指针数组里,这样方面for去遍历。

用这种程序架构,有什么好处?

1.增加,减少按键很方便,直接修改相关的数组,还有电平检测函数就可以了。

2.可移植性强,哪怕换一款产品,换了不同的单片机,只要定义hal1_getKey1Sta这些硬件驱动层接口就好了,不需要改按键检测核心函数hal_KeyProc。

总结下,基础是什么?

我觉得是功能实现背后的原理、协议、思路、接口、思维、框架。

有好的编程思维,代码水平,以这两者为基础,能衍生出更好的程序架构、数据结构、算法。

我们应该精于这些东西,虽然每个产品的功能不一样,但实现思路是一样的,是能举一反三的。

就像等你做了开发5年以后,突然有一天,对指针是灵魂的理解,恍然大悟,卧槽,原来c语言也能实现面向对象的代码风格。

而不是死记,c是面向过程的语言,java是面向对象的语言。


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

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

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

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

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

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

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

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

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

相关文章

【C++】C++11可变参数模板

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 🌝每一个不曾起舞的日子,都是对生命的辜负 目录 前言 可变参数模板的定义…

Java绘图坐标体系

一、介绍 下图说明了Java坐标系。坐标原点位于左上角,以像素为单位。在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐…

LLM大语言模型(九):LangChain封装自定义的LLM

背景 想基于ChatGLM3-6B用LangChain做LLM应用,需要先了解下LangChain中对LLM的封装。本文以一个hello world的封装来示例。 LangChain中对LLM的封装 继承关系:BaseLanguageModel——》BaseLLM——》LLM LLM类 简化和LLM的交互 _call抽象方法定义 ab…

操作系统理论知识快速总览

操作系统整体架构 搬出考研时的思维导图 操作系统主要分为 批处理系统(老古董,基本不用了)实时操作系统(嵌入式中使用较多,RTOS)分时操作系统(PC中使用较多,Linux,Windows) 分时操作系统和实时操作系统的使用场景不同&#xf…

【蓝桥杯第十二届省赛B】(部分详解)

空间 8位1b 1kb1024b(2^10) 1mb1024kb(2^20) 时间显示 #include <iostream> using LLlong long; using namespace std; int main() {LL t;cin>>t;int HH,MM,SS;t/1000;SSt%60;//like370000ms370s,最后360转成分余下10st/60;MMt%60;t/60;HHt%24;printf("%02d:…

[C语言]——动态内存管理

目录 一.为什么要有动态内存分配 二.malloc和free 1.malloc 2.free 三.calloc和realloc 1.calloc 2.realloc 3.空间的释放​编辑 四.常见的动态内存的错误 1.对NULL指针的解引用操作 2.对动态开辟空间的越界访问 3.对非动态开辟内存使用free释放 4.使用free释放⼀块…

外汇110:谷歌起诉应用程序开发商伪造加密投资APP诈骗!

谷歌&#xff08;Google&#xff09;已对两家应用程序开发商提起诉讼&#xff0c;指控其参与“国际在线消费者投资欺诈计划”。该计划欺骗用户从 Google Play 商店和其他渠道下载虚假的安卓&#xff08;Android&#xff09;应用程序&#xff0c;并以承诺更高回报为幌子窃取他们…

SinoDB用户权限

SinoDB用户权限是由数据库对象和操作类型两个要素组成的&#xff0c;定义一个用户的权限就是定义这个用户可以对哪些数据对象进行哪些类型的操作。 SinoDB使用了三级权限来保证数据的安全性&#xff0c;它们分别是数据库级权限&#xff0c;表级权限和字段级权限。 1. 数据库级…

备考ICA----Istio实验17---TCP流量授权

备考ICA----Istio实验17—TCP流量授权 1. 环境准备 1.1 环境部署 kubectl apply -f <(istioctl kube-inject -f istio/samples/tcp-echo/tcp-echo.yaml) -n kim kubectl apply -f <(istioctl kube-inject -f istio/samples/sleep/sleep.yaml) -n kim1.2 测试环境 检测…

LangChain-14 Moderation OpenAI提供的功能:检测内容中是否有违反条例的内容

背景描述 我们在调用OpenAI的接口时&#xff0c;有些内容可能是违反条例的&#xff0c;所以官方提供了一个工具来检测。 安装依赖 pip install --upgrade --quiet langchain-core langchain langchain-openai编写代码 下文中我们使用了: OpenAIModerationChain 这个工具来…

PHP运算符与流程控制

华子目录 运算符赋值运算符算术运算符比较运算符逻辑运算符连接运算符错误抑制符三目运算符自操作运算符 计算机码位运算符 运算符优先级流程控制控制分类顺序结构分支结构if分支switch分支 循环结构for循环while循环continuebreak 运算符 运算符&#xff1a;operator&#xf…

JNA、JNI、原生C++函数调用效率及测试过程

结论 如果JAVA要高效调用C函数&#xff0c;则需要通过JNI封装C函数后进行native方法调用&#xff0c;JNI的执行效率比JNA高600倍左右。从开发效率上来说&#xff0c;JNA开发速度比JNI快许多&#xff0c;因为不需要做二次封装 测试对比 纯C调用&#xff1a; Function call to…

深入了解iOS内存(WWDC 2018)笔记-内存诊断

主要记录下用于分析iOS/macOS 内存问题的笔记。 主要分析命令&#xff1a; vmmap, leaks, malloc_history 一&#xff1a;前言 有 3 种思考方式 你想看到对象的创建吗&#xff1f;你想要查看内存中引用对象或地址的内容吗&#xff1f;或者你只是想看看 一个实例有多大&#…

【强化学习】Actor-Critic

Actor-Critic算法 欢迎访问Blog全部目录&#xff01; 文章目录 Actor-Critic算法1.Actor-Critic原理1.1.简述1.1.优劣势1.3.策略网络和价值网络1.3.1.策略网络&#xff08;Actor)1.3.2.价值网络&#xff08;Critic) 1.4.程序框图和伪代码 2.算法案例&#xff1a;Pendulum-v12…

T-Mamba:用于牙齿 3D CBCT 分割的频率增强门控长程依赖性

T-Mamba&#xff1a;用于牙齿 3D CBCT 分割的频率增强门控长程依赖性 摘要Introduction方法T-Mamba architectureTim block T-Mamba: Frequency-Enhanced Gated Long-Range Dependendcy for Tooth 3D CBCT Segmentation 摘要 三维成像中的高效牙齿分割对于正畸诊断至关重要&am…

Windows系统读取XDMA实际运行链路速度和PCIE带宽

在我们平常设计XDMA的时候&#xff0c;经常会遇到一个问题&#xff1a; 在Vivado中设计的XDMA IP中选择的PCIE带宽和链路速度是理想的&#xff0c;但是下到板卡运行的时候&#xff0c;测量速度却发现读写速度根本不是理想中的速度&#xff0c;找不到问题&#xff0c;无法证明我…

Octopus:2B 参数语言模型即可媲美 GPT-4 的函数调用性能

近年来&#xff0c;大语言模型在 PC、智能手机和可穿戴设备的操作系统中应用逐渐成为趋势。 例如&#xff0c;MultiOn (Garg, 2024) 和 Adept AI (Luan, 2024) 等 AI 助理工具&#xff0c;以及 Rabbit R1 (Lyu, 2024) 和 Humane AI Pin (Chaudhri, 2024) 等 AI 消费产品在消费者…

蓝桥杯 交通信号 2022研究生组

问题&#xff1a; Dijstra算法变形题&#xff0c;有向边分正行和逆行方向&#xff0c;注意逆行的绿灯时间是正行的红灯时间。 这题的关键是理清从当前节点出发&#xff0c;到下一个节点是哪一时刻&#xff0c;理清这一点后&#xff0c;再跑Dijstra算法求最短路。 假设curr_t时…

JavaScript(三)-Web APIS

文章目录 DOM事件进阶事件流事件流与两个阶段说明事件捕获事件冒泡阻止冒泡解绑事件 事件委托其他事件页面加载事件元素滚动事件页面尺寸事件 元素尺寸与位置 DOM事件进阶 事件流 什么是事件流 事件流指的是事件完整执行过程中的流动路径 事件流与两个阶段说明 捕获与冒泡 …

简介:基于Web的产品3D

基于 Web 的产品 3D 通过可视化界面获得各种选项来个性化他们的产品&#xff0c;例如颜色、材料、尺寸、文字、徽标、零件等。 在过去几年中&#xff0c;随着 3D 建模和渲染软件的出现&#xff0c;3D 渲染现在更常用于营销和促销目的。设计师、制造商和营销人员使用 3D 产品渲…