嵌入式开发入门指引,你学到了吗?

开发 前端
8位单片机是基础,升级32位ARM是阶段目标,一般选STM32,资料丰富。基于原厂库函数实现复杂功能,对接外设,如蓝牙模块、GPS模块等,数据采集过滤、存储、传输等。理论方面比如编译、链接、OTA、socket等也需要明白。

[[442103]]

 1、入门

C语言:嵌入式编程大多用C语言,少量汇编,C语言必须熟练掌握。

电路:基本的模拟电路、数字电路知识,能大概明白电路原理图;掌握从原理图到PCB板的技能或常识;会焊接、调试,使用常用仪表。

51单片机:虽然落后,但学习相对简单,IO、中断、定时器,AD、Flash、UART、IIC等基础;辅以简单的开发板练习,巩固基础、原理。

C51基础,会看datasheet,使用官方库或寄存器设置,能实现中等难度的裸机程序;达到这个能力,后续换其它型号也容易举一反三,快速掌握。

2、进阶

ARM单片机:8位单片机是基础,升级32位ARM是阶段目标,一般选STM32,资料丰富。基于原厂库函数实现复杂功能,对接外设,如蓝牙模块、GPS模块等,数据采集过滤、存储、传输等。理论方面比如编译、链接、OTA、socket等也需要明白。

实时操作系统:裸机开发是基础,要提高必须跑系统,如freerRTOS 、rt-thread等。学会移植,使用系统接口开发复杂功能,尽量研究下RTOS的源码,其数据结构、编码规范是学习的参考资料。注意软件分层与模块化思想。

应用层:掌握一定的C++或QT基础,开发一些辅助工具,也可快速验证纯软件逻辑,见识面向对象开发的思维。其它语言如perl、shell、python、批处理都可以学个基础,能一边百度一边写出就行。

正式项目一般基于原厂SDK开发,非通用芯片使用特有的开发环境、调试工具等,有了前面基础,新平台1-3周足以应付。做项目和学习的专注点不同,要求的是稳定、性价比,不追求技术的先进性。

学习中总结失败教训,梳理开发流程、技巧,整理成技术文档,加深理解,这些文档不仅对自己,对其他人也是财富。

3、规划

具备一定基础了,后续发展看个人爱好或市场需求,软件或硬件或全栈,相比来说嵌入式软件需求大。其下细分单片机开发支持RTOS实时系统或者Linux,前者容易,后者需求大,但入门难,即使精通一个组件或方向也能发展不错。Linux路线,先学会应用开发,再驱动,最后深入内核。

基本上规划大概率决定了职业方向,尽早规划,提前准备,有针对性的学习RTOS或者Linux或者硬件电路,后续往深度发展。如果不适合技术路线,有点基础再从事市场营销也大有裨益。

除技术之外,嵌入式开发对行业经验也有一定要求,不同行业应用的技术侧重点不同,可以参考相关公司的招聘要求,有针对性的去了解。

选择比努力重要,同样是软件开发,不同行业也存在较大区别。第一份工作尽量选个好方向、挑大公司,有这些起点背景,后续发展会更好;最开始的方向和平台没选对,后面再折腾会走很多弯路,也许一生的职业发展就在错误的路上,再努力也很难达到一定高度。

4、发展

“三人行,必有我师焉;择其善者而从之,其不善者而改之”,不论哪种职业,要善于总结、学习周围人的长处,比如软件开发,阅读优秀开源代码是快速提高软件开发水平的主要途径。

持续学习,从深度与广度发展,总结分享技术成果。如果感到没有参考目标了,说明已经成为一方权威或者该换地方了。

5、个人感想

以前有个困惑,有的老年人做饭一辈子,可是烧菜的水平还是有限;一些烹饪技校的学徒,几年时间后做出的饭菜明显高于一般家庭主妇。这个问题,也许答案是持续学习、不断进步。社会在进步,技术在更新,不断接触新的,不一定都要亲自动手实践,能评估可行性,知道大概如何实现即可,有需求时再深入细节。

嵌入式系统开发方向繁多,只要肯专研,精通一门,成为食物链顶端的人,人生轨迹都不会差。

嵌入式软件开发,C语言是基础;有需要请添加个人微信,微信号隐藏在C代码中:

  1. //个人微信号 
  2. #define UNKNOWN ('-'-'-'
  3. #define C(c) #c[0]+23 
  4. #define CC "%" 
  5. #define CCC CC"c"CC"c" 
  6. #define CCCC(c) ??=c"02" 
  7.  
  8. int main() 
  9.     int a=100; 
  10.     char error = 0xFF; 
  11.     char work = "RTOS"['/'/'/']/2021; 
  12.     printf("c"CCC"n"CCC"%c%"CCCC(c)"%c"CCC"\012"
  13.            work["mtk"]-5,work["embedded-system"],work["gps"],\ 
  14.             UNKNOWN["java"],UNKNOWN+3["linux"],(-~UNKNOWN)["Android"],\ 
  15.             C(c),UNKNOWN??("my_wechat"??),"number here"??(2??)+error); 
  16.  
  17.     return 0; 

 

责任编辑:武晓燕 来源: 嵌入式系统
相关推荐

2021-09-03 06:46:34

MyBatis缓存后端

2009-12-16 15:41:40

嵌入式Linux入门

2011-01-14 13:13:23

嵌入式Linux开发

2021-07-29 18:46:52

可视化类型图形化

2010-04-21 13:22:20

Windows CE

2009-12-09 10:50:53

嵌入式Linux

2009-07-17 16:06:59

ARM嵌入式开发

2020-07-21 18:54:21

Rust类型转换语言

2023-10-16 08:55:43

Redisson分布式

2022-07-18 07:58:46

Spring工具工具类

2010-01-13 09:15:35

嵌入式

2011-07-05 15:42:02

QT 嵌入式 Embedded

2021-10-26 21:50:10

Rust嵌入式开发

2018-01-29 08:31:32

嵌入式内存技术

2023-04-10 07:40:36

GraphQLRest通信模式

2010-01-07 10:45:38

嵌入式Linux入门

2020-04-14 08:46:47

Java对象编译器

2011-01-06 15:11:09

嵌入式linux

2009-12-23 10:33:30

Silverlight

2011-06-13 14:00:55

Qt Designer linux
点赞
收藏

51CTO技术栈公众号