首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将特定于平台的代码与用于嵌入式外围驱动程序的通用逻辑代码分离

将特定于平台的代码与用于嵌入式外围驱动程序的通用逻辑代码分离
EN

Stack Overflow用户
提问于 2021-06-26 04:07:27
回答 2查看 83关注 0票数 2

我正试图为我在STM32上使用的一个芯片编写一个外围驱动程序。为了使驱动程序通用于我将来可能使用的所有芯片,我尝试将特定于平台的代码和专用于芯片的代码分开。我想知道我能遵守什么纪律吗?

目前,我正在考虑两种可能性:

  1. 使用弱函数来分离。芯片驱动程序将依赖几个弱函数,用户提供函数来覆盖弱函数。

  1. 使用初始化结构,它包含指向特定于硬件的函数的几个函数指针。驱动程序将使用在初始化过程中提供的这些函数。

但我无法预见什么是利与弊。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-26 15:36:47

要开发跨平台驱动程序/库,您应该将软件体系结构设计的几个原则结合起来。

一个是驱动程序/库中的模块化和层,通常有一个基本层(一对.h和.c文件),它应该满足驱动程序的所有基本和逻辑。secon层稍后是一个特定的平台,它应该包括与微控制器交互的基本功能,例如de特定的SPI接口功能。如果您想为所有的stm32系列创建一个驱动程序或库,您可以将其压缩到一个层中,因为所有stm32家族都有HAL接口函数的标准名称。

关于第2点,这是创建库的标准方法。该结构允许您在c ++中创建不同的“伪对象/处理程序”,例如,当您需要创建几个要与之接口的不同实例/处理程序时,这是非常有用的。例如,如果您为电机驱动器开发了一个库,并且正在开发一个rc-car,那么您需要控制4个不同的驱动程序,并且需要4个处理程序。

票数 2
EN

Stack Overflow用户

发布于 2021-06-26 04:48:31

在你列出的方法中,我认为2.是比较流行的选择。2的设置非常简单,不依赖于任何编译器特定的弱指针指令。通过设置正确的指针,在几个稍微不同的平台上重用代码也很容易。对2.vs1有轻微的性能影响,因为您需要对每个函数调用执行额外的指针取消引用。这通常并不重要,但在某些情况下可能会发生。

另一种常见的方法是在每个平台上都有一个具有单独实现文件的头文件。要为平台编译,只需选择正确的文件/文件即可。这类似于弱函数方法,但没有实际的弱指针。例如,您的项目设置可以是:

代码语言:javascript
复制
main.h
main.c
platform.h
platform.stm32.c
platform.tms570.c
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68139143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档