<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 中斷調用方式的ARM二次開(kāi)發(fā)接口設計

中斷調用方式的ARM二次開(kāi)發(fā)接口設計

作者: 時(shí)間:2013-11-11 來(lái)源:網(wǎng)絡(luò ) 收藏

隨著(zhù)信息技術(shù)的飛速發(fā)展,基于芯片的可編程智能嵌入式設備在我們的日常生活中扮演著(zhù)越來(lái)越重要的角色。由于程序的設計者在設計軟件程序和功能的時(shí)候,所針對的對象是社會(huì )上的通常情況,并沒(méi)有根據最終不同的使用者來(lái)加以設計,因此各個(gè)軟件的實(shí)際使用者在使用軟件時(shí)會(huì )根據自己的使用要求和市場(chǎng)需求預測,對軟件再加以開(kāi)發(fā),即俗稱(chēng)的二次開(kāi)發(fā)[1]。如今,Android系統和蘋(píng)果產(chǎn)品等都給用戶(hù)提供開(kāi)發(fā)平臺,便于用戶(hù)開(kāi)發(fā)自己的程序。為了適應用戶(hù)簡(jiǎn)易嵌入式應用程序的開(kāi)發(fā),縮短二次開(kāi)發(fā)周期,開(kāi)發(fā)一種低成本的專(zhuān)用嵌入式二次開(kāi)發(fā)工具就顯得十分必要。其中,二次開(kāi)發(fā)工具最重要的部分就是二次開(kāi)發(fā)接口的設計。

  通過(guò)對現有嵌入式二次開(kāi)發(fā)技術(shù)的研究發(fā)現3個(gè)問(wèn)題。問(wèn)題一,現有嵌入式二次開(kāi)發(fā)技術(shù)主要是直接給用戶(hù)提供系統函數的OBJ中間文件,以及函數聲明的頭文件。用戶(hù)通過(guò)調用系統函數編寫(xiě)自己的程序,進(jìn)行編譯鏈接后直接燒錄進(jìn)芯片進(jìn)行使用,但是這樣會(huì )造成芯片存儲空間的浪費。問(wèn)題二是系統程序函數的安全問(wèn)題,它直接給用戶(hù)提供系統OBJ中間文件,通過(guò)反編譯能夠很容易地破解出原有系統函數,系統程序的保密性將大大地降低。問(wèn)題三是用戶(hù)編寫(xiě)程序的復雜性問(wèn)題,一般專(zhuān)業(yè)的嵌入式工程師編寫(xiě)的系統函數考慮到重用性,會(huì )把一些過(guò)程細分為多個(gè)子函數,普通用戶(hù)為實(shí)現一個(gè)功能也需要調用多個(gè)函數,對于二次開(kāi)發(fā)十分不利。函數一般采用嵌入式專(zhuān)業(yè)術(shù)語(yǔ)進(jìn)行命名,普通用戶(hù)很難通過(guò)函數名直接了解此函數具體的用途。
1 存在的問(wèn)題與解決方法
中斷調用方式的ARM二次開(kāi)發(fā)接口設計
圖1 基于嵌入式系統的二次開(kāi)發(fā)程序結構示意圖
  二次開(kāi)發(fā)接口的構架如圖1所示,通過(guò)二次開(kāi)發(fā)接口可以輕松地實(shí)現系統程序和用戶(hù)應用程序的分離。
  通過(guò)這種應用程序和系統程序的分離方式,可以輕松地實(shí)現系統程序的升級和應用程序的通用。
1.1 Flash存儲問(wèn)題
  系統程序中自帶函數1實(shí)體、3實(shí)體,如果用戶(hù)自己定制的應用程序中還需使用到1和Funtion3這2個(gè)函數,則在編譯應用程序文件的時(shí)候,編譯器會(huì )從系統提供的OBJ文件中把Funtion1和Funtion3這2個(gè)函數的實(shí)體再次編譯鏈接進(jìn)入bin文件,從而造成bin文件的冗余。當把應用程序的bin文件燒錄至Flash中時(shí)會(huì )浪費大量的空間資源。其結果如圖2所示。
