课程简介
六个模块对应六个实际工作场景▂▃▅█提高嵌软架构师的岗位胜任力
1)程 序 结 构 设 计——做到模块间松耦合
2)运行时 结 构 设 计——结构清晰地控制精确联动
3)底层模块的漂亮设计——做到可重用、可扩展
4)四种需求变更的应对——让需求变更不再痛苦
5)模块接口的漂亮设计——搞定Call、Callback、Msg接口
6)远程协议的漂亮设计——搞定最复杂的交互
目标收益
精准提高嵌软工程师的岗位胜任力
1)程 序 结 构 设 计——做到模块间松耦合
2)运行时 结 构 设 计——做到硬件间精确联动
3)底层模块的漂亮设计——做到可重用、可扩展
4)功能模块的漂亮设计——做到可配置、可扩展
5)模块接口的漂亮设计——搞定Call、Callback、Msg接口
6)远程协议的漂亮设计——搞定最复杂的交互
培训对象
培训对象:嵌软工程师、嵌软高级工程师
设备厂商:仪器仪表、通讯设备、白电黑电、消费电子、医疗电子、汽车电子
方案厂商:工业控制、测控监控、传统安防、智慧城市、智能家居、智能制造
军工院所:航空航天、卫星导航、海工船舶、核工业
学员基础:在岗嵌软工程师,均可参加。
课程大纲
程序结构设计——做到模块间松耦合(第一天) |
嵌软的挑战 a)功能实现与具体硬件无关 b)硬件无关与硬件相关代码分离 c)应付硬件变化:硬件接口模块的可替换性、可修改性 d)应付协议变化:协议代码模块的可替换性、可修改性 【讲案例】大中小嵌软架构实例观摩 a)固件分层……案例 b)产品化分层……案例 c)平台化分层……案例A d)平台化分层……案例B e)平台化分层……案例C 【讲技术】大中小嵌软的代码分层 a)洋葱皮 b)UI-SI-DI-PD c)固件五横一纵 d)产品六横一纵 e)平台分层 |
运行时结构设计——做到硬件间精确联动(第一天) |
嵌软的挑战 a)运行逻辑复杂,难设计? b)靠全局变量通信,紧耦合? 【讲案例】从固件到整机嵌软实例观摩 a)设计案例1……无OS。While(1)中顺序执行任务函数 b)设计案例2……无OS。While(1)中执行时间片任务 c)设计案例3……有OS。ISR与Task信号量通信,Task间队列通信 【讲技术】技术对比 a)前后台结构(死循环+中断) ……骨架代码对比 b)时间片轮询(Time-slice Polling) ……骨架代码对比 c)多任务结构(OS-based Multi-task)……骨架代码对比 |
底层模块的漂亮设计——做到可重用、可扩展(第一天) |
嵌软架构师的岗位能力 合格:封装硬件细节、暴露访问接口 优秀:能做到支持新硬件只需局部扩展 牛人:在HAL层提供显示服务/通信服务/存储服务 【讲案例】嵌软HAL模块就该这么设计 a)从led驱动,到闪烁可配置/可循环的HAL API……源代码案例 b)从2.4G无线,到发包调用/收包回调的HAL API……源代码案例 c)从I2C读写,到EEPROM的延迟写HAL API 【讲技术】嵌软HAL设计技巧 a)利用callback……让模块:局部处理可扩展 b)利用配置数组……让模块:整体逻辑可配置 c)利用Union结构……让模块:支持多种数据类型 d)利用函数指针结构体……让模块:接口一致的多个模块可替换 |
四种需求变更的应对——让需求变更不再痛苦(第二天) |
求变更 A类:不同厂商的器件 B类:不同类型的器件 C类:不同网络或协议 D类:不同功能或算法 ……案例 A类应对——drv.c需 局部改变,接口不变 •实例分析 B类应对——drv.c 改变,hal 不变 •实例分析 C类应对——设计支持协议的新增与适配 •实例分析 D类应对——自底向上,逐级优化设计 •实例分析 【精讲全过程】有代码,有每一步修改 一个单片机软件:架构优化+代码重构全过程 a)全新的模块化 b)模块的水平分层 c)模块的跨层封装 d)“状态机+可配置”常用做法 |
模块接口的漂亮设计——搞定Call/Callback/Msg接口(第二天) |
嵌软架构师的岗位能力 合格:Call接口设计 优秀:搞定Call/Callback/Msg接口 牛人:接口支持任务或处理的运行时注册/注销 【讲案例】漂亮接口设计实例观摩 a)经典Callback接口设计 b)基于注册的Callback接口设计 |
远程协议的漂亮设计——搞定最复杂的交互(第二天) |
嵌软架构师的岗位挑战 a)协议设计,对许多架构师是挑战 a)影响大:影响到多个程序/多个团队 b)设计难:不容易设计满意 【讲技术】协议设计思路 How to:接口过程设计 How to:接口技术选择 How to:接口格式定义 【讲案例】牛案例示范协议设计难点 案例一:“交互复杂型”协议设计范例——精髓精讲 案例二:“通用规范型”协议设计范例——精髓精讲 |
程序结构设计——做到模块间松耦合(第一天) 嵌软的挑战 a)功能实现与具体硬件无关 b)硬件无关与硬件相关代码分离 c)应付硬件变化:硬件接口模块的可替换性、可修改性 d)应付协议变化:协议代码模块的可替换性、可修改性 【讲案例】大中小嵌软架构实例观摩 a)固件分层……案例 b)产品化分层……案例 c)平台化分层……案例A d)平台化分层……案例B e)平台化分层……案例C 【讲技术】大中小嵌软的代码分层 a)洋葱皮 b)UI-SI-DI-PD c)固件五横一纵 d)产品六横一纵 e)平台分层 |
运行时结构设计——做到硬件间精确联动(第一天) 嵌软的挑战 a)运行逻辑复杂,难设计? b)靠全局变量通信,紧耦合? 【讲案例】从固件到整机嵌软实例观摩 a)设计案例1……无OS。While(1)中顺序执行任务函数 b)设计案例2……无OS。While(1)中执行时间片任务 c)设计案例3……有OS。ISR与Task信号量通信,Task间队列通信 【讲技术】技术对比 a)前后台结构(死循环+中断) ……骨架代码对比 b)时间片轮询(Time-slice Polling) ……骨架代码对比 c)多任务结构(OS-based Multi-task)……骨架代码对比 |
底层模块的漂亮设计——做到可重用、可扩展(第一天) 嵌软架构师的岗位能力 合格:封装硬件细节、暴露访问接口 优秀:能做到支持新硬件只需局部扩展 牛人:在HAL层提供显示服务/通信服务/存储服务 【讲案例】嵌软HAL模块就该这么设计 a)从led驱动,到闪烁可配置/可循环的HAL API……源代码案例 b)从2.4G无线,到发包调用/收包回调的HAL API……源代码案例 c)从I2C读写,到EEPROM的延迟写HAL API 【讲技术】嵌软HAL设计技巧 a)利用callback……让模块:局部处理可扩展 b)利用配置数组……让模块:整体逻辑可配置 c)利用Union结构……让模块:支持多种数据类型 d)利用函数指针结构体……让模块:接口一致的多个模块可替换 |
四种需求变更的应对——让需求变更不再痛苦(第二天) 求变更 A类:不同厂商的器件 B类:不同类型的器件 C类:不同网络或协议 D类:不同功能或算法 ……案例 A类应对——drv.c需 局部改变,接口不变 •实例分析 B类应对——drv.c 改变,hal 不变 •实例分析 C类应对——设计支持协议的新增与适配 •实例分析 D类应对——自底向上,逐级优化设计 •实例分析 【精讲全过程】有代码,有每一步修改 一个单片机软件:架构优化+代码重构全过程 a)全新的模块化 b)模块的水平分层 c)模块的跨层封装 d)“状态机+可配置”常用做法 |
模块接口的漂亮设计——搞定Call/Callback/Msg接口(第二天) 嵌软架构师的岗位能力 合格:Call接口设计 优秀:搞定Call/Callback/Msg接口 牛人:接口支持任务或处理的运行时注册/注销 【讲案例】漂亮接口设计实例观摩 a)经典Callback接口设计 b)基于注册的Callback接口设计 |
远程协议的漂亮设计——搞定最复杂的交互(第二天) 嵌软架构师的岗位挑战 a)协议设计,对许多架构师是挑战 a)影响大:影响到多个程序/多个团队 b)设计难:不容易设计满意 【讲技术】协议设计思路 How to:接口过程设计 How to:接口技术选择 How to:接口格式定义 【讲案例】牛案例示范协议设计难点 案例一:“交互复杂型”协议设计范例——精髓精讲 案例二:“通用规范型”协议设计范例——精髓精讲 |