总结

137 阅读3分钟

一、如何在架构上实现高内聚低耦合

内聚和耦合的定义:

内聚是指模块内部功能之间相互联系的紧密程度,也是代码功能的集中程度。下图示意了低内聚和高内聚的两种情况: 耦合是指模块之间的相互依赖性。模块间联系越多,耦合性越强,独立性越差。

在项目中利用三相桥控制BLDC电机,三相桥的输出状态包括正常(输出PWM)、断路(高阻态)和短地。具体要求是:

无故障时,BSW可以按ASW的请求,控制三相输出状态,将状态经API反馈给ASW。 检测到三相短路、预驱芯片故障、进入安全状态、下电前反悔等异常情况,BSW应控制三项桥的输出状态为短地或断路,把三相状态经API反馈给ASW。

定义了全局变量pwr_state。箭头方向表示数值的传递方向。ASW API、组件DRV3245、Diagnostic&Protection、SafetyMode都可以读取pwr_state的值用来处理内部逻辑。检测异常状态后也可以改变它的值,

Motor Control组件再读取最终pwr_state的值控制三相桥输出状态。

image.png

很明显,这样设计的问题是组件间的耦合性强,内聚性弱。几个组件都会对pwr_state赋值,需要设计复杂的时序逻辑来保证不会出现冲突,以后的维护和复用要考虑对所有涉及组件的影响,难度较大。

Diagnostic&Protection组件执行三相短路和其他传感器故障的诊断,被放入一个组件中仅仅因为都叫故障诊断,彼此之间并没有紧密的联系,或者说没有很好的“内聚”。而在AUOTOSAR BSW架构中,

也没有专门执行故障诊断的组件。

AUTOSAR架构下的高内聚低耦合:

在AUTOSAR架构下实现高内聚低耦合原则,三相桥的输出控制功能可以这样设计:

image.png

pwr_state 不再是全局变量,而仅限定在IoHwAb内部。其他组件只向IoHwAb传递是否有故障,由IoHwAb统一管理三相桥的输出和反馈状态。Motor Control组件不再负责三相输出控制,只专注于执行电机控制策略,

通过接口向IoHwAb传递要后者输出的占空比值。去除故障诊断组件,将三相输出的故障诊断合并到IoHwAb组件内。相比于传感器故障诊断,三相输出故障诊断和三相输出控制的关联性更强,提高了内聚性,也更

符合AUTOSAR架构的要求。

高内聚和低耦合有一定的相关性。低耦合的软件,组件的内聚程度一般较高。而组件内聚程度不高的软件,经常也是高耦合的(功能的复杂程度固定时,如果不把依赖关系强的子功能放在组件内,只能在组件外建立更多的联系)

因此,高内聚低耦合的目标,是把关联性强、依赖程度高的部分限制在特定模块内,降低模块之间依赖关系的复杂度。

时钟分频

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

本层产生的丢失精度问题就在本层解决