利用Maxim高速微控制器系列中的數(shù)據(jù)指針遞減功能,可以簡(jiǎn)化存儲(chǔ)器管理。本應(yīng)用筆記探討了該系列微控制器在DS80C400、DS5250、DS89C430和其他產(chǎn)品中使用MOVX操作。示例代碼在執(zhí)行內(nèi)存?zhèn)鬏敳僮鲿r(shí)突出顯示 DPTR。
概述
任何微控制器的基本操作之一是能夠存儲(chǔ)和檢索數(shù)據(jù)到內(nèi)存/從內(nèi)存檢索數(shù)據(jù)。MOVX 操作為在 8051 架構(gòu)上執(zhí)行此操作提供了一個(gè)工具。應(yīng)用通常需要微控制器在其MOVX地址空間內(nèi)復(fù)制和移動(dòng)數(shù)據(jù)存儲(chǔ)器塊。當(dāng)源地址和目標(biāo)地址范圍不重疊時(shí),此內(nèi)存?zhèn)鬏敳僮鞣浅:?jiǎn)單,即迭代讀/寫循環(huán)。但是,當(dāng)范圍重疊時(shí),該過程需要一些智能來(lái)避免在傳輸原始數(shù)據(jù)之前覆蓋(損壞)原始數(shù)據(jù)。本應(yīng)用筆記將提供兩種在源緩沖區(qū)和目標(biāo)緩沖區(qū)之間傳輸數(shù)據(jù)(重疊)的可能解決方案,并解釋Dallas的數(shù)據(jù)指針遞減功能如何簡(jiǎn)化解決方案。
重疊內(nèi)存問題
大多數(shù)通用內(nèi)存復(fù)制例程不能確定源復(fù)制范圍和目標(biāo)復(fù)制范圍是否重疊。如果在執(zhí)行復(fù)制例程之前不進(jìn)行此評(píng)估,復(fù)制到與原始源范圍重疊的預(yù)期目標(biāo)范圍的字節(jié)可能會(huì)覆蓋和損壞原始數(shù)據(jù)。圖 1 給出了如何發(fā)生這種情況的簡(jiǎn)單說明??梢钥闯?,目標(biāo)地址范圍從地址 = 0104h 開始,這也恰好是原始源字節(jié)數(shù)組范圍內(nèi)的地址。如前所述,在這種情況下,標(biāo)準(zhǔn) memcpy() 例程不會(huì)生成所需的目標(biāo)數(shù)據(jù)數(shù)組。當(dāng)必須為此類傳輸維護(hù)數(shù)據(jù)完整性時(shí),通常使用 memmove() 操作來(lái)確保在復(fù)制到目標(biāo)時(shí)不會(huì)覆蓋源數(shù)組中的字節(jié)。
圖1.問題:內(nèi)存副本重疊。
可能的解決方案
通過一些觀察,可以看到源數(shù)組(在復(fù)制之前)發(fā)生的覆蓋可以通過幾種方式避免:1) 確定重疊并首先傳輸源緩沖區(qū)中與所需目標(biāo)緩沖區(qū)重疊的字節(jié),或 2) 確定重疊并以相反的順序?qū)⒆止?jié)從源緩沖區(qū)傳輸?shù)侥繕?biāo)緩沖區(qū)。這兩種解決方案如圖 2 和圖 3 所示。請(qǐng)注意,相反方向的重疊(將源數(shù)組復(fù)制到內(nèi)存中較低的目標(biāo))對(duì)于按地址升序傳輸數(shù)據(jù)的標(biāo)準(zhǔn)復(fù)制循環(huán)沒有問題。
給定下面的兩個(gè)視覺對(duì)象(圖 2 和圖 3),人們還應(yīng)該能夠看到解決方案 #1 在為多個(gè)復(fù)制操作計(jì)算、存儲(chǔ)和傳遞不同的源、目標(biāo)和長(zhǎng)度變量時(shí)遭受了額外的開銷,而第二個(gè)解決方案只能執(zhí)行此操作一次。
圖2.重疊內(nèi)存復(fù)制解決方案 #1。
圖3.重疊內(nèi)存復(fù)制解決方案 #2。
達(dá)拉斯硬件簡(jiǎn)化解決方案 #2
許多達(dá)拉斯微控制器產(chǎn)品(附錄 A 中提供的列表)為每個(gè)可用數(shù)據(jù)指針實(shí)現(xiàn)一個(gè)遞增/遞減 (IDx) 位,以指定“INC DPTR”指令是遞增還是遞減活動(dòng)數(shù)據(jù)指針。使用數(shù)據(jù)指針遞減功能,解決方案 #2 特別容易在 Dallas 產(chǎn)品上實(shí)現(xiàn),允許線性傳輸并最大限度地減少執(zhí)行時(shí)間。
為了利用數(shù)據(jù)指針遞減功能,應(yīng)用程序代碼首先必須確定源和目標(biāo)范圍是否以及如何重疊,即使數(shù)據(jù)指針遞減功能不可用,也會(huì)執(zhí)行該任務(wù)。當(dāng)檢測(cè)到有潛在問題的源/目標(biāo)緩沖區(qū)重疊時(shí),數(shù)據(jù)指針將放置在相應(yīng)源/目標(biāo)副本范圍的末尾,并將 IDx 位配置為啟用數(shù)據(jù)指針遞減模式。下面提供了解決方案 #2 的示例代碼。請(qǐng)注意,DPTR 切換(“INC DPS”)和遞增/遞減(“INC DPTR”)功能包含在代碼中,僅用于理解,如果設(shè)置了相應(yīng)的自動(dòng)切換和/或自動(dòng)遞增/遞減位,則可以將其刪除。
審核編輯:郭婷
-
微控制器
+關(guān)注
關(guān)注
48文章
7559瀏覽量
151480 -
Maxim
+關(guān)注
關(guān)注
8文章
859瀏覽量
87223 -
存儲(chǔ)器
+關(guān)注
關(guān)注
38文章
7493瀏覽量
163876
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論