我正试图为我在STM32上使用的一个芯片编写一个外围驱动程序。为了使驱动程序通用于我将来可能使用的所有芯片,我尝试将特定于平台的代码和专用于芯片的代码分开。我想知道我能遵守什么纪律吗?
目前,我正在考虑两种可能性:
但我无法预见什么是利与弊。
发布于 2021-06-26 15:36:47
要开发跨平台驱动程序/库,您应该将软件体系结构设计的几个原则结合起来。
一个是驱动程序/库中的模块化和层,通常有一个基本层(一对.h和.c文件),它应该满足驱动程序的所有基本和逻辑。secon层稍后是一个特定的平台,它应该包括与微控制器交互的基本功能,例如de特定的SPI接口功能。如果您想为所有的stm32系列创建一个驱动程序或库,您可以将其压缩到一个层中,因为所有stm32家族都有HAL接口函数的标准名称。
关于第2点,这是创建库的标准方法。该结构允许您在c ++中创建不同的“伪对象/处理程序”,例如,当您需要创建几个要与之接口的不同实例/处理程序时,这是非常有用的。例如,如果您为电机驱动器开发了一个库,并且正在开发一个rc-car,那么您需要控制4个不同的驱动程序,并且需要4个处理程序。
发布于 2021-06-26 04:48:31
在你列出的方法中,我认为2.是比较流行的选择。2的设置非常简单,不依赖于任何编译器特定的弱指针指令。通过设置正确的指针,在几个稍微不同的平台上重用代码也很容易。对2.vs1有轻微的性能影响,因为您需要对每个函数调用执行额外的指针取消引用。这通常并不重要,但在某些情况下可能会发生。
另一种常见的方法是在每个平台上都有一个具有单独实现文件的头文件。要为平台编译,只需选择正确的文件/文件即可。这类似于弱函数方法,但没有实际的弱指针。例如,您的项目设置可以是:
main.h
main.c
platform.h
platform.stm32.c
platform.tms570.chttps://stackoverflow.com/questions/68139143
复制相似问题