volatile 指针指来指去干嘛呀->nios2 PIO中断ISR
2011-04-04 11:49
323 查看
![](http://images.cnblogs.com/cnblogs_com/crazybingo/201104/201104041218415359.png)
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
相关文章推荐
- volatile为什么要修饰中断里的变量
- WinCE--中断处理程序ISR 详…
- 中断服务子程序 ISR
- wince -- 外部中断调用可安装ISR错误(data abort)
- TQ2440之定时器中断0——volatile关键字的重要作用
- 嵌入式系统中断服务子程序(ISR)
- 函数指针数组在ARM异常中断处理中的应用
- 一个中断服务子程序ISR
- 关于中断出发时PC指针回零解释
- volatile为什么要修饰中断里的变量
- 实验:PIO外部中断
- volatile unsigned char; volatile有利于全局变量的实时更新,尤其含有中断中改变的量
- keil里中断服务函数设置标志位时加volatile
- WinCE中断处理程序ISR 详解
- nios pio interrupt 的使能
- 嵌入式系统中断服务子程序(ISR)
- (转)eCos驱动分析 之 ISR是如何与硬件中断联系起来的?
- NIOS2随笔——中断控制
- C和指针之const、#define、volatile
- NIOS按键中断程序