新闻  |   论坛  |   博客  |   在线研讨会
rtems:全局变量的镜像-单任务变量
tongxin | 2009-04-12 22:00:06    阅读:780   发布文章

RTEMS版权所有,转载请注明来源www.rtems.net,作者ray@rtems
%A 9.2.8:全局变量的镜像-单任务变量
%A
%A 在RTEMS 中,变量的镜像是一个比较特殊的概念,他可以被直译为单任务变量。单任务变量和传统概念上的局部变量以及全局变量都不同,通常任务通过将变量用 rtems_task_variable_add加入到本地的局部变量表中使变量变成单任务变量。如果一个变量被初始化成单任务变量,那么该任务对此变量有完全的存储权限,同时,其他任务也可以读取该变量的值。但是,如果该任务改变了变量的值,那么新的值对申明该变量的任务透明,其他的任务看到的任然是以前的值。这是通过将局部变量作为任务的上下文存储实现的,当任务产生迁移的时候,这些变量也需要保存到任务的堆栈中。
%A
%A 单任务变量可以被其他的任务访问,即使其他的任务没有将此变量加入到本地的变量列表中。其他的任务对该变量的修改不会对影响原来的任务。
%A
%A 单任务变量对于函数的可重入性很有帮助。如果一个函数被多个任务调用,虽然每个任务都有自己独立的堆栈和地址空间,但是他们需要共享静态变量和全局变量。如果希望将静态变量变为私有的单任务变量,可以使用rtems_task_variable_add将变量变成单任务变量, rtems_task_variable_add将这些变量在各个任务中制作镜像拷贝。这样就可以将原来的大家共享的全局变量变成各个任务间相互独立局部变量了。
%A
%A 但是使用了单任务变量后,任务间切换的开销就变大了,因此,应该尽可能少的使用单任务变量。比较好的变通方法是在任务中动态分配变量存储这些可能被其他任务破坏的全局变量。
%A
%A 使用单任务变量需要注意的是,为了访问这个变量,每个任务必须将这个变量申明成单任务变量。
%A%A
%A

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
最近文章
寂寞如雪
2009-05-19 19:01:18
夜色花
2009-05-19 18:56:22
没有爱可以重来
2009-05-19 18:54:59
推荐文章
最近访客