存储器映射的I/O
基于ARM内核的芯片具有许多的外设,这些外设访问的标准方法是使用存储器映射的I/O,为外设的每个寄存器都分配一个地址。通常,从这些地址装载数据用于读入,向这些地址保存数据用于输出。有些地址的装载和保存用于外设的控制功能,而不是输入或输出功能。
注意:存储器映射的I/O位置的操作不同于正常的存储器位置的操作。通常,存储器映射的I/O位置没有高速缓存和无缓冲区。
执行ARM 系统I/O 功能的标准方法是使用存储器映射的I/O。装载或保存I/O 值时,使
用提供给I/O 功能的特殊存储器地址。通常,从存储器映射的I/O 地址装载用于输入,而保
存到存储器映射的I/O 地址则用于输出。装载和保存都可用于执行控制功能,用于取代它们
正常的输入或输出功能。
存储器映射的I/O 位置的动作通常不同于正常的存储器位置的动作。例如,正常存储器
位置的两次连续装载每次都会返回相同的值,除非中间插入了保存的操作。对于存储器映射
的I/O 位置,第二次装载返回的值可以不同于第一次返回的值。因为第一次装载的副作用(例
如从缓冲区移走已装载的值)或是因为插入另一个存储器映射I/O 位置的装载和保存的副作
用。
这些区别主要影响高速缓存的使用和存储器系统的写缓冲区,具体信息请参考相关资
料。一般来说,存储器映射的I/O 位置通常标示为无高速缓存和无缓冲区,以避免对它们进
行访问的次数、类型、顺序或时序发生改变。
从存储器映射的I/O 取指
在 1.11.5 节中讲到,不同ARM 的实现(可以理解为不同的芯片)在存储器指令取指时
会有相当大的区别。因此强烈建议存储器映射的I/O 位置只用于数据的装载和保存,不用于
指令取指。任何依赖于从存储器映射I/O 位置取指的系统设计都可能难于移植到将来的ARM
实现。
对存储器映射I/O 的数据访问
一个指令序列在执行时会在不同的点访问数据存储器,产生装载和保存访问的时序。如
果这些装载和保存访问的是正常的存储器位置,那么在它们在访问相同的存储器位置时只是
执行交互操作。结果,对不同存储器位置的保存和装载可以按照不同于指令的顺序执行,但
不会改变最终的结果。这种改变存储器访问顺序的自由可被存储器系统用来提高性能(例如
通过使用高速缓存和写缓冲区)。
此外,对同一存储器位置的访问还拥有其它可用于提升性能的特性,其中包括:
分享到:
相关推荐
Configured with: /opt/crosstool/crosstool-0.28/build/arm-linux/gcc-3.4.1-glibc-2.3.2/gcc-3.4.1/configure --target=arm-linux --host=i686-host_pc-linux-gnu --prefix=/opt/crosstool/arm-linux/gcc-3.4.1-...
The GNU Embedded Toolchain for Arm is a ready-to-use, open source suite of tools for C, C++ and Assembly programming targeting Arm Cortex-M and Cortex-R family of processors. It includes the GNU ...
Configured with: /scratch/maciej/arm-linux-2014.05-rel/src/gcc-4.8-2014.05/configure --build=i686-pc-linux-gnu --host=i686-mingw32 --target=arm-none-linux-gnueabi ...... Thread model: posix gcc ...
arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 ./arm-none-linux-gnueabi-gcc -v Using built-in specs. COLLECT_GCC=./arm-none-linux-gnueabi-gcc Target: arm-none-linux-gnueabi Configured...
Configured with: /opt/crosstool/crosstool-0.28/build/arm-linux/gcc-3.4.1-glibc-2.3.2/gcc-3.4.1/configure --target=arm-linux --host=i686-host_pc-linux-gnu --prefix=/opt/crosstool/arm-linux/gcc-3.4.1-...
本文件为arm-linux-gcc-4.3.2.tgz的part2 arm-linux-gcc-4.3.2.tgz.ab,需要与arm-linux-gcc-4.3.2.tgz的part1 arm-linux-gcc-4.3.2.tgz.aa 合并成一个文件arm-linux-gcc-4.3.2.tgz 安装方法: 0. cat arm-linux-gcc-...
Configured with: /opt/crosstool/crosstool-0.28/build/arm-linux/gcc-3.4.1-glibc-2.3.2/gcc-3.4.1/configure --target=arm-linux --host=i686-host_pc-linux-gnu --prefix=/opt/crosstool/arm-linux/gcc-3.4.1-...
skyeye模拟u-boot在s3c2410上运行,对于没有开发板,却又像学习u-boot的同志,这是个不错的选择
arm-linux-gcc交叉编译器 4.3.2 part1 arm-linux-gcc-4.3.2.tgz.aa 需要与part2 arm-linux-gcc-4.3.2.tgz.ab 合并成arm-linux-gcc-4.3.2.tgz 。 版本4.3.2,用于Linux下的ARM开发。 安装方法: 0. cat arm-linux-gcc...
The GNU Embedded Toolchain for Arm is a ready-to-use, open source suite of tools for C, C++ and Assembly programming targeting Arm Cortex-M and Cortex-R family of processors. It includes the GNU ...
arm-linux-gcc-4.3.2交叉编译器,主要用来交叉编译文件
Configured with: /home/abu/arm/u-boot-2019.04/.build/arm-cortexa9_neon-linux-uclibcgnueabihf/src/gcc/configure --build=i686-build_pc-linux-gnu --host=i686-build_pc-linux-gnu --target=arm-cortexa9_neon...
gcc-linaro-7.5.0-2019.12-i686-mingw32_arm-linux-gnueabihf gcc-linaro-7.5.0-2019.12-win32-manifest compile arm from windows
arm-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu.part2.rar
最新的arm开发交叉工具链,windows版,有著名的Sourcery组织开发,先已被mentor并购
arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu 是由 CodeSourcery 公司基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARM系统中所有环节的代码,包括裸机程序、u-boot、Linux kernel、filesystem和App...
arm-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu.part1.rar
gnuarmeclipse-openocd-win64-0.10.0-201601101000-dev-setup
The GNU Embedded Toolchain for Arm is a ready-to-use, open source suite of tools for C, C++ and Assembly programming targeting Arm Cortex-M and Cortex-R family of processors. It includes the GNU ...
由于上传文件大小限制,将工具链分为2个压缩文件,arm-linux-gcc-4.3.2-1.tgz和arm-linux-gcc-4.3.2-2.tgz 请务必下载完整,分别进行安装。 安装方法: 1.ubuntu 终端输入 tar -zxvf arm-linux-gcc-4.3.2-1.tgz -C ...