一位高级嵌入式软件开发主管的技术栈 您所在的位置:网站首页 构件式软件技术有哪些 一位高级嵌入式软件开发主管的技术栈

一位高级嵌入式软件开发主管的技术栈

2024-07-17 05:15| 来源: 网络整理| 查看: 265

在这里总结一下我从业多年来的技术栈,既是自己的一个总结梳理,也是给有兴趣和志向从事嵌入式软件开发的小伙伴一些分享和交流~

在这里总结了我学习工作多年以来的技术栈,既是自己的一个知识框架梳理,也是给有兴趣和志向从事嵌入式软件开发的小伙伴一些分享和交流~

通用的嵌入式技能

先来总结所有嵌入式软件开发都需要掌握的通用知识,适合在校学生参考。

计算机原理 计算机的组成,原理和术语,如BIOS, WINDOWS, LINUX, 南桥,北桥,显卡,内存,硬盘,网络,电源等等。虽然说程序员不是修电脑的,但是确实从业多年后,自己修电脑的技术也得到了很大的提高了 @_@。 常用的BAT/SHELL语句,这个上面说过了,基本技能。 常用的系统配置,如环境变量,系统日志查看,WINDBG,计划任务,LINUX的APP安装,外设挂载等等。 常用的WINDOWS/LINUX工具 办公软件:Office。 文本编辑软件:Notepad++,Ultra Edit。 邮箱工具:Outlook,Foxmail等。 搜索工具:Everything。 远程工具:Teamview, KConsole ( (= ^ _ ^ =) 自己C#开发的 )。 绘图工具:DrawIO, Visio。 虚拟机:VMWare, VirtualBox。 笔记工具:OneNote,DokuWiki。 网盘工具:OneDrive,Syncthing。 数据分析:WINHEX,Beyound Compare。 任务管理:PingCode。 翻译软件:网易有道。 文件传输:FTP,共享文件夹,KSync( (= ^ _ ^ =) 自己C#开发的 )。 会议工具:Zoom,Teams,腾讯会议。 常用的网站 开源项目:GitHub, Gitee,我自己也会用他们来放一些自己个人的项目,其他GitHub的项目更加丰富,但是不能保存私有仓库而且访问经常受阻,Gitee访问速度快而可以存放私有仓库,但是相对的热门开源项目会少很多。 论坛:21 IC,电子发烧友等。 博客:CSDN,博客园,简书。 技术速查:runoob。 电子书下载:脚本之家。 专利查阅: SooPat。 编程语言 C. 嵌入式软件开发的核心语言,80%以上的代码都是由C完成的。其实C的语言本身并不复杂,核心就是指针和内存管理。工作上更多地是将精力放到协议、业务和算法等功能的实现上,因此,C语言必须十分熟悉,信手拈来。 C#. 嵌入式产品少不了和上位机打交道。有时候是因为通用的工具不满意,有时候是需要定制化一些功能。此时使用C#来做WINDOWS GUI的工具十分方便。得益于丰富且强大的Microsoft.NET Framework库,使用VS+C#的开发模式,学习成本很低就能作出功能强大的工具。后续自己也开发了好几款PC工具,在工作上起了很大的助力作用。 PYTHON. 最早学习PYTHON是因为它实在太火了,抱着好奇的心态去学习了一番。然后很快就被它给征服了。PYTHON的语言包袱很低、学习资料齐全、而且有各种各样的库可以使用,因此学习和使用都十分轻松。这里也推荐大家将PYTHON作为自己的第二语言。我在工作中使用PYTHON做一下数据分析和处理,十分高效便捷。 BAT/SHELL. 脚本语言,只要你的产品需要在WINDOWS/LINUX下运行或者测试,总是需要使用到的,不需要精通,但要知道怎么查资料来快速完成编写。 C++. 早期在学习嵌入LINUX的GUI开发时有用过QT,里面就要用到C++做开发。后面用得比较少,主要是因为C#太方便了 ╮( ̄▽  ̄)╭ 。但是让我印象深刻的一点是QT的可移植性真的强,代码几乎不用修改,就可以在linux,嵌入式linux和windows下直接编译运行。 Assembly. 做嵌入式必须掌握基本的汇编语言。倒不是平时大家说的为了优化性能嵌入汇编代码,这个我从来没见过,反而读研时这个干过,自己写的汇编代码效率不高反而没有直接用C运行得快。主要是CPU在boot up, Hibers, 以及移植rtos时,少不了要使用汇编在实现功能。因为此时栈已经消失,C语言不能用了。如果看不懂汇编,那这个阶段调试起来就举步维艰了。 Markdown. Makrdown是目前最热门的标记语言了,当然除了Markdown还是其他的如Syntax等其他标记原因。不过学会了一种其他的也是依葫芦画瓢的。 Other. Matlab,JAVA等等,用得不多。 编程技能 编码规范:Linux编码风格以及公司研发内部要求的命名格式,包括命令、缩进、注释、复杂度、可读性等要求。 数据结构和算法:栈、队列、链表、树、排序、查找等。 实时操作系统编程:FreeRTOS,RT-Thread,uCOS等。 Linux系统编程:文件(open, read, write, close),进程(fork, exec, wait),线程(pthread, sem, mutex),网络(Socket),同步共享(pipe, mq, sem),I/O模型。 嵌入式Linxu系统构建:ubooty移植,kernel移植,根文件系统构建。 嵌入式Linxu驱动编程:字符设备,块设备,网络设备。 开发工具 代码管理工具:GIT,SVN,GITLAB。 串口工具:XCOM,KCOM( (= ^ _ ^ =) 自己C#开发的 ) 编译环境和编译器:CMake,Make,armcc,arm-linux-gcc,VS。 IDE: Visual Studio, Keil, IAR, VS Code, ADS(Arm Development Studio),QT。 调试工具:Ozone, GDB, Segger Jlink全家桶。 测试技术 黑盒测试:CI持续集成测试(Daily/Weekly),代码Merge测试,冒烟测试(Smoke test),回归测试(Regression test)。 白盒测试:单元测试,静态代码检查PC-lint。 硬件技能 SCH:看懂原理图,熟悉基本的模拟电路、数字电路原理。 PCB:掌握基本的PCB布线规则,进阶可以掌握Altium Designer等软件进行PCB设计。 焊接:最基本得懂得怎么焊飞线,进阶可以掌握焊SOP,LQFP,BGA等封装的IC。 Spec/datasheet:看懂芯片手册,需要CET4或以上的英语基础。 开发管理技能 软件协作管理工具:JIRA,PingCode。 多人写作知识库:Confluence,DokuWiki。 开发模式:IPD集成产品开发流程、瀑布线开发、V字形开发、敏捷开发等。 其他感兴趣的技术 人工智能:深度学习TensorFlow。 无人机:四轴。 物联网:TCP/IP,Lora,Zibee,Bluetooth,MQTT。 专业领域的技能

嵌入式开发是一个很庞大很广泛的技术。除了一些通用技能外,还有各行各业的领域细分。不同的细分需要掌握的技能可谓是各不相同。例如:

无人机领域,需要掌握姿态角合成,电机控制,无线通讯等技能; 物联网领域,需要掌握各种各样的通讯协议,TCP/IP,Lora,Zibee,Bluetooth,MQTT等; 工业控制,需要掌握电机控制,MODBUS/CAN总线通讯,GUI开发等;

本人是从事存储产品开发的,存储产品包括SSD,UFS,eMMC,SD卡,U盘等。属于一个比较小众的领域,但其技术壁垒也是十分的高。 可以说通用的技术栈只是嵌入式工程师的基础,真正有体现价值的技术还是在于你在某个细分领域的专业程度。只有自己的专业领域有了一定高度的建树,才具有自己的不可替代性,才能体现出自身的经验。 而电机控制、网络通讯、GUI开发等细分技术,都有可能是自己奋斗一辈子都没有掌握透的技术。因此专业领域的技术栈,更加体现工程师的职业高度。

在后续的文章也我也会继续与大家分享我的专业领域的技术栈~

本文来自博客园,作者:{冷剑白狐77},转载请注明原文链接:https://www.cnblogs.com/KugaChan/p/15916529.html



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有