void osSleep(tU32 ticks) - 它是如何工作的(微控制器中的定时器)?

时间:2012-11-12 01:44:37

标签: c timer microcontroller gpio

我在C中有一个微控制器的代码。 基于我的示例,我使用函数“void osSleep(tU32 ticks)”来暂停程序一段时间。不幸的是,我不知道它是如何工作的以及它对我的微控制器的作用(什么引脚,状态等设置为什么值)。

我已经找到了setBuzzer()函数,因为我有它的来源:

void setBuzzer(tBool on)
{
  if (TRUE == on)
    IOCLR = BUZZER_PIN;
  else
    IOSET = BUZZER_PIN;
}

因此,与蜂鸣器相关的PIN(BUZZER_PIN = 0x00002000)的GPIO端口设置为1或0。蜂鸣器有一个引脚,所以我可以启用和禁用它(高电压和低电压)。

我想对osSleep()进行类似的分析,但奇怪的是,我在整个代码中找不到它的实现,只是声明:

void osSleep(tU32 ticks);

也许这个功能在某个库中。无论如何,我想知道它在较低级别上是如何工作的(例如,当我调用它时,计时器会发生什么,执行什么指令 - 就像在蜂鸣器示例中一样)。

此外, Embedded Artists 的代码文档中只有一个高级别的简短定义,名为“抢先操作系统v 1.4.0”

1 个答案:

答案 0 :(得分:1)

  

不幸的是,我不知道它是如何工作的以及它对我的微控制器的作用

无法访问来源,无法确定。尝试使用反汇编程序(GNU的binutilsobjdump,例如)来了解实际osSleep的作用。

很有可能,它正在等待一个信号量,它将被定时器标记ISR切换(直接或间接)。但是你的问题很有意思 - 除了“这个函数让一个进程按指定的滴答数进入睡眠状态”之外,文档中没有提到任何内容。但如果没有可用的话,它肯定可以让整个uC进入低功耗模式。