EDN首页   博客首页

日志档案

发表于 2006-10-30 23:59:33

35

标签: 全局变量的保护  

全局变量的保护

全局变量的保护
各个任务之间通过全局变量交换信息时,如果其
中某一任务在引用同一个全局变量期间,该变量在另
一任务中被重新赋值,那么就可能发生一些意想不到
的事情。一般我们采用这样的方法解决可能的问题。
首先在任务中定义若干个局部变量;之后将相应的全
局变量赋值这些局部变量。任务随后引用的是这些局
部变量,而不是全局变量,这样就避免了问题的发生。
具体程序设计流程如下所示:
Void Task{
int Local_ var;
UGL_ FOREVER{
SemTake(semStart,WAIT_FOREVER);
Local_var= Globle_var:
Subcall_1(Local_var);
Subcall_2(Local_var);

......
}/* UGL_FOREV ER */

对于数组等全局变量采用固定数组,会有利于防
止数组超界。

系统分类: 嵌入式   |   用户分类: vxowrks任务调度   |   来源: 无分类   |   【推荐给朋友】   |   【添加到收藏夹】

    阅读(1392)    回复(5)  

投一票您将和博主都有获奖机会!

  • yanshen

    2006-12-7 12:19:42

    是的。不过最好还是在编程中注意对全局变量的赋值。

  • yuefeng206

    2006-12-7 9:35:34

    请问将全局变量赋给局部变量后,这时应该释放信号量吧?即:

    对于全局变量的访问:

    semTake(semStart, WAIT_FOREVER);

    Local_var = Globle_var;

    semGive(semStart);

    ....

    对于全局变量的更新:

    ......

    semTake(semStart, WAIT_FOREVER);

    Globle_var = Local_var;

    semGive(semStart);

    是这样吗,版主?

  • leacom

    2006-12-28 10:04:29

    我在编程时遇到这样一个关于临界资源访问的问题不知道在如何解决才好,版主有何建议?

    问题是这样的:

    一个全局的临界资源,程序中有n个任务要访问它,其中只有1个任务写资源,其他n-1个任务读这个资源。通常情况下,只要在每个任务中对资源读写操作使用互斥信号量保护就可以了,但这样会造成n-1个读资源的任务之间由于要获取信号量产生阻塞现象,而我不希望读任务之间存在这种竞争现象,仅希望所有的读操作和写操作之间存在竞争现象。

    不知道如何实现??(

                                    

  • c剑客

    2007-4-29 13:29:39

    请问全局变量定义固定地址 与不定义地址,在程序中有什么不同,有什么影响,

  • chenwl

    2008-9-22 18:29:07

    必须要使用信号量保护