在linux/include/asm-arm/arch-s3c2410/hardware.h中
下面那个
#ifndef __ASSEMBLY__
#else
#endif
中的__REG定义想了半天没想明白,大家帮我解释下好吗? 谢谢
还有就是#ifndef __ASSEMBLY__中__ASSEMBLY__什么时候才会定义了的?

/*
* S3C2410 internal I/O mappings
*
* We have the following mapping:
*                phys                virt
*                48000000        e8000000
*/

#define VIO_BASE                0xe8000000        /* virtual start of IO space */
#define PIO_START                0x48000000        /* physical start of IO space */

#define io_p2v(x) ((x) | 0xa0000000)
#define io_v2p(x) ((x) & ~0xa0000000)

#ifndef __ASSEMBLY__
#include <asm/types.h>

/*
* This __REG() version gives the same results as the one above, except
* that we are fooling gcc some how so it generates far better and smaller
* assembly code for access to contigous registers. It's a shame that gcc
* doesn't guess this by itself
*/
typedef struct { volatile u32 offset[4096]; } __regbase;
#define __REGP(x)        ((__regbase *)((x)&~4095))->offset[((x)&4095)>>2]
#define __REG(x)        __REGP(io_p2v(x))

/* Let's kick gcc's ass again... */
# define __REG2(x,y)        \
        ( __builtin_constant_p(y) ? (__REG((x) + (y))) \
                                  : (*(volatile u32 *)((u32)&__REG(x) + (y))) )

#define __PREG(x)        (io_v2p((u32)&(x)))

#else        /* __ASSEMBLY__ */

# define __REG(x)        io_p2v(x)
# define __PREG(x)        io_v2p(x)

#endif        /* __ASSEMBLY__ */

关于寄存器的定义__REG相关推荐

  1. 计算机中寄存器的定义,寄存器电路

    在数字电路系统工作过程中,把正在处理的二进制数据或代码暂时存储起来的操作叫做寄存,寄存器电路就是实现寄存功能的电路,是数字逻辑电路的基础模块.[1] 中文名 寄存器电路 外文名 register ci ...

  2. 寄存器地址映射+寄存器各位定义+中断号定义

    如何实现: 一.寄存器地址映射 二.寄存器各位定义 三.中断号定义 关于一,怎么说呢,可以参考一下<STM32F4开发指南--库函数版本>里边的4.6小节"MDK中寄存器地址名称 ...

  3. DM9000 寄存器的定义

    DM9000(A)是一个全集成.功能强大.性价比高的快速以太网MAC控制器,它带有一个通用处理器接口.EEPROM接口.10/100 PHY和16KB的SRAM(13KB作为接收FIFO,3KB作为发 ...

  4. 计算机中寄存器的定义,通用寄存器

    通用寄存器可用于传送和暂存数据,也可参与算术逻辑运算,并保存运算结果.除此之外,它们还各自具有一些特殊功能.汇编语言程序员必须熟悉每个寄存器的一般用途和特殊用途,只有这样,才能在程序中做到正确.合理地 ...

  5. STM32外设寄存器地址定义

    一直都是用STM32做项目中的主控芯片,在编程的时候,之前一直忽视了一个问题,那就是寄存器的位置是如何定义的,为什么用一个USART1->CR操作就能够给这个CR寄存器赋值?其实这是一个比较底层 ...

  6. 8051单片机特殊寄存器功能定义

    作为51单片机特殊功能寄存器 速查表,在编程时可提供快速参考,对初学者可能不友好,建议使用电脑查看. 特殊功能寄存器表:SFR 名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit ...

  7. 51单片机c语言定义寄存器r,c51特殊功能寄存器定义及作用

    单片机C51语言是由C语言继承而来的.和C语言不同的是,C51语言运行于单片机平台,而C语言则运行于普通的桌面平台.C51语言具有C语言结构清晰的优点,便于学习,同时具有汇编语言的硬件操作能力.对于具 ...

  8. 第二章(1) 初识P0,P1并口 数据类型,常量定义方法,特殊功能寄存器定义

    导航 1.认识P0与P1,数据类型,常量定义方法,特殊功能寄存器定义 2.P0和P1区别及介绍 ---------------------------------------- 1.认识P0与P1,数 ...

  9. 寄存器和常用的汇编指令

    为了学习需要,最近查看了一下汇编,因为是个初学者很多东东基本不动,所以记录一下基本指令和寄存器,那样就会对汇编慢慢的适应,看得懂那些华丽花哨的反汇编代码了.学习这个东东基本是为了破解和逆向工程使用,因 ...

最新文章

  1. NR 5G 网络功能之AMF
  2. 两道递推公式题的解题报告
  3. C/C++基本类型字节
  4. 发达国家与发展中国家编程语言技术的分布差异性
  5. 【转】C# 动态对象(dynamic)的用法
  6. linux 将任务挂到后台,linux下使用screen或则nohup将任务放到后台运行
  7. 通过AccessKey调用阿里云CDN接口刷新CDN资源案例
  8. [转] error LNK2026: 模块对于 SAFESEH 映像是不安全的
  9. 清除Eclipse工作空间列表
  10. 中国电信计算机类校园招聘笔试题目,中国电信集团2019校园招聘笔试真题(计算机技术类-A卷)(精选).doc...
  11. 傻瓜式脱壳保姆级教学
  12. mybatis原理分析(五)---参数处理
  13. Luogu P4231 三步必杀 (差分)
  14. 在不同位置(客户端的终端设备,服务端,项目代码中)判断设备类型(PC、手机、微信等)
  15. python代码实现自动点击屏幕
  16. 如何去掉华三交换日志中机烦人的 STP_NOTIFIED_TC
  17. input输入的时候统计字数的代码
  18. 用HTML5实现手机摇一摇的功能并配上声音
  19. 涨势迅猛!拼多多跨境平台TEMU在美掀起流量风暴!
  20. 服务器异常卡顿 无法重装系统,电脑重装系统经常卡死怎么解决

热门文章

  1. gcc android开发环境,[RK3399][Android7.1]开发环境搭建
  2. mysql 5.6开启binlog_docker快速入门02——在docker下开启mysql5.6 binlog日志
  3. java线程实例题_java线程相关试题实例源码代码
  4. springboot启动没反应_新特性:Tomcat和Jetty如何处理Spring Boot应用?
  5. 如何解一元一次方程视频_初中数学一元二次方程,注重基础,实例解析考点
  6. oracle巡检 博客,自己总结了一下巡检的工作 for Oracle RAC
  7. python 卡方检验 特征选择_结合Scikit-learn介绍几种常用的特征选择方法
  8. 庄家如何用计算机下单,新人必看!庄家透露坐庄下单要诀
  9. word2vec应用场景_word2vec有什么应用?
  10. Flink异步io应用场景之流表join维表