移动_黄烨明_基于VxWorks的内存管理及一个内存泄漏查找实例.doc

移动_黄烨明_基于VxWorks的内存管理及一个内存泄漏查找实例.doc

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于VxWorks的内存管理和一个内存泄漏查找实例 本文主要分三部分,第一章介绍基于VxWorks的内存管理的主要内容,第二章介绍应用在ZXWR NB01产品软件设计中OSS的内存管理方法,第三章介绍实际应用中一个内存泄漏查找的实例。 Chapter 1 基于VxWorks的内存管理 综述 对于一个采用了VxWorks操作系统的主处理器构成的系统,主内存的管理机制主要由BSP来实现,包括内存的初始化和内存的访问接口; 主内存的初始化由romInit()实现,总线访问(对设备而言)在sysHwInit()中初始化; BSP对内存访问的支持和管理策略: 主内存的配置 对MMU的虚拟映射 Cache策略 内存探针 BSP的硬件寄存器在sysHwInit中初始化,通常的设备(串口除外)寄存器当设备初始化时被初始化; 为调示方便,在BSP开发期间禁止cache和MMU直到以下的情况实现: 内核被成功的激活 驱动器经过测试 内存配置 BSP负责配置主内存来实现快速的内核操作 一些关键地址必须被定义 如果使用MMU,必须定义内存映射 提供支撑程序 内存地址的定义在以下的文件中: config.h-用户可配置的 bsp.h-由目标板配置,非用户使用 BSP提供的内存函数:sysMemTop()、sysNvRamSet()、sysNvRamGet() 上图代表了下载的镜像被重定位后的RAM的分区;一个WDB代理内存池仅仅当与VxWorks镜像一起的Tornado工具被使用时才需要;用户保留内存是不被VxWorks的程序所访问的。 char * sysMemTop(void) 函数返回系统内存的首地址,代码在sysLib.c中; 宏USER_RESERVED_MEM定义了不被VxWorks程序访问的用户保留内存的大小 如果BSP不支持可选函数sysPhyMemTop(),由LOCAL_MEM_LOCAL_ADRS+ LOCAL_MEM_SIZE替代。 内存的自动分区允许在初始化时配置物理内存的大小,如果自动分区功能没有激活,物理内存的大小由config.h中的LOCAL_MEM_SIZE静态定义; 自动分区的具体细节是根据系统的不同而异的,典型的有: 当DRAM在romInit()中被初始化时,配置信息存储在内存的控制寄存器或/和软件结构中; 在分区时,配置信息被读取来计算所有物理内存的大小。 支持自动分区的函数是sysPhysMemTop():char * sysPhysMemTop(void) 函数返回的是物理内存的首地址; 如果LOCAL_MEM_AUTOSIZE在config.h中被定义,该函数可提供动态的内存分区; BSP对自动分区的支持是可选的,如果参考BSP的代码没有静态的修改,被定义的缺省值将被返回; SysPhysMenTop()是由sysHwInit()函数调用的:该函数必须在KernelInit()之前,也就是sysMemTop被调用时。内核激活的调用: 所有的BSPs必须有NVRAM接口即使在目标环境中没有非易失RAM,接口必须支持: sysNvRamSet() 、sysNVRamGet() 所有NVRAM的大小必须在config.h中定义为NV_RAM_SIZE的大小,如果没有NVRAM则定义为NONE; 如果提供了,NVRAM用于存储可下载的镜像的启动参数; 缺省配置在NVRAM的开头保留了255个字节用于启动参数的存储; 缺省的启动参数在config.h中定义并静态连接到可下载的VxWorks的镜像中,缺省条件下是没有NVRAM的; NVRAM为启动参数分配的大小和定位在configAll.h中定义: BOOT_LINE_SIZE定义NVRAM为启动参数保留的大小,缺省为255字节; NV_BOOT_OFFSET定义了启动参数在NVRAM中的首地址,缺省为0; 为覆盖缺省值,在config.h中重定义宏。 set/get NVRAM的程序 部分驱动器在../src/drv/mem目录下,如果没有NVRAM使用../src/drv/mem/下的nullNvRam.c,该程序包含在sysLib.c中。 NVRAM支持的函数: STATUS sysNvRamSet(string,strLen,offset) STATUS sysNvRamGet(string,strLen,offset) 三、MMU机制 MMU主要是受系统库的控制,BSP则负责提供对物理内存描述符的支持: 由MMU使用的物理内存描述符用来创建与虚拟地址空间的初始映射; 缺省的映射是平滑的,一对一的在物理和虚拟内存空间的映射。 MMU由tUsrRoot任务调用usrMmuInit()进行初始化和使能 首先初始化系

文档评论(0)

xiaofei2001129 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档