0

我是使用 Contiki OS 的新手,我有一个基本问题。

我可以在 Contiki 流程中安全地使用低级别 ISR 吗?

我这样做是为了快速测试,它运行良好。但是,我担心我可能会破坏操作系统中的某些内容,这些内容稍后会在不同的条件下失败。

在基于事件计时器定期触发的进程的上下文中,我正在调用一个函数,该函数将 LED 设置为闪烁。LED 闪烁功能本身是由 Atmel SAMD21 MCU 上的硬件计时器触发的 ISR 的回调。

有人可以为我澄清在这种特殊情况下我应该关注哪些限制吗?

谢谢你。

4

1 回答 1

0

基本上你可以,但你必须了解代码的每个部分运行的上下文。

一个进程有一个函数的上下文,Contiki 的调度程序运行在main主体中,定时器将进程唤醒入队在这个调度程序中,实际上,将 Contiki 进程视为相互调用的函数,注意这些PROCESS_*宏实际上确实调用了 return on功能。

main()当您处于中断处理程序或回调时,您处于不同的上下文中,如果您与进程共享数据,您可能会遇到竞争条件,就像在中断和不同上下文的裸机固件中一样。

我强烈建议您阅读“protothreads”,除了它们听起来像线程之外,它们不是,它们是在主体中运行的函数。(我相信这个链接会启发你http://dunkels.com/adam/pt/

关于你描述的问题,我看不出有什么问题。

Contiki 本身有一些硬件抽象模块,因此您不必直接从应用程序代码处理平台。我使用 Contiki 编写了大型固件,发现这些抽象不是很有用,因为它的应用程序有限。在这种情况下,我所做的是编写我自己的底层来接触平台,所以在应用程序中一切仍然是平台独立的,但是,从操作系统的角度来看,我有应用程序代码调用平台寄存器。

于 2016-10-28T16:43:51.773 回答