对于一篇论文,我正在寻找一个使用volatile变量的真实 C函数.这本身并不难找,但我正在寻找一个函数,其中volatile函数的值必须在函数执行过程中改变,以便达到函数的特定分支.像这样的东西:
typedef struct {
unsigned :6;
unsigned FLAG1 :1;
unsigned FLAG2 :1;
} __attribute__ ((packed)) REGISTER;
volatile REGISTER * io_ = 0x1234;
int write_to_io()
{
while (io_->FLAG1) {};
//io_->FLAG1 is now 0
io_->FLAG2 = 1;
sleep(10);
if (io->FLAG1)
return 1; //io->FLAG1 has changed from 0 to 1
else
return 0; //io->FLAG1 has not changed
}
Run Code Online (Sandbox Code Playgroud)
如果在执行函数期间结构的不同位改变就足够了,但我的主要标准是,对于要到达的某个分支,易失性变量的值在执行函数期间改变.
我会非常感谢任何现实生活中的例子.我无法在网上找到很多使用volatile的例子.
规范(和可移植)示例处理异步信号.(您可以使用Ctrl-C将SIGINT传递给您的程序).
#include <signal.h>
#include <stdio.h>
volatile sig_atomic_t quit;
void signal_handler(int sig)
{
signal(sig, signal_handler);
quit = 1;
}
int main(void)
{
signal(SIGINT, signal_handler);
puts("Hit return to poll quit flag");
while (!quit) getchar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)