« | July 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | | |
| 公告 |
☆★☆★☆★☆★☆★☆ 生活的点点记录,以及一些体会...........
喜欢是淡淡的爱,爱是深深的喜欢.
时间会见证一切.......................
欢迎大家指出错误,共同进步..........
期待中..............................
☆★☆★☆★☆★☆★☆ |
Blog信息 |
blog名称: 日志总数:162 评论数量:312 留言数量:0 访问次数:939690 建立时间:2005年5月17日 |

| |
[wince study]OEMAddressTable介绍 文章收藏
oceanblue 发表于 2008/5/8 11:10:24 |
一般在ARM架构的CPU上,物理地址都是统一编址的,寻址空间为4GB(32Bit CPU)。也就是说,针对一个ARM的处理器,它可以访问的物理空间是4GB。在WinCE中,ARM中的4GB物理地址空间将被映射为512MB的虚拟内存空间。 OEMAddressTable就是一个4GB物理地址空间到WinCE Kernel中的512MB虚拟地址空间的映射表。
在BSP中,会定义OEMAddressTable来描述系统中可访问的物理空间及对应的虚拟地址空间,还有大小。这个表会在WinCE系统开始启动的时候传给MMU,具体到BSP中应该是在OAL中的startup.s中,OEMAddressTable的起始地址会被放到r0寄存器中,然后就跳转到KernelStart里面,KernelStart会用OEMAddressTable完成MMU得初始化。当WinCE启动以后,就只能访问虚拟地址空间了。
举个例子,比如我们要开发一个Flash的驱动程序,那么首先我们知道这个flash所接的片选对应的物理起始地址是多少(假如是0x60000000),大小 |
|
[wince study]wince源码分析中断之map.c 文章收藏
oceanblue 发表于 2008/5/8 9:39:50 |
wince学习手记 OAL是位于WindowsCE内核与目标设备硬件之间的一个代码层,用于实现windowCE与目标设备硬件之间的通信。为了实现内核与硬件之间最基本的通信功能,OEM必须实现一些必要的功能,同时为了适合不同的硬件配置与操作系统功能,OEM有必要的选择实现一些其他的功能。 在OAL开发过程中,OEM需要实现下列主要功能或函数: .Startup函数; .调试串口; .OEMInit函数; .系统计时器; .中断处理; .内核的输入/输出(ioctl); .KITL。 下面给出微软公司提供的各个功能的函数。 /***************************中断处理****************************/ ./platform/Common/src/common/intr/base/map.c The file implement simple t |
|
[wince study]WinCE BSP中OAL层中的OEMIoControl介绍 文章收藏
oceanblue 发表于 2008/5/8 9:05:51 |
在WinCE的BSP中的OAL部分,会有一个ioctl.c或者oemioctl.c文件,里面主要定义了一个叫OEMIoControl(..)的函数。可以说OEMIoControl是一个很有用的WinCE内核输入/输出函数。
在WinCE5.0中,应用程序和驱动程序可以通过调用KernelIoControl(..)函数来访问WinCE内核,导致调用OEMIoControl函数,这样应用程序和驱动程序就可以访问到OAL中的资源了。但在WinCE6.0中,提供了更好的安全性,应用程序能够访问OEMIoControl中的case受到了限制,只有下面的这些case是可以让应用程序访问的:
IOCTL_HAL_GET_CACHE_INFO IOCTL_HAL_GET_DEVICE_INFO IOCTL_HAL_GET_DEVICEID IOCTL_HAL_GET_UUID IOCTL_PROCESSOR_INFORMATION
如果用户在应用程序中试图访问其他的case,肯定会返回失败的。在WinCE6.0中,驱动程 |
|
MRC与MCR指令 原创空间
oceanblue 发表于 2008/4/3 14:51:56 |
MRC只是数据传输而已相当于MOV,没有相加的意思吧。
手册上这样解释:
MRC:协处理器寄存器到ARM寄存器的数据传送指令。MRC指令将协处理器寄存器中的数据传送到ARM处理器寄存器中
只能在系统模式下执行。在用户模式下执行会触发未定义指令的异常中断 |
|
[Arm_Embeded]ARM汇编语言小结 文章收藏
oceanblue 发表于 2008/4/3 9:14:52 |
ARM汇编语言小结
ARM汇编语言源程序语句,一般由指令,伪操作,宏指令和伪指令作成.
ARM汇编语言的设计基础是汇编伪指令,汇编伪操作和宏指令.
伪操作,是ARM汇编语言程序里的一些特殊的指令助记符,其作用主要是为完成汇编程序做各种准备工作,在源程序运行汇编程序处理,而不是在计算机运行期间有机器执行.也就是说,这些伪操作只是汇编过程中起作用,一旦汇编结束,伪操作的使命也就随之消失.
宏指令,是一段独立的程序代码,可以插在程序中,它通过伪操作来定义,宏在被使用之前必须提前定义好,宏之间可以互相调用,也可自己递归调用.通过直接书
写宏名来使用宏.并本具宏 |
|
[Arm_Embeded]ARM指令集 原创空间
oceanblue 发表于 2008/4/1 8:34:49 |
程序状态寄存器指令: MRS用于把cpsr或spsr的值传送到一个寄存器. MSR用于把一个寄存器的内容传送到cpsr或spsr. BIC 逻辑按位清零(AND NOT)指令
MCR:写cp15
MRC:读cp15
|
|
[Arm_Embeded]ARM指令集 原创空间
oceanblue 发表于 2008/3/31 15:19:40 |
交换指令(swp): 是load-store指令的一种特例,它把一个存储器单元的内容与寄存器内容相交换.交换指令是一个原子操作----在连续的总线操作中读/写一个存储单元,在操作期间阻止其它任何指令对该存储单元的读/写. 交换指令在执行期间不能被其它任何指令或其它任何总线访问打断,在此期间系统"占据总线",直至交换完成.
|
|
[Arm_Embeded]ARM指令集 原创空间
oceanblue 发表于 2008/3/31 10:41:14 |
多寄存器传指令:
多次装载-存储的load-store指令可以用一条指令传送多个寄存器的值到内存,或者从内存到多个寄存器.
优点:多寄存器传送指令在数据块操作,上下文切换,堆栈操作等方面,比单寄存器传送指令会有更高的执行效率.
缺点:多寄存器的load-store指令会增加中断的延迟.因为arm不会打断正在执行的指令去响应中断.
语法:LDM,STM(装载多个寄存器,保存多个寄存器)
寻址模式:IA,IB,DA,DB(Increment 执行后增加,执行前增加,Decrement执行后减少,执行前增加)
(类似i++,++i,i--,--i)
单寄存器传送指令:
LDR 把一个字装入到一个寄存器中。
STR 把一个寄存器保存一个字或者一字节。 |
|
[Arm_Embeded]UART 读书笔记
oceanblue 发表于 2008/3/25 14:23:44 |
UART (Universal Asynchronous Receiver/Transmitter) 通用异步收发器
是各种设备之间通信进行的关键模块,当一个设备需要和另一个连接的设备进行通信时,通常采用数字信号。在发送端,这种并行的数字信号必须转换成串行信号后,才能通过有线或无线传输到另一台设备。在接收端,串行信号必须要被恢复成并行信号才能进行处理。UART就是用来处理这种数据总线和串行口之间串—并和并—串转换的。UART应用非常广泛,如手机、工业控制、PC等应用中都要用到UART。 UART是用于控制计算机与串行设备的芯片。有一点要 |
|
|