啥时候要是写代码的时候像玩游戏一样开心就好了,我觉得那一天应该不会遥远,要做一个快乐的小二逼 哈哈哈;
懂得越多责任就越重大,喜欢责任重大,那就要让自己一天天的变强大。
如是说就得每天早上给自己一杯自己造的“鸡血”喝,热乎乎的比别人给的容易喝下去;不是吗?
文章目录
[0x100] 内容概述
- 内存读写 checkpoint
- IO内存访问与操作
- IO端口访问与操作
[0x200] 访问硬件的不同方式
[0x210] 内存读写同步点–内存屏障
[0x211] 创建内存屏障
概念定义 :CPU对内存随机访问的一个同步点,必须执行该点之前的所有I/O 操作,才可以继续执行之后的指令;
#include <linux/compiler-gcc.h >
/*gcc编译器中的内存屏障的调用*/
#define barrier() __asm__ __volatile__("": : :"memory")
#include <asm-generic/barrier.h>
#define mb() asm volatile ("": : :"memory")
#define rmb() mb()
#define wmb() asm volatile ("": : :"memory")
/*多处理器的的内存屏障,按照情况编译,其实都是一个*/
#ifdef CONFIG_SMP
#define smp_mb() mb()
#define smp_rmb() rmb()
#define smp_wmb() wmb()
#else
#define smp_mb() barrier()
#define smp_rmb() barrier()
#define smp_wmb() barrier()
#endif
#include <linux/compiler.h >
/*编译器的宏调用*/
#define barrier() __memory_barrier()
[0x212] 驱动中的实例
priv->tx_curr_desc++;
if (priv->tx_curr_desc == priv->tx_ring_size) {
priv->tx_curr_desc = 0;
len_stat |= DMADESC_WRAP_MASK;
}
priv->tx_desc_co