【问题标题】:Passing pointer address to global variable将指针地址传递给全局变量
【发布时间】:2013-07-11 22:00:09
【问题描述】:

我有一个指针,它被传递给这样的函数:

unsigned char globalvar;

int functionexp(unsigned char *buff){
    globalvar = buff;
    //start interrupt
    //wait for end of interrupt
    //pass original pointer back with updated results
}

void __attribute__((interrupt, no_auto_psv)) _DMA2Interrupt(void) {
    globalvar = somedata;
}

我有一个中断,它收集我需要传递给所述指针的数据。我想要做的是创建一个全局虚拟变量并将原始指针(bufF)地址复制到这个全局变量中,所以当我将数据写入可以在中断中访问的全局变量时(因为我无法传递原始指向中断的指针)它还会更新原始指针中的值。

我的示例显示了我想要做的基础,但没有指针语法。有人可以告诉我如何做到这一点,拜托!

【问题讨论】:

  • 是指针和int 在你的平台上的大小相同(也许我的问题很愚蠢,但不得不问)。
  • 是的,对不起。这个例子写得很快,只是为了展示我想要做什么。
  • @ritchie888 globalvar = buff; 应该如何工作?为什么不是指针。
  • 不是。正如我所说,这不是真正的代码,只是为了理解我想要实现的目标。我在问如何为我的原始指针创建一个全局变量“克隆”,因此通过更改全局变量我也更改了原始指针。

标签: c variables pointers global


【解决方案1】:

您的问题并不完全清楚。 我对我认为你正在尝试做的事情的第一个解释是这样的:

unsigned char **buffptr;

int functionexp(unsigned char *buff){
    buffptr = &buff;
    //start interrupt
    //wait for end of interrupt
    //pass original pointer back with updated results
    // after this point, the value of buffptr is completely useless,
    // since buff doesn't exist any more!
}

void __attribute__((interrupt, no_auto_psv)) _DMA2Interrupt(void) {
    *buffptr = somedata;  
    // this changes the 'buff' variable in functionexp
}

另一方面,您可以简单地说:

unsigned char *globalbuff;

int functionexp(unsigned char *buff){
    globalbuff = buff;
    //start interrupt
    //wait for end of interrupt
    //pass original pointer back with updated results
}

void __attribute__((interrupt, no_auto_psv)) _DMA2Interrupt(void) {
    globalbuff[0] = somedata;
    // this changes data inside the buffer pointed to by the 'buff' 
    // variable in functionexp
}

【讨论】:

  • 非常感谢。我都试过了,第二个例子是有效的。没想到会这么简单。再次感谢。
  • 第一个例子是错误的。您正在将数据分配给指针。但也许这就是 OP 想要的。
猜你喜欢
  • 2020-08-08
  • 1970-01-01
  • 2014-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-20
  • 2015-04-17
  • 2020-01-09
相关资源
最近更新 更多