我在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”。
答案 0 :(得分:1)
不幸的是,我不知道它是如何工作的以及它对我的微控制器的作用
无法访问来源,无法确定。尝试使用反汇编程序(GNU的binutils
有objdump
,例如)来了解实际osSleep
的作用。
很有可能,它正在等待一个信号量,它将被定时器标记ISR切换(直接或间接)。但是你的问题很有意思 - 除了“这个函数让一个进程按指定的滴答数进入睡眠状态”之外,文档中没有提到任何内容。但如果没有可用的话,它肯定可以让整个uC进入低功耗模式。