新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 將8051應用程序遷移到ARM Cortex-M處理器上

        將8051應用程序遷移到ARM Cortex-M處理器上

        作者: 時間:2012-09-12 來源:網絡 收藏

        系列包括廣泛使用的3、針對FPGA的1、2009年初推出的Cortex-M0處理器(最小的 處理器)和2010年初推出的 C o r tex-M4處理器(支持浮點和數字信號處理增強指令)。這些處理器具有先進的功能特點和簡單易用的編程模型,對于想從8051微控制器架構的開發人員來說,極具吸引力。本文是一篇入門指南,目的是幫助8051微控制器的開發人員了解8051和A R M Cor tex-M處理器系列在架構、軟件和硬件設計上的主要差異,從而加快過程。

        本文引用地址:http://www.104case.com/article/170878.htm

        架構概述

        對于一些嵌入式程序員(尤其是那些習慣使用匯編語言編程的程序員),首先要做的事情就是了解編程模型。

        寄存器

        Cortex-M處理器具有一個32位寄存器庫和一個xPSR(組合程序狀態寄存器)。而8051具有ACC(累加器)、B、DPTR(數據指針)、P SW(處理器狀態字)和四個各含八個寄存器的寄存器庫 (R0-R7)。

        在8051中,一些指令會頻繁使用某些寄存器,如ACC和 DPTR。

        這種相關性會極大降低系統的性能,而在ARM處理器中,指令可使用不同的寄存器來進行數據處理、內存存取和用作內存指針,因此不會有這個問題。

        從根本上說,ARM 架構是一個基于加載(Load)和存儲(STore)的RI S C架構,處理器寄存器加載數據,然后將數據傳給A LU進行單周期執行。而8051寄存器(ACC、B、PSW、SP和DPTR)可在SFR(特殊功能寄存器)的內存空間中訪問。

        為了確保普通的C函數能夠用作中斷處理程序,在需要處理中斷時,C o r t e x- M的寄存器(R 0 - R 3、R12、L R、P C和xPSR)會被自動壓入堆棧,而軟件僅需在必要時將其他寄存器壓入堆棧。雖然8051具有4個寄存器庫,但是ACC、B、D P T R和PSW寄存器并不會自動壓棧,因此通常需要通過中斷處理程序對這些寄存器進行軟件壓棧。

        寄存器

        ARM處理器具有32位尋址,可實現一個4GB的線性內存空間。該內存空間在結構上分成多個區。每個區都有各自的推薦用法(雖然并不是固定的)。統一內存架構不僅增加了內存使用的靈活性,而且降低了不同內存空間使用不同數據類型的復雜性。

        相反地,8051微控制器具有多個內存空間。內存空間的分割使得有效地利用全部內存空間變得困難,而且需要借助C語言擴展來處理不同的內存類型。

        8 0 51在外部R A M內存空間上最高支持* K B的程序內存和64K B的數據內存。理論上,可以利用內存分頁來擴展程序內存大小。不過,內存分頁解決方案并未標準化,換句話說,不同8051供應商的內存分頁的實現并不相同。這不僅會增加軟件開發的復雜性,而且由于處理頁面切換所需的軟件開銷,還會顯著降低軟件性能。

        在AR M C or tex-M3或M4上,S R A M區和外設區都提供了一個1MB的位段區(bit band regiON)。此位段區允許通過別名地址訪問其內部的每個位。由于位段別名地址只需通過普通的內存存取指令即可訪問,因此C語言完全可以支持,不需要任何特殊指令。而8051提供了少量的位尋址內存(內部R A M上16字節和S F R空間上16字節)。處理這些位數據需要特殊指令,而要支持此功能,C編譯器中需要C語言擴展。

        A R M C o r t ex-M處理器的內存映射包含多個內置外設塊。例如,ARM Cortex-M處理器的一個特性是具有一個嵌套矢量中斷控制器 (NVIC) 。此外,系統區中內存映射有數個指定控制寄存器和調試組件,以確保優異的中斷處理并極大方便開發人員使用。


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 来安县| 安泽县| 沈阳市| 永丰县| 乌兰浩特市| 乌鲁木齐市| 九龙县| 夏河县| 利川市| 白河县| 玉环县| 方山县| 布尔津县| 泾川县| 灵宝市| 呼图壁县| 平泉县| 库车县| 鸡东县| 彭山县| 汝阳县| 卓尼县| 临澧县| 麟游县| 金坛市| 嘉鱼县| 铜川市| 陇南市| 万荣县| 托克托县| 罗山县| 四川省| 贞丰县| 琼中| 大兴区| 青海省| 刚察县| 商城县| 仙游县| 浙江省| 杂多县|