VIP中变量的存储位置已经知道了,那使用DKM动态加载的变量呢?今天来找一找,写个最简单的例子
#include <stdio.h>
#include <taskLib.h>
int gAaa;
int gBbb = 1;
static int sCcc;
static int sDdd = 1;
void test()
{
int lEee;
int lFff = 1;
static int sGgg;
static int sHhh = 1;
TASK_DESC tDesc;
printf("0x%08x is: int gBbb = 1\n", &gBbb);
printf("0x%08x is: static int sDdd = 1\n", &sDdd);
printf("0x%08x is: static int sHhh = 1\n", &sHhh);
printf("0x%08x is: static int sGgg\n", &sGgg);
printf("0x%08x is: static int sCcc\n\n", &sCcc);
printf("0x%08x is: int gAaa\n", &gAaa);
taskInfoGet(0, &tDesc);
printf("0x%08x task stack base\n", tDesc.td_pStackBase);
printf("0x%08x is: int lEee\n", &lEee);
printf("0x%08x is: int lFff = 1\n", &lFff);
printf("0x%08x task stack end\n", tDesc.td_pStackEnd);
}
很容易得到:局部变量存放在任务的栈里。其它的呢?
先用moduleShow()看看加载的这个文件就知道了
VxWorks会为动态加载的每个文件创建一个module,每个module有自己的text、data、bss段。那些有初值的全局变量和静态变量就放在data段里,无初值的静态变量就放在bss段里。
那这个aaa是怎么回事?无初值的全局变量,你知道它在哪里吗?
我是泰山 专注VX 0x10年
一起学习 共同进步