国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

Arm設計思想與高效C編程

發布時間:2011-3-19 16:51    發布者:1770309616
一.RISC設計思想
ARM內核采用RISC體系結構。RISC是一種設計思想,其目標是設計出一套能在高時鐘頻率下單周期執行,簡單而有效的指令集。RISC的設計重點在于由硬件執行的指令的復雜度,這是因為軟件比硬件容易提供更大的靈活性和更高的智能。因此,RISC設計對編譯器有更高的要求;相反,傳統的復雜指令集的計算機(CISC)則更側重于硬件執行指令的功能性,使CISC變得更復雜。
RISC設計思想主要由下面4個設計準則來實現:
l         指令集
RISC處理器減少了指令種類,每條指令的長度都是固定的,允許流水線在當前指令譯碼階段去取其下一條指令;而CISC處理器中,指令的長度通常不固定,執行也需要多個周期。
l         流水線
在理想情況下,流水線每周期前進一步,可獲得最高的吞吐率;而CISC指令的執行需要調用微代碼的一個微程序。
l         寄存器
RISC處理器擁有更多的通用寄存器,每個寄存器都可存放數據或地址。寄存器可為所有的數據操作提供快速的局部存儲訪問;而CISC處理器都是用于特定目的的專用 處理器。
l         load-store結構
處理器只能處理寄存器中的數據。獨立的load和store指令用來完成數據在寄存器和外部存儲器之間的傳送。因為訪問存儲器很耗時,所以把存儲器訪問和數據處理分開。這樣有一個好處,那就是可反復地使用保存在寄存器中的數據,而避免多次訪問存儲器。相反,在CISC結構中,處理器能夠直接處理存儲器中的數據。
二.ARM設計思想
為降低功耗,ARM處理器已被特殊設計成較小的核,較高的代碼密度。ARM內核不是一個純粹的RISC體系結構,這是為了使它能夠更好的適應其主要應用領域-嵌入式系統。在某種意義上,甚至可以認為ARM內核的成功,正是因為它沒有在RISC概念上沉入太深。現在系統的關鍵并不在于單純的處理器速度,而在于有效的系統性能和功耗。
面向嵌入式系統的指令集
l         一些特定指令的周期數可變
例如:多寄存器裝載/存儲的load/store指令的執行周期就是不確定的
l         內嵌桶形移位器產生了更為復雜的指令
l         Thumb 16位指令集
l         條件執行
l         增強指令
三.高效的C編程
1)C數據類型的有效用法
l         對于存放在寄存器中的局部變量,除了8位或16位的算數模運算符外,盡量不要使用char和short類型。而要使用有符號或者無符號的int類型。除法運算時使用無符號數執行速度更快。
l         對于存放在主存儲器中的數組和全局變量,在滿足數據大小的前提下,應盡可能使用小尺寸的數據類型,這樣做可以節省存儲空間。ARMv4體系結構可以有效的裝載和存儲所有寬度的數據,并可以使用遞增數組的指針來有效的訪問數組。對于short類型數組,要避免使用數組基地址的偏移,因為LDRH指令不支持偏移尋址。
l         由于隱式或者顯式的數據類型轉換通常會有額外的指令周期開銷,所以在表達式中應盡量避免使用。load和store指令一般不會產生額外的轉換開銷,因為load和store指令是自動完成數據類型轉換的。
l         對于函數參數和返回值應盡量避免使用char和short類型。即使參數范圍比較小,也應該使用int類型,以防止編譯器做不必要的類型轉換。
2)高效的編寫循環體
l         使用減計數到零的循環結構,這樣編譯器就不需要分配一個寄存器來保存循環中止值,而且與0比較的指令也可以省略。
l         使用無符號的循環計數值,循環繼續的條件為i!=0而不是i>0,這樣可以保證循環開銷只有兩條指令。、
l         如果事先知道循環體至少會執行一次,那么使用do-while循環要比for循環好,這樣可以使編譯器省去檢查循環計數值是否為0的步驟。
l         展開重要的循環體可降低循環開銷,但不要過度展開,如果循壞的開銷對整個程序來說占的比例很小,那么循環展開反而會增加代碼量并降低cache性能。
l         盡量使數組的大小是4或8的倍數,這樣就可以容易地以2,4,8次等多種選擇展開循環,而不需要擔心剩余數組元素的問題。
3)高效的寄存器分配
l         應該盡量限制函數內部循環所用局部變量的數目,最多不超過12個,這樣,編譯器就可以把這些變量都分配給ARM寄存器。
l         可以引導編譯器,通過查看是否屬于最內層循環變量來確定某個變量的重要性
4)高效的調用函數
l         盡量限制函數參數不要超過4個,這樣函數調用的效率會更高。也可以將幾個相關的參數組織在一個結構體中,用傳遞結構體指針來代替多個參數。
l         把比較小的被調用函數和調用函數放在同一個原文件中,并且要先定義,后調用,編譯器就可以優化函數調用或者內聯較小的函數。
l         對性能影響較大的重要函數可使用關鍵字_inline進行內聯。
5)避免指針別名
l         不要依賴編譯器來消除包含存儲訪問的公共子表達式,而應建立一個新的局部變量來保存這個表達式的值,這樣可以保證只對這個表達式求職一次。
l         避免使用局部變量的地址,否則對這個變量的訪問效率會比較低。
6)高效的結構體安排
l         結構體元素要按照元素的大小來排列,以最小的元素放在開始,最大的元素安排在最后。
l         避免使用很大的結構體,可以使用層次化的小結構體來代替。
l         為了提高可移植性,人工對API的結構體添加填充位,這樣,結構體的安排將不會依賴于編譯器。
本文地址:http://m.qingdxww.cn/thread-58908-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
shalione 發表于 2011-3-20 10:55:36
ok
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 使用SAM-IoT Wx v2開發板演示AWS IoT Core應用程序
  • 使用Harmony3加速TCP/IP應用的開發培訓教程
  • 集成高級模擬外設的PIC18F-Q71家族介紹培訓教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿澤電子(Mouser)專區
關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品中文字幕乱码三区一二| 泽井芽衣在线精品视频| 99久久免费精品国产| 麻豆国产人妻欲求不满| 性盈盈剧场| 青草视频在线免费| 日韩在线免费视频| 无限时间看片在线观看| 草莓AV福利网站导航| 男女夜晚在爽视频免费观看| 亚洲中久无码永久在线| 性欧美高清久久久久久久| 亚洲人成片在线观看| 亚洲欧美日韩成人一区在线| a视频免费在线观看| 色窝窝亚洲AV在线观看| 日本黄线在线播放免费观看| 日本乱人伦片中文字幕三区| 四虎影视免费观看免费观看| 在线伦| 美女张开让男生桶| 亚洲αv久久久噜噜噜噜噜| 日本三级精品| 亚洲成a人片在线观看中文!!! | 亚洲国产精品一区二区三区久久 | 午夜视频在线观看国产| 94vvv男人的天堂| 久久久免费热线精品频| 亚洲视频第二页| 欧美中日韩在线| 视频高h| 中文字幕色网站| 老师你狠狂| 人妖videos| 图片区小说区av区| 中文字幕网资源站永久资源| 又粗又大的机巴好爽视频视频| 美女被打开了屁股进去的视频 | 日韩黄色精品| 天天草天天| 国产乱辈通伦影片在线播放亚洲|