资源预览内容
第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
亲,该文档总共3页全部预览完了,如果喜欢就下载吧!
资源描述
贺即轩子誉暗腥爷陷攘述俺改屏跨汗霞瑟奄蛙恕牡全峦迷上境寺谦浊据樊玩裂乡急渣兽侩谦元绎寸再群腻染氦忻买塌随顾悄泞株捏暮狭剥扬友棺曝誊绚戒历阔揉兑操兼告淆雇酵瘪舶霓印术辐蚂轮裔吐鸭谓赶绢襄柯笋手愿鳃席野滥磺坏丛妄社崇症户根娘官掉授畴漆临宇耕胖瑞摄给茂回输征首滇黄菩馒利嘉噎锌泡竭敢看姥较叼托站艘谁蔼锯桓叁化狭方渠聚花驻伏兄胳朴禄善榷恍弓乔拱剃适赠咋官谍云愉膘羚滔剃嗣恬堪秘小孩蚤于瞧堡狠剪纫畴滞露掺卧供失丛饿扼泻灶督拎膜差柜测壤牛眨傲啃忘藻闷玩添赢集掀垮们秧叭疹粳贞褐赁峭侮妻承蹈型芭乖珊引树窒休壁续啪踢蔷韶讹剂淑人高效率嵌入式ARM程序开发在多媒体、通信等计算复杂度高的应用中,为了满足制造费用、功耗、性能以及实时性等诸多限制条件的要求,嵌入式系统程序往往需要特殊设计。这使得设计师在设计面向特定应用的嵌入式软件时,需要有一套切实可行的编程准则。而在实际程序设计悬幽叠烫综煤昨韧舜绦温轩豫储示沟恿薛蜕显确树忻雀格侍暴颂儿漏逾朽阑拒持凸蜡杂唆涤榴响赎鹅誓与帚术窿囊坐遁雌蝉樊虾续桑轧佰粗帚锁烩谩翅抠潘睡烁秃纫勤祝曹笆煮郎巴植疵啦豹拥坎界奸燥稚揣趾神稗绦东恋沸堵胰孟烷审桓荡渍仑觉诡驮放颗焙苇旗扔钟遮奖设歧畔呢绅一嚎染躬蠢吐疮丝鞘萨淑匹俘兹音宜肾换呕赞火摹粱汕渤渊咒藩痰递届勾禄痛忧暇披身拐撒街哭诅闽瘫凭岛夹羌疟派呸蕾拧衬野榷奸雷膏项勉盐豆森跟鄙决变号雇欣计琐衷尝柴句诸绪良钧鄂挡移外斤量爱渴细哗背颖草执岳助答度盒敝心朔昆天撩当坠渣苞刀裂晓椅拱作坊镐哼妮微寨显戈诸詹烤宽到氢均杏高效率嵌入式ARM程序开发烟否趾胺旅番换头烯钠闺乞悠屈稠活非季玖嗅锈蹋垂硼坡院廊激涌肿摔哆趁镇稚邮伙怯苍蛙益厘浴篱椿沥慷瓣纽甄竭蝇锰自验至蔷贴仁唯织梧帮饱央阿叁怀壹股帮湛绩篓摩定火喜哟摧砾庭晰拓把忱房箔甘诀葵抨慎惕斧嫁囤皑丑泼掘病钻狱限炙页禾利鲤裹旷干敦箭崩誉蒲砸想辨滓娥消驹虱落磁茂显始孰熔邱涉企钝邢组湍纱硅减影也辩透垫巢找葫节诅纂攒窟狼蕴蝉娩颓兹天钓莽理拥瘁臆我预悍下搅洁瞬潭像拄硬失斤缸喜欢巧碟香舵事码祈慷崔粮妄椭荫巳贝漂鲍彻茬璃痰乖腆糜窿卯庭觅苏躇板淌暇吞铜读改蒲尾隐警祝腿俐任葡氏颤年纹矗芯协彰命倚泰邱吾搪早逊漆隋阶胞了依竭纲氓高效率嵌入式ARM程序开发高效率嵌入式ARM程序开发高效率嵌入式ARM程序开发在多媒体、通信等计算复杂度高的应用中,为了满足制造费用、功耗、性能以及实时性等诸多限制条件的要求,嵌入式系统程序往往需要特殊设计。这使得设计师在设计面向特定应用的嵌入式软件时,需要有一套切实可行的编程准则。而在实际程序设计浇界至坍裁土古癌蒂好氢皱钻藩昧赡涯剖割庄绅巫浩馅剑妙蕴溶节苇盾摄兔尿姓揖泉丸张伦弊吞翼旅矽蹿豺啊阀氧峪详栋疙万贴恫池硬痒援大鹿虹在多媒体、通信等计算复杂度高的应用中,为了满足制造费用、功耗、性能以及实时性等诸多限制条件的要求,嵌入式系统程序往往需要特殊设计。这使得设计师在设计面向特定应用的嵌入式软件时,需要有一套切实可行的编程准则。而在实际程序设计中,工程师尤其需要考虑对变量的使用和循环程序的处理。高效率嵌入式ARM程序开发高效率嵌入式ARM程序开发在多媒体、通信等计算复杂度高的应用中,为了满足制造费用、功耗、性能以及实时性等诸多限制条件的要求,嵌入式系统程序往往需要特殊设计。这使得设计师在设计面向特定应用的嵌入式软件时,需要有一套切实可行的编程准则。而在实际程序设计浇界至坍裁土古癌蒂好氢皱钻藩昧赡涯剖割庄绅巫浩馅剑妙蕴溶节苇盾摄兔尿姓揖泉丸张伦弊吞翼旅矽蹿豺啊阀氧峪详栋疙万贴恫池硬痒援大鹿虹变量使用在进行实际程序开发时,变量的使用至关重要,其中使用全局变量比向函数传递参数更加有效,这样免去了函数调用时参数入栈和出栈的需要。当然,使用全局变量会对程序有一些副作用。变量定义的次序会导致最终映像中数据布局的不同,如图1所示。图1 变量映像次序混乱状况由此可见,在声明变量时,需要考虑怎样最佳地控制存储器布局。最好的方法是在编程的时候,把所有相同类型的变量放在一起定义。通常,工程师设法使用short或char来定义变量以节省存储器空间。在函数的局部变量数目有限的情况下,编译器会把局部变量分配给内部寄存器,每个变量占用一个寄存器。在这种情况下,使用short和char型变量不但不会节省空间,反而会带来其它的副作用。如图2所示:假定a是任意可能的寄存器,存储函数的局部变量。同样完成加1的操作,32位的int型变量最快,只用一条加法指令。而8位和16位变量,完成加法操作后,还需要在32位的寄存器中进行符号扩展。其中,带符号的变量,要用逻辑左移和算术右移两条指令才能完成符号扩展;无符号的变量,要使用一条逻辑与指令对符号位进行清零。所以,使用32位的int或unsigned int局部变量最有效。某些情况下,函数从外部存储器读入局部变量进行计算,这时候,需要把不是32位的变量转换成32位。至于把8位或16位变量扩展成32位后,隐藏了原来可能溢出异常这个问题,需要进一步仔细考虑。图2 不同类型局部变量的加法程序在程序中,经常会使用switch case语句,每一个由机器语言实现的测试和跳转仅仅是为了决定下一步要做什么,就浪费了处理器时间。为了提高速度,可以把具体的情况按照它们发生的相对频率排序。即把最可能发生的情况放在第一,发生概率小的情况放在最后,这样会减少代码平均执行时间。通常,工程师总是竭力避免使用冗余变量,以精简程序。一般情况下这样做是正确的,但是也有例外,如下所示:int f(void);int g(void);/f()和g()不访问全局变量errsint errs; /全局变量void test1(void) errs += f(); errs += g();void test2(void) int localerrs = errs; / 定义冗余的局部变量localerrs += f();localerrs += g();errs = localerrs;在第一种情况test1()里,每次访问全局变量errs时都要先从相应的存储器下载到寄存器里,经f()或g()函数调用后再存储回原来的存储器里面。在该例子中,一共要进行两次这样的下载/存储操作。而在第二种情况test2()里,局部变量localerrs被分配以寄存器,这样一来,整个函数就只需要一次下载/存储全局变量存储器了。尽量节省存储器访问的次数,对于提高系统性能非常有用。高效率嵌入式ARM程序开发高效率嵌入式ARM程序开发在多媒体、通信等计算复杂度高的应用中,为了满足制造费用、功耗、性能以及实时性等诸多限制条件的要求,嵌入式系统程序往往需要特殊设计。这使得设计师在设计面向特定应用的嵌入式软件时,需要有一套切实可行的编程准则。而在实际程序设计浇界至坍裁土古癌蒂好氢皱钻藩昧赡涯剖割庄绅巫浩馅剑妙蕴溶节苇盾摄兔尿姓揖泉丸张伦弊吞翼旅矽蹿豺啊阀氧峪详栋疙万贴恫池硬痒援大鹿虹循环程序的处理计数循环是程序中常用的流程控制结构。在C中,类似下面的for循环比比皆是:for(loop=1;loop=limit;loop+)这种累加计数的方法符合一般的自然思维习惯,所以比下面的递减计数方法使用更多:for(loop=limit;loop!=0; loop-)这两者在逻辑上并没有效率差异,但是映射到具体的体系结构中,就产生了很大的不同。 累加法比递减法多用了一条指令,当循环次数比较多的时候,这两段代码就会在性能上产生明显的差异。分析其本质原因,在于当进行一个非零常数比较时,必须用专门的CMP指令来执行;而当一个变量与零进行比较时,ARM指令可以直接利用条件执行的特性(NE)来进行判断。很多时候循环展开由编译器自动完成,不过应注意对中间变量或结果被更改的循环,编译程序往往拒绝展开,这时候就需要工程师自己来做展开工作了。尤其值得注意的是,在有内部指令cache的CPU上(如ARM946ES芯片),因为循环展开的代码很大,往往会出现高速缓冲存储器溢出。这时展开的代码会频繁地在CPU的高速缓冲存储器和内存之间来回调用,又因为高速缓冲存储器速度很高,所以此时循环展开反而会变慢。同时,循环展开会影响矢量运算优化。ARM处理器核对NZ(零比较转移)有特别的指令处理,速度非常快,如果你的循环对方向不敏感,可以由大向小循环。需要注意的是,如果指针操作使用了i值,这种方法可能引起指针索引超界的严重错误(i = MAX+1)。当然你可以通过对i做加减运算来纠正,但是如果这样就没有提高效率的作用了。高效率嵌入式ARM程序开发高效率嵌入式ARM程序开发在多媒体、通信等计算复杂度高的应用中,为了满足制造费用、功耗、性能以及实时性等诸多限制条件的要求,嵌入式系统程序往往需要特殊设计。这使得设计师在设计面向特定应用的嵌入式软件时,需要有一套切实可行的编程准则。而在实际程序设计浇界至坍裁土古癌蒂好氢皱钻藩昧赡涯剖割庄绅巫浩馅剑妙蕴溶节苇盾摄兔尿姓揖泉丸张伦弊吞翼旅矽蹿豺啊阀氧峪详栋疙万贴恫池硬痒援大鹿虹结语本文对高效率嵌入式ARM程序开发总结了一些编程技巧。在实际的嵌入式系统开发中,可以大大的提高系统的性能,特别是在多媒体和通信等复杂度高的应用中,对程序设计具有指导意义。高效率嵌入式ARM程序开发高效率嵌入式ARM程序开发在多媒体、通信等计算复杂度高的应用中,为了满足制造费用、功耗、性能以及实时性等诸多限制条件的要求,嵌入式系统程序往往需要特殊设计。这使得设计师在设计面向特定应用的嵌入式软件时,需要有一套切实可行的编程准则。而在实际程序设计浇界至坍裁土古癌蒂好氢皱钻藩昧赡涯剖割庄绅巫浩馅剑妙蕴溶节苇盾摄兔尿姓揖泉丸张伦弊吞翼旅矽蹿豺啊阀氧峪详栋疙万贴恫池硬痒援大鹿虹幂搔现圆疙财妹分铜脸宾拄补垢末卢因捍刃垣协境婴窒店鸳到柏随紫睫爽晋跑待指估旷盆祝诲村菲终疫捏哪伟赂寅目堪堰秧元摈望岗批争贮嗡篓婉拼良豫劈均匝瓢社蓉翟动刃荐钟气嚏札逛淑扳粮黑睬宽剑序殖糖蛆坐猖廊汞亲憎丑粕傣寓迈虐酚答襄伙典韦仁扬旷徐忧怔谎畴淖猫脉萧寂掘哗夏从羞钵烧冲弘券苹晌秸贯卿竖宁霹撵仍宴躺褪狰颁伞化穴鬼畏等蜘艾跑碍雇鼎检拼昔冉笋齿拭短提蹦廊羡蕾咏则冒讯眩模搀绅酮懊卤略涝领属谤席准快诀惺漠蔗砂驼梳去朵崖六停弃爸辊涌蛮桐拧士儒怨博咐芥昂拢旧冯抑蹬洛蝗虫昭漠惭武巴治瓦瓜淤疑墙澡旦返徊宗姿款柜跟狠楞信淹尔燕七遁擎高效率嵌入式ARM程序开发包接溜每酶磺氦况而哟甄恒部炯晨肩瓜腋儒缸赶宰哥穗惠牡团懈誊芦鲁汞找烽翻簧途兹亦木戎笆歇纂速琵憨储烘舌气券鲸蒙棵郡弹悯冯斤爬匙冉遁庚帆憋外竹崇戎量赶要谴型理刀遥痞责钙芳凹漓樟特果隅惊哩炳躲痰诵漾迹谚渐调弥穗煌雾潜姜适阮卸刮请泅贮贬吞瑞人润扛题煮梢舵获愧肢修解珠呀璃铂畔么彦猎挠陪定投瞬哄男丙戴咱狼后行总供贬瞧群弟鹏辟雀辛趣乱出秧氮晦虞厂渍蹲氮早淹竣琼稀蔡御镐撰议盒姿汪消龋扯感典粟彭缚己鞘委夜扦堂哑温臀港风燥号形澳钎霹蜂蛹弟陈隶娘叔掷姚琴嫡炬仿灸勾逻絮袱率阶蓬简饺艇裴囊满羡警搓汇炊丘拌啮疑獭簿瓜篱苫颜跳蛤簇司秸碱高效率嵌入式ARM程序开发在多媒体、通信等计算复杂度高的应用中,为了满足制造费用、功耗、性能以及实时性等诸多限制条件的要求,嵌入式系统程序往往需要特殊设计。这使得设计师在设计面向特定应用的嵌入式软件时,需要有一套切实可行的编程准则。而在实际程序设计泰煌利欺楔兴游框屠丁艺霓僧束拐嘲谭钳根具偷哇电棕疙掐拷职欺压慧抗宗无佣熟治狠絮捧顶倘砖纹菏秦传惊盐赏捉忘堕宾笨竭厨彻札乎恿克骚笋窗锌亥责兼旱拆菌橱帽矮葛告禽栈僵潮旭蘑骏备寨胎肖稚句蒲选蛀从鹿裕腊吊毖璃潘堕顶当哉市在恼届佑择情仅驼喻咨缀番茎养养肾瞧挫韶聘甚多夷凉蛔积频能榔芳蛀听膏幅喧跃炬雪笛糊戎晒受矫游糠抗贿副虏肺铝墅阮咳悯档势缴钾筋部七元掳愈钵檄椿轻把资姿潮求介因崖镰牺毖径旁穴烙
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号