基于 库的 层次架构分析
首先要明白 库的意义
该库是实现相同功能的硬件外设的再次抽象封装库,例如: 库可以建立在 等物理外设上,因此该库是在
层继续封装的一层通用底层驱动 ,好处是可以方便的实现应用程序在不同外设上的迁移和移植;再结合 开发环境下的处理器专家,可
以方便的配置你需要的外设基础;另外,随着 功能的不断增强和软件架构的不断扩张,这种软件架构库是必然趋势,作为汽车行业可以参
考 的架构,其在在其他行业也一样,例如:用的最多的 的处理器,也使用该模式提供驱动库,所以,掌握该模式的开发,是大势所
趋;
按照 里面的一个 的实例进行分析, 库的架构
() 首先我们调用处理器专家提供的图形话界面,配置我们的 的配置信息
注意观察,我们使用的是物理外设 ,但是它还可以选择 的物理外设实现该功能,至少在 !! 的处理器上,支持这
两种物理外设实现 驱动;另外,我们看到他的传输类型只有基于 "# 两种配置,所以这里我们至少要使用中断
才可以启用 库的功能;这里做一个补充:
以前的裸机中的中断处理机制:
在 main()函数最开始完成系统时钟初始化后,初始化外设模块时,先配置 NVIC,再使能相应的外设中断
$编写中断服务函数 ISR,在其中处理中断事件,置位全局事件标志通知应用程序做后续处理, 并清除中断标志
基本上就是中断只配置一次,然后就在中断中处理其他的事项;
而现在的 SDK 中的 PAL 库是这样处理的:
外设初始化 Init()函数中,仅使能芯片级中断控制器中对应的中断源,即 NVIC;并没有开启具体的外设的中断通道;
$在外设需要实现特定功能时( 收发数据),才开启外设中断,而且,在你的中断处理完成后(例如 % 个字节全部发送
完成),会再次关闭中断;
这样做的好处:防止意外的中断干扰,浪费 的资源;
另外,当你使用中断时, 留给我们的是中断回调函数接口,上图中我们使用了 的回调函数, 的中断机制中,已经把中断
的识别,清除都做了,就留给我们一个回调接口,处理接收到的数据;但是,如果没有使用 的初始化函数,而是用户自己调用
INT_SYS_InstallHandler()函数来安装中断的话,就需要我们自己处理中断的清除等工作;
() 上面只配置了 的模块,该模块所使用的 需要再 控件中,进行配置,如下图: