gpt4 book ai didi

c - C中 volatile 非静态局部变量的原因

转载 作者:行者123 更新时间:2023-12-04 09:28:58 24 4
gpt4 key购买 nike

引用以下代码:

void calledFunction(volatile uint8_t **inPtr);
volatile uint8_t buffer[] = {0,0,0,0,0,0};

volatile uint8_t *headPtr = buffer;

void foo(void)
{
volatile uint8_t *tmpPtr = NULL;

tmpPtr = headPtr;

//This function modifies tmpPtr
calledFunction(&tmpPtr);

headPtr = tmpPtr;
return;
}
这是我试图使中断安全的代码的简化版本,我不确定为什么这个本地被定义为 volatile .我知道没有性能原因(即保证此函数至少为 O(n)),因为此函数应尽可能高效地运行。
这个函数可以在主执行和内部中断中调用,但是因为 tmpPtr是一个非静态局部变量,它不应该被 foo() 的任何其他实例修改。 .
我看不到任何需要 volatile 的访问模式在这种情况下的关键字。
简而言之, volatile 的目的是什么? tmpPtr 的关键字在功能 foo() ?
编辑:忘记了 &在函数参数中
EDIT2:我继承了这段代码,需要修改它。
我的主要问题是 volatile关键字在这种情况下有任何特殊的有效理由。
EDIT3:添加了 calledFunction() 的原型(prototype)
EDIT4:添加 重要 原始代码中的说明 headPtrbuffer两者都有 volatile

最佳答案

原因tmpPtrvolatile是由于 tmpPtr需要引用 volatile uint8_t , 不是因为 tmpPtr本身是volatile (不是)。
正如@Eugene Sh. 最初指出的那样,这个问题是由于在定义 volatile 时对语法的误解而出现的。指针和变量。 This question对指向 volatile 的指针的语法有很好的解释对比 volatile指针。

关于c - C中 volatile 非静态局部变量的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62916298/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com