我是老温,一名热爱学习的嵌入式工程师
. l. ^% K" T1 O关注我,一起变得更加优秀!
9 j. H: s/ R8 _' S& P在互联网纯软件技术领域,我们经常会看到互联网大厂设立“软件架构师”的岗位,负责系统设计、技术选型和性能优化等工作,而且架构师的岗位薪资通常也比较高。0 N. B& x4 G2 G7 Y- j
然而,在嵌入式软件技术领域,一般很少能见到企业招聘“嵌入式软件架构”这个岗位,是因为嵌入式软件不需要进行架构设计,所以不设立架构相关的岗位吗?
9 U& t2 c( @" I( o A0 D本文尝试从以下三个维度展开进行分析:
+ J0 d9 ~6 Z9 t" k1、什么是嵌入式软件架构师?2、为什么嵌入式软件要有架构思维?3、嵌入式软件工程师如何培养架构思维?
7 E$ e, x4 }! |+ A% s9 F4 D! L+ a希望能帮助嵌入式工程师理解软件架构思维的重要性,并能找到提升自身架构能力的方法。
3 I, w+ x+ l! T! p8 e( h
hwludx5uun264015140209.jpg
. x6 a/ d! f' A/ \- R$ o1、什么是嵌入式软件架构师?
6 v8 e: ~& ]1 L! j架构师,顾名思义,是指负责嵌入式软件系统整体的架构设计、技术选型和解决关键问题的岗位,通常扮演着高级技术专家的角色。
% r5 {& \) ?/ _; M; T虽然大部分企业没有明确设立嵌入式软件架构师这个岗位,但架构设计的工作通常由资深的嵌入式软件工程、技术负责人或者系统工程师承担。& x4 d4 }8 M2 d( y2 P: @/ r
(1)嵌入式软件架构师的核心职责有哪些?
. h8 q$ Q# i1 N0 Z/ p" w--系统级架构设计:根据硬件资源设计合理的软件架构,确保系统能满足实时性、低功耗、高可靠性等关键指标,制定模块化和可扩展的代码结构,降低模块间的耦合度。% Q! O" G1 n: r1 G: o6 z
--技术选型与标准化:选择合适的RTOS或者裸机开发模式,制定通信协议的实现标准和接口,评估第三方库的适用性和可移植性。9 f7 ]5 i9 `5 R T& a3 Q
--性能优化与可靠性保障:优化内存使用,调整堆栈管理和动态内存分配策略;设计看门狗机制和错误恢复策略,提高系统的稳定性;制定OTA升级方案以确保固件的可维护性。5 `5 }1 X( m* e2 S' h0 [1 V$ h# Q! x
(2)嵌入式软件架构师 VS 互联网软件架构师
{; J, X3 `4 R9 V" i
3tx3yx3ud2s64015140309.png
1 Q$ b; f# q( Z& Y- r9 _1 H1 P8 Z从以上对比可以看出,嵌入式软件架构师更加注重底层硬件的适配,通过软件设计策略,让硬件资源达到最优的使用率。
* `% a1 K, f: v" J' }8 c2、为什么嵌入式软件要有架构思维?4 T; s: r1 |- |) N& ?: |3 S/ T
虽然很多嵌入式软件项目规模较小,但在平时的开发里面,架构思维仍然至关重要,以下列举几个关键的原因。
6 `, v. M. w, I& d+ V(1)硬件资源受限,必须高效进行利用
?2 j& C% ]. s9 D某些嵌入式设备采用低功耗的单片机芯片进行设计,内存和计算资源通常比较受限,如果没有良好的架构设计,其代码可能会存在内存泄漏、任务调度不合理、外设驱动高度耦合的情况。, }- v/ B( W* p/ _/ [ H: H
(2)系统复杂度越来越高
4 d1 y+ j& U) K L2 k0 h9 i5 y5 q" q早期的嵌入式设备功能相对比较单一,但现代的嵌入式系统功能已经越来越复杂,通常需要RTOS进行多任务调度,网络协议通信,AI推理等等,如果没有清晰的模块化架构设计,代码将会变得越来越臃肿,以至于难以维护。' S: E4 G& i6 i4 t5 F
(3)可维护性决定产品生命周期
1 L/ K4 d+ y( ?" }7 s) Q嵌入式设备的生命周期通常比较长,工业设备可达10年以上,如果代码架构混乱,将会导致后续功能迭代困难,Bug难以定位和修复,新成员接手代码的成本非常高。
; x$ H4 X6 t$ w; m. S& o(4)软件定义硬件,成为行业趋势。( N, @0 h$ W3 o' s. w; x3 p
过去的嵌入式软件开发是以硬件设计作为主导的,软件设计只是辅助。但现在越来越多的智能硬件产品,依赖软件实现差异化竞争,因此,良好的软件架构能提高开发效率,降低硬件依赖,并且支持更快的产品迭代。9 D$ N7 ?- Y" z2 O8 x- B
omvjegjhrwb64015140409.jpg
7 w& A0 i) L8 l2 E" T+ h- M; k! t/ |1 g3、嵌入式软件工程师如何培养架构思维?) @+ m& o7 V* C3 u$ y
(1)注重模块化编程设计
4 D- _, h; @6 ]" s z% \8 y4 R* l3 B遵循高内聚低耦合的设计原则,每个模块只负责单一的功能;使用头文件进行接口封装,隐藏源代码的实现细节,采用面向对象的思想,提高代码的可复用性,如以下示例代码。// 代码模块化设计:UART驱动接口 typedef struct { void (*init)(uint32_t baudrate); void (*send)(uint8_t *data, uint16_t len); void (*receive)(uint8_t *buffer, uint16_t len); } uart_driver; // 使用接口,而不是直接操作寄存器 uart_driver uart1 = { .init = uart1_init, .send = uart1_send, .receive = uart1_receive }; (2)学习优秀的开源代码架构
7 U3 U" G8 z/ v% k1 W( x& X4 g至少学习一款RTOS的使用,比如FreeRTOS,学习任务调度,内存管理,IPC机制,研究设备树和驱动模型,理解platform_device和platform_driver等Linux驱动框架的设计思想。
% M, T/ y2 `5 y(3)掌握架构设计工具
3 `, a1 K/ n3 Q/ Y善于运用架构设计工具,如使用UML描绘状态图,用以描述系统行为;使用PlantUML绘制架构演进路线,使用PC-Lint或Cppcheck等静态分析工具,发现潜在的软件架构问题。( O" }' D1 K0 F* l% E3 K
(4)参与完整项目,积累设计经验- m- ^% L, {9 r8 C2 D) t" ^& I( t
从小型的MCU裸机开发,逐步过渡到中小型的RTOS项目,尝试根据具体的业务逻辑来重构旧代码,优化现有的代码架构设计,关注热门行业领域的嵌入式技术动态和架构趋势。
4 T: E& H. B4 j/ k4、总结概括( f& k: a6 G P' }; i. t
嵌入式软件架构师的岗位职责并不是不存在,而是由于这个技术领域和相关行业特点,这一角色通常是由经验比较丰富的开发者兼任,随着现代的嵌入式系统功能越来越复杂,架构思维将会成为嵌入式软件工程师的核心竞争力之一。( E1 H3 ?" [+ R% X! M& k0 f! {
对于嵌入式软件工程师来说,与其等待企业设立架构师岗位,不如在实际项目里面,主动培养整体的系统架构思维。
! v! p6 a' V, w+ y# [# x嵌入式软件的整体发展方向,一定是更高效率、更低功耗、更强可维护性、更高可扩展性,而良好的架构设计正是实现这一目标的关键!
. S# H3 _5 b! _1 ]8 @ b) G
umo2xrqqckm64015140509.jpg
, q6 j9 k- A3 o# l; p6 \6 \6 `-END-, M: O- o6 ~0 |3 ^
往期推荐:点击图片即可跳转阅读
3 @" q& j) i I
ub4lyihn2av64015140609.jpg
8 T5 r& F: M# c$ n w被灵魂拷问!嵌入式为啥要关注AI?这到底能产生什么样的价值?$ s1 z2 N4 v) y7 n
3gbboirdceu64015140709.jpg
9 y' a6 P# c: M! ]/ d嵌入式软件工程师,一定都知道这门技术,现在全世界都在使用它!
5 U: V) {3 q. r! O* T Z
ubzvvkm0uxx64015140809.jpg
$ J+ U( b( R, f+ z8 k: o( C1 a# q) v
嵌入式软件工程师,技术栈发展的三个阶段,天花板到底有多高?3 D! |4 Y+ N5 t# Q; l% O) v
我是老温,一名热爱学习的嵌入式工程师' s! x' X' ?/ a" n1 Y
关注我,一起变得更加优秀! |