• 欢迎访问我的博客,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站
  • 本网站关闭了评论功能,联系请点击→邮箱
  • Ctrl+D 可快捷收藏本站点

ucos-iii实现的全局变量

ucos-iii内核学习笔记 gql 4年前 (2021-04-23) 1463次浏览

通常我们定义全局变量的做法都是在.C文件里面定义全局变量,然后在这个文件对应的头文件里面加 extern 声明,在外部文件调用的时候,包含其头文件,加入全局变量的声明(不加也是可以的,最好加上,包含
.h文件的时候已经把声明加入了)

//test.c
int a;

//test.h
extern  int  a;

//main.c
#include "test.h"
extern int a;
int  main()
{
    pirntf("a = %d\n", a);
}

但是 uC/OS-III 中,文件非常多,这种方法可行,但不现实。因此ucos-iii使用了一种比较巧妙的方式去实现在头文件中定义变量。在 os.h 头文件中定义全局变量,然后在 os.h 文件的开头加上如下代码段

#ifdef OS_GLOBALS
    #define OS_EXT
#else
    #define OS_EXT extern
#endif

并另外新建了一个 os_var.c在里面包含 os.h,且只在这个文件里面定义 OS_GLOBALS 这个宏

#define OS_GLOBALS
#include "os.h"

经过这样处理之后,在编译整个工程的时候,只有 var.c 里面的 os.h 的 OS_EXTI 才会被替换为空,即变量的定义,其它包含 os.h 的文件因为没有定义 OS_GLOBAS 这个宏,则OS_EXTI 会被替换成 extern,即变成了变量的声明。这样就实现了在头文件中定义变量。


如未注明 , 均为原创。转载请注明原文链接:ucos-iii实现的全局变量
喜欢 (0)