2

我有一个用 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”的代码的高级简短定义。

4

1 回答 1

1

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

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

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

于 2012-11-12T02:00:26.557 回答