中斷調用方式的ARM二次開(kāi)發(fā)接口設計
圖2 Flash ROM存儲結構示意圖
  針對Flash的冗余問(wèn)題,筆者提出了一個(gè)方案,就是在應用程序中保存的不是系統函數本身,而是其地址,當運行到那個(gè)函數的時(shí)候則實(shí)現跳轉到指定地址,函數運行完成后跳轉回來(lái),應用程序繼續執行下去。
1.2 系統函數的安全問(wèn)題
  因為使用基于1.1節中的地址直接跳轉方式,所以不需再向用戶(hù)提供函數體本身,而是提供函數體的地址,相對于原始方法來(lái)說(shuō)進(jìn)行反編譯更難。
1.3 簡(jiǎn)化代碼編寫(xiě)難度
  可以針對用戶(hù)群進(jìn)行函數的二次封裝,把一些實(shí)現整體動(dòng)作的函數,重新打包成一個(gè)新的函數,函數名直接采用直譯方式命名,更易明白。比如顯示屏特定位置顯示字符的過(guò)程,可以直接把清屏、輸出指針移動(dòng)、輸出字符這3個(gè)函數封閉在一起。
2 改進(jìn)方案
  在實(shí)現接口的設計過(guò)程中發(fā)現2個(gè)問(wèn)題。第1個(gè)問(wèn)題,在給用戶(hù)提供可用函數庫的時(shí)候需要提供所有函數的地址,對于二次接口的編寫(xiě)者來(lái)說(shuō)工作量比較大。第2個(gè)問(wèn)題,在系統程序更新后,所有函數在Flash中存放的地址會(huì )發(fā)生變動(dòng),在更新以前編寫(xiě)的應用程序都需要重新定義函數地址才可以再次使用。這一點(diǎn)不利于用戶(hù)應用程序的開(kāi)發(fā),沒(méi)有考慮到應用程序的通用性。
  通過(guò)研究過(guò)程發(fā)現,可以借鑒DOS響應時(shí)的跳轉原理來(lái)解決以上2個(gè)問(wèn)題。比如21號DOS的調用:
MOV AH 4CH
INT 21H
是返回DOS系統的通過(guò)給AH寄存器賦值4CH,然后調用INT 21H指令,計算機就會(huì )根據AH寄存器中的值執行相應的操作。其中,4CH返回DOS系統,還可以給AH寄存器賦其他值[2]。
  同理這里提出了一種基于上面函數地址跳轉的改進(jìn)方法,即通過(guò)設置一個(gè)中間跳轉函數(這里函數名設置為SysCallLib)來(lái)解決接口的設計過(guò)程中發(fā)現的 2個(gè)問(wèn)題。改進(jìn)的基于地址跳轉方法的實(shí)現效果如圖3所示。通過(guò)這種方法,把SysCallLib函數體固定在特定的地址,用戶(hù)只需要知道一個(gè)地址即可實(shí)現跳轉。SysCallLib函數體內部通過(guò)Case語(yǔ)句來(lái)實(shí)現內部函數的跳轉。
中斷調用方式的ARM二次開(kāi)發(fā)接口設計
圖3 改進(jìn)的基于地址跳轉方法的Flash ROM存儲結構示意圖
3 二次開(kāi)發(fā)接口的建立
3.1 GCC開(kāi)發(fā)環(huán)境的建立
  GNU 工具鏈在產(chǎn)品開(kāi)發(fā)中使用的很廣泛,有些為打造的開(kāi)發(fā)工具也是基于GNU 工具鏈的。在目前,支持CM3的GNU工具鏈可以由CodeSourcery網(wǎng)站免費下載。
  而GNU的C編譯器則在以后支持CortexM3。和其他ARM開(kāi)發(fā)工具相似,GNU工具鏈也包含了編譯器、匯編器和鏈接器,使得源代碼既可以使用C語(yǔ)言,也可以使用匯編完成,基于GNU工具鏈的開(kāi)發(fā)模式圖如圖4 所示[3]。

c語(yǔ)言相關(guān)文章:c語(yǔ)言教程



上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: ARM Funtion 中斷

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>