- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
导航编程方法
导航编程方法 引言 我们中的大多数人通常编写运行在PC机上的软件,如数据库应用、图像处理、Internet应用等,而缺乏编写嵌入式软件的经验。不幸(遗憾)的是,我们不得不编写运行在导航机上的程序。在编写这样的程序之前,我们需要了解我们将要进行的工作和以往的工作有哪些不同,我们所习惯的编程方法哪些可以继续使用,哪些必须改变。 内存 PC机的一个最大的优势是我们可以认为有无限多的内存,大多数的PC机有64M的内存,而且Windows提供了虚拟内存机制,使编程者可以任意地使用内存,而在导航机上,我们一共只有4M或8M的内存可以使用,这要求我们必须认真地考虑在编码时如何节省内存,甚至会遇到为了节省内存而牺牲效率的情况。 不要使用小块内存 使用小块内存会增加系统在管理、检查内存状态上的开销;同时,使用小块内存过多很容易出现内存碎块,尽管系统有内存碎块整理的功能,但还是会增大系统负担。因此,我们强烈反对使用小块内存。 推荐的使用方法: 当仅使用少量且事先知道大小的内存时,可以以变量或数组的形式申请。 当时用内存量较大,使用的大小事先(编码时)不知道,必须动态申请的内存时,应该先申请一块较大内存块,使用时通过计算确定每一小块的内存地址。 用数组实现链表 在程序中使用链表有时是必须的,也可以给编程带来很多方便。但使用链表实施必要分配多块内存,在链表进行插入、删除等操作时还要进行内存的申请和释放操作,在导航系统这样一个资源非常有限的系统里,这样做会占用大量系统时间,给系统带来不必要的负担。那么我们怎样才能既使用链表的优点,同时又避免给系统增加不必要的麻烦呢?针对这个目的,我们认为:用数组实现链表是一个比较好的方式。 实现方式:结构体数组,在每个元素的结构体中保存Next/Previous节点的下标。 不用的内存要及时释放或解锁 理由很简单:导航系统的资源(尤其是内存)非常有限,占用不再需要的内存会导致其他任务无法取得所需的内存,影响导航系统的性能甚至功能的实现。 不要保存(非固定)内存块的指针 导航系统中的内存属性有很多种,在OS的讲座中想必已经介绍了。其中除了Fixed这种属性的内存块之外,其他内存块的指针(地址)并非在任何时候都是有效的。如果保存了一个内存块的指针,而这个内存块再没有被这个指针的持有者意识到的情况下被移动或被删除了的话,再次企图使用这个指针来访问这个内存块是非常危险的,可能导致任何不可预期的后果(轻则数据不正常,重则整个系统会崩溃)。 堆栈的使用 内存泄漏(系统需要长时间运行) 结构体定义 原则是从小到大的顺序定义结构体成员 struct Sample_A{ int iMember1; char cMember2; short siMember3; int iMember4; } struct Sample_A{ char cMember2; short siMember3; int iMember4; int iMember1; } *注意区别 关于内存块的属性特征及其适用范围是否已在OS的讲座中介绍了?有没有必要强调一下? 介绍了RSM,及与其它普通内存池的区别,使用目的. RSM的内存是属于RX830操作系统后增加的一部分,主要的目的是为系统提供某些时候(偶尔),较少时间需要使用大量内存的机制.主要用于具有Cache属性的内存使用方式. RSM内存池并不是一个完整的(或者说连续的)内存,生成时只是在系统中进行登记,分配内存块时的机制是从全部的用户内存池(1号内存池)中分配. 介绍了内存的属性,相应的区别,使用目的. 在本节介绍时,由于大家对lock,unlock使用不是很清楚,因此强调一遍. 分为固定,可移动,可抛弃三种属性. 固定属性的内存一般在系统初始化时进行分配,因为如果在以后的运行中随机分配会导致内存碎片,所以要求在运行中分配的固定的内存一定要第一时间释放. 处于Unlock时(如果不释放(Release))它的handle有效和地址全局有效. 可移动的内存处于Unlock时(如果不释放(Release))它的handle有效,但是地址无效. 可抛弃的内存处于Unlock时(如果不释放(Release))它的地址无效, handle状态不明,需要先进行Refer.主要用于Cache. 内存块同时可以Lock多次,也就是说可以多个任务同时使用一个内存块,因此要特别注意使用的任务不要发生write和read两种操作,只能有一种.另外,要严格保证Lock和Unlock得成对使用,否则会发生无法正常释放及地址非法的现象. SCL(Sequenceable Collection Light)数组 详细的使用方法请向刘超(电话:64047,E-mail:liuchao@)咨询。 多任务 准确地说
文档评论(0)