【摘要】:在nesC语言中区分同步和异步代码。它们必须用关键字async在接口和模块中进行声明。基于此,异步的命令或事件,或者他们所指向的函数,只能调用或通知异步的命令和事件。例4.1:Send接口是同步的,它的命令和事件没有用关键字async声明例4.2:Leds接口是异步的所有中断处理程序都是异步的。在中断处理程序中,软件从数据寄存器中读取字节并把它置于缓冲器中。因此在最后一个字节的中断处理程序中,组件发布一个任务通知接收数据分组。
在nesC语言中区分同步(sync)和异步(async)代码。中断处理程序中的命令和事件具有更高的优先级,因此相对于任务来说是异步的。它们必须用关键字async在接口和模块中进行声明。
命令和事件可以在中断处理程序中抢先运行,但这必须要求同时在声明命令和事件的接口、执行命令和事件的模块中用关键字async声明。基于此,异步的命令或事件,或者他们所指向的函数,只能调用或通知异步的命令和事件(如果打破了该规则,nesC会有提示)。此规则使我们可以清楚地看到,在模块或接口中哪个代码是同步的,哪个是异步的。
例4.1:Send接口是同步的,它的命令和事件没有用关键字async声明
例4.2:Leds接口是异步的(www.xing528.com)
所有中断处理程序都是异步的。因此,在调用时它们不能包含任何同步函数。在中断处理程序中执行一个同步函数的唯一方法是发布(post)一个任务。在异步代码中发布任务是允许的,但是发布的任务应在同步代码中执行。
例如,考虑UART之上的数据分组层。当UART接收到一个字节,它发出一个中断信号。在中断处理程序中,软件从数据寄存器中读取字节并把它置于缓冲器中。当接收到数据分组的最后一个字节时,软件需要通知接收数据分组。但Receive接口中的receive事件是同步的。因此在最后一个字节的中断处理程序中,组件发布一个任务通知接收数据分组。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。