轻松更改嵌入式软件中的外设计时器

时间:2018-07-22 22:05:48

标签: c design-patterns embedded

我正在为pic16f芯片开发嵌入式软件项目。该图片只有三个计时器。

现在我有一个使用timer0和timer1的驱动程序(我们称之为驱动程序A)。现在,我想向我的程序中添加功能(驱动程序b),但这需要使用timer1。但是timer1已经用于驱动程序A。

我可以重写驱动程序A,以便它使用timer0和timer2,以便驱动程序b可以使用timer1。

但是也许在一个即将到来的项目中,我想使用我的驱动程序A,但是要使用计时器1和2,因此timer0可以用于另一个驱动程序c,并且必须再次重写我的驱动程序。 有了三个计时器,可能的组合就不多了,但是即使有了这个基本的CPU,我也会有许多不同版本的工作驱动程序A,这使得管理它们并修复代码中的错误变得不切实际。 (想象一下,该驱动程序用于具有更多计时器和更多可能的编写驱动程序A的方法的MCU)

您如何解决此问题?如何编写没有硬编码计时器的驱动程序,并在初始化时分配合适的计时器?我认为在c ++中,每个计时器都是从计时器超类继承的对象,您可以将其作为对象传递给driverA的构造函数,但我在c中工作,因此无法使用对象。

1 个答案:

答案 0 :(得分:1)

您所提出的问题可能没有适合您的经验水平的答案。 Microchip PIC16F控制器系列的资源非常有限,因此面向对象的编程技术的价值有限。

这并不是说模块化编程,有限的范围以及您已经知道的简洁的编码实践不是很大的价值,而是它们。

如果所需的等效于PIC16F的通用定时器类,则必须使用标准C编译器结构为您的应用程序编写它。 PIC16F目标的可用代码和RAM空间将使这成为一个挑战。

我在PIC16F系列中只使用三个时间的控制器(通常称为TIMER0,TIMER1和TIMER2)都是非常不同的硬件实现。这些计时器中的每个计时器都经过了优化,以支持片上功能,例如捕获输入边沿事件或PWM生成或SPI时序等。

使用这些类型的控制器,开发人员需要将应用程序制作为目标控制器的可用资源。如果您的技能与这些资源受限的控制器不匹配,则应考虑使用ARM,MIPS或RISC-V类的控制器。