C 有人能告诉我如何实现差分定时器的概念吗

C 有人能告诉我如何实现差分定时器的概念吗,c,timer,C,Timer,任何人都可以让我知道如何实现差分定时器的概念 我在一个移动平台上工作,它只提供或支持一个硬件定时器。使用它,我必须维护应用程序请求的不同计时器 有谁能建议一种使用一个硬件计时器实现此软件计时器的最佳方法吗?如果我了解您想要实现的目标,您基本上只有一个计时器,并且希望能够模拟使用多个计时器?那真的很容易 对于每个“计时器”,从实际计时器中获取当前时间。这将作为计时器的基准时间。当您想要获取经过的时间时,请获取当前时间(从实际计时器中),并找出当前时间与基准时间之间的差异。就这么简单。如果我理解你想

任何人都可以让我知道如何实现差分定时器的概念

我在一个移动平台上工作,它只提供或支持一个硬件定时器。使用它,我必须维护应用程序请求的不同计时器


有谁能建议一种使用一个硬件计时器实现此软件计时器的最佳方法吗?如果我了解您想要实现的目标,您基本上只有一个计时器,并且希望能够模拟使用多个计时器?那真的很容易


对于每个“计时器”,从实际计时器中获取当前时间。这将作为计时器的基准时间。当您想要获取经过的时间时,请获取当前时间(从实际计时器中),并找出当前时间与基准时间之间的差异。就这么简单。

如果我理解你想要实现的目标,你基本上只有一个计时器,你想模拟拥有多个计时器吗?那真的很容易


对于每个“计时器”,从实际计时器中获取当前时间。这将作为计时器的基准时间。当您想要获取经过的时间时,请获取当前时间(从实际计时器中),并找出当前时间与基准时间之间的差异。就这么简单。

我是否正确地理解了您的问题:“我只有一个硬件计时器,但我的应用程序需要几个计时器,一个慢,一个快,还有一些其他的”

然后你可以这样做:

typedef void (*timer_callback_fn)(void *);

// private
struct registered_timer {
  timer_callback_fn callback;
  void *data;
  unsigned long ticks; // hardware ticks between calls to this timer
};

void timer_register(timer_callback_fn cb, unsigned long ticks) {
  ...
}

static void interrupt on_hardware_timer(void) {
  static unsigned long ticks = 0;

  ... for each registered timer ...
  if (ticks % timer->ticks == 0) {
    timer->callback(timer->data);
  }
}

当然,您必须小心,所有软件计时器必须能够在硬件计时器的一个刻度内处理。

我是否正确理解您的问题,即“我只有一个硬件计时器,但我的应用程序需要几个计时器,一个慢,一个快,还有一些其他”

然后你可以这样做:

typedef void (*timer_callback_fn)(void *);

// private
struct registered_timer {
  timer_callback_fn callback;
  void *data;
  unsigned long ticks; // hardware ticks between calls to this timer
};

void timer_register(timer_callback_fn cb, unsigned long ticks) {
  ...
}

static void interrupt on_hardware_timer(void) {
  static unsigned long ticks = 0;

  ... for each registered timer ...
  if (ticks % timer->ticks == 0) {
    timer->callback(timer->data);
  }
}

当然,您必须小心,所有软件计时器必须能够在硬件计时器的一个刻度内处理。

如果我正确理解您的问题:

保留一个“虚拟”计时器的排序列表,其中一个计时器的刷新时间最少。然后将“真实”计时器设置为该计时器的时间。当实际计时器过期时,处理第一个虚拟计时器,将其从列表中删除,并将实际计时器设置为与(新的)第一个虚拟计时器相同的时间

如果您有大量的虚拟定时器,您可能需要考虑另一个数据结构而不是简单排序的列表。


但我不确定你问的是什么。

如果我正确理解了你的问题:

保留一个“虚拟”计时器的排序列表,其中一个计时器的刷新时间最少。然后将“真实”计时器设置为该计时器的时间。当实际计时器过期时,处理第一个虚拟计时器,将其从列表中删除,并将实际计时器设置为与(新的)第一个虚拟计时器相同的时间

如果您有大量的虚拟定时器,您可能需要考虑另一个数据结构而不是简单排序的列表。


但我不确定你问的是什么。

差分计时器?你到底是什么意思?计时器是什么意思?差分计时器?你到底是什么意思?计时器是什么意思?