volatile int key_edge;
void* key_edge_ptr = (void*) &key_edge;
volatile int* key_edge_ptr = (volatile int*) key_isr_context;
(1) volatile int key_edge;
a) 定义整型参数key_edge。
b) Volatile是type-modifier,类型修饰符,限定一个对象可被外部进程(操作系统、硬件或并发进程等)改变,volatile与变量连用,可以让变量被不同的线程访问和修改。volatile就是告诉编译器,别对这个变量做任何优化,因为它随时都会改变。
c) 不会被编译器优化,随时都可以访问,可以改变的整型key_edge。
(2) void* key_edge_ptr = (void*) &key_edge;
a) void * 是“无类型指针”,void * 可以指向任何类型的数据。
b) (void*)表示强制转换为空指针类型,括号表示优先级。
c) 取key_edge的地址,强制转换为void*类型的指针。
d) 定义了一个空指针类型Key_edge_ptr。
e) 将强制转换的空指针类型(&key_edge)赋值给空指针类型的key_edge_ptr。
f) gcc这种比较严谨的编译器要求必须类型匹配才能赋值:
i. 类型 = 类型, 否则警告
ii. 指针 = 指针, 地址映射
(3) volatile int* key_edge_ptr = (volatile int*) key_isr_context;
a) 强制转换空类型指针key_isr_context为异变的整型指针
b) 定义了易变的整型指针key_edge_ptr
c) 将强制转换的易变整型指针类型(key_isr_context)赋值给易变整型指针类型key_edge_ptr