作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在嵌入式 C 中,有一些固定/通用算法是很自然的,但不止一种可能的实现。这是由于几个产品展示,有时是选项,有时只是产品路线图策略的一部分,例如可选 RAM、不同 IP 设置的 MCU、升级频率等。
在我的大多数项目中,我通过将核心内容、算法和逻辑架构与实现外部状态评估、计时、内存存储等的实际功能解耦来处理这个问题。
自然地,我使用 C 函数指针机制,并为这些指针使用一组有意义的名称。例如。
unsigned char (*ucEvalTemperature)(int *);
unsigned char ucReadI2C_TMP75(int *);
unsigned char ucReadCh2_ADC(unsigned char *);
最佳答案
我通常更喜欢分层架构。与硬件的通信是通过“驱动程序”实现的。算法层调用由驱动程序实现的函数 (readTemp)。关键是需要定义一个接口(interface),并且所有驱动程序实现都必须遵守该接口(interface)。
较高层应该对如何读取温度一无所知(使用 TMP75 或 ADC 无关紧要)。驱动程序架构的缺点是您通常无法在运行时切换驱动程序。对于大多数嵌入式项目,这不是问题。如果您想这样做,请定义指向驱动程序公开的函数(遵循公共(public)接口(interface))而不是实现函数的函数指针。
关于c - 不使用 JMP 或 LCALL 调用任意函数的最佳策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/995315/
在嵌入式 C 中,有一些固定/通用算法是很自然的,但不止一种可能的实现。这是由于几个产品展示,有时是选项,有时只是产品路线图策略的一部分,例如可选 RAM、不同 IP 设置的 MCU、升级频率等。 在
我是一名优秀的程序员,十分优秀!