芯片外设驱动
如软件架构图所示,开发框架提供了两套芯片外设驱动接口,一个是HAL接口,另一个是RT-Thread设备驱动接口。
HAL接口不使用操作系统服务,提供了所有芯片外设支持的功能,需要用户实现中断服务程序,不同芯片系列的HAL接口兼容。大部分HAL接口都提供了同步(轮询)与异步两套接口。
RT-Thread设备驱动接口提供了更高层的封装,基于HAL接口实现,便于不同厂家芯片平台间的移植,用户无需实现中断服务程序,接口使用上相对HAL更简单,即使同步接口也是使用线程挂起的方式,避免占用CPU资源。有的外设驱动会集成缓冲区管理功能,如串口设备,当使用DMA模式时,数据会先保存到内部的buffer中,调用rt_device_read
接口则是从内部buffer中获取数据,避免用户自己管理缓存buffer。但由于抽象接口通用性的限制,有些硬件功能在RT-Thread设备驱动层并没有实现。
HAL接口相比RT-Thread设备驱动接口更贴近底层,可以更灵活的使用硬件,减少了中间环节,函数执行效率更高,但使用上也更加复杂。通常来说,如果RT-Thread设备驱动提供的功能可以满足应用开发的需要,建议使用设备驱动,只有在设备驱动无法实现或者性能不足时才选择HAL接口。设备驱动使用指南参考RT-Thread 设备驱动,HAL接口使用指南参考硬件抽象层