【问题标题】:void osSleep(tU32 ticks) - how it works (timer in micro-controller)?void osSleep(tU32 ticks) - 它是如何工作的(微控制器中的计时器)?
【发布时间】:2012-11-12 01:44:36
【问题描述】:

我有一个用 C 语言编写的微控制器代码。 根据我的例子,我使用函数“void osSleep(tU32 ticks)”来停止程序一段时间。不幸的是,我不知道它是如何工作的以及它对我的微控制器有什么作用(哪些引脚、状态等设置为哪些值)。

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

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

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

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

void osSleep(tU32 ticks);

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

此外,Embedded Artists 的文档中只有一个名为 “Pre-emptive Operating System v 1.4.0” 的代码的高级简短定义。

【问题讨论】:

    标签: c timer microcontroller gpio


    【解决方案1】:

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

    无法访问源代码,就无法确定。尝试使用反汇编程序(例如 GNU 的 binutils 具有 objdump)来了解实际的 osSleep 的作用。

    很可能,它正在等待一个信号量,该信号量将被计时器滴答 ISR 切换(直接或间接)。不过,您的问题很有趣-文档只提到“此函数使进程在指定的滴答数内进入睡眠状态”。但如果没有可用的运行,它肯定会使整个 uC 进入低功耗模式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-17
      • 2010-10-12
      • 2020-07-20
      • 2013-03-21
      • 2010-12-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多