0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

數(shù)據(jù)指針遞減功能簡化了重疊內(nèi)存緩沖區(qū)的復制操作

星星科技指導員 ? 來源:ADI ? 作者:ADI ? 2023-06-13 16:33 ? 次閱讀

利用Maxim高速微控制器系列中的數(shù)據(jù)指針遞減功能,可以簡化存儲器管理。本應用筆記探討了該系列微控制器在DS80C400、DS5250、DS89C430和其他產(chǎn)品中使用MOVX操作。 示例代碼在執(zhí)行內(nèi)存?zhèn)鬏敳僮鲿r突出顯示 DPTR。

概述

任何微控制器的基本操作之一是能夠存儲和檢索數(shù)據(jù)到內(nèi)存/從內(nèi)存檢索數(shù)據(jù)。MOVX 操作為在 8051 架構(gòu)上執(zhí)行此操作提供了一個工具。應用通常需要微控制器在其MOVX地址空間內(nèi)復制和移動數(shù)據(jù)存儲器塊。當源地址和目標地址范圍不重疊時,此內(nèi)存?zhèn)鬏敳僮鞣浅:唵危吹x/寫循環(huán)。但是,當范圍重疊時,該過程需要一些智能來避免在傳輸原始數(shù)據(jù)之前覆蓋(損壞)原始數(shù)據(jù)。本應用筆記將提供兩種在源緩沖區(qū)和目標緩沖區(qū)之間傳輸數(shù)據(jù)(重疊)的可能解決方案,并解釋Dallas的數(shù)據(jù)指針遞減功能如何簡化解決方案。

重疊內(nèi)存問題

大多數(shù)通用內(nèi)存復制例程不能確定源復制范圍和目標復制范圍是否重疊。如果在執(zhí)行復制例程之前不進行此評估,復制到與原始源范圍重疊的預期目標范圍的字節(jié)可能會覆蓋和損壞原始數(shù)據(jù)。圖 1 給出了如何發(fā)生這種情況的簡單說明??梢钥闯?,目標地址范圍從地址 = 0104h 開始,這也恰好是原始源字節(jié)數(shù)組范圍內(nèi)的地址。如前所述,在這種情況下,標準 memcpy() 例程不會生成所需的目標數(shù)據(jù)數(shù)組。當必須為此類傳輸維護數(shù)據(jù)完整性時,通常使用 memmove() 操作來確保在復制到目標時不會覆蓋源數(shù)組中的字節(jié)。

wKgZomSIKeiAb0EBAAAsOUagSpY621.gif

圖1.問題:內(nèi)存副本重疊。

可能的解決方案

通過一些觀察,可以看到源數(shù)組(在復制之前)發(fā)生的覆蓋可以通過幾種方式避免:1) 確定重疊并首先傳輸源緩沖區(qū)中與所需目標緩沖區(qū)重疊的字節(jié),或 2) 確定重疊并以相反的順序?qū)⒆止?jié)從源緩沖區(qū)傳輸?shù)侥繕司彌_區(qū)。這兩種解決方案如圖 2 和圖 3 所示。請注意,相反方向的重疊(將源數(shù)組復制到內(nèi)存中較低的目標)對于按地址升序傳輸數(shù)據(jù)的標準復制循環(huán)沒有問題。

給定下面的兩個視覺對象(圖 2 和圖 3),人們還應該能夠看到解決方案 #1 在為多個復制操作計算、存儲和傳遞不同的源、目標和長度變量時遭受了額外的開銷,而第二個解決方案只能執(zhí)行此操作一次。

wKgZomSIMdKASOf3AABcysiuIug055.png

圖2.重疊內(nèi)存復制解決方案 #1。

wKgaomSIKeuAc2bgAAApC56uu3E450.gif

圖3.重疊內(nèi)存復制解決方案 #2。

達拉斯硬件簡化解決方案 #2

許多達拉斯微控制器產(chǎn)品(附錄 A 中提供的列表)為每個可用數(shù)據(jù)指針實現(xiàn)一個遞增/遞減 (IDx) 位,以指定“INC DPTR”指令是遞增還是遞減活動數(shù)據(jù)指針。使用數(shù)據(jù)指針遞減功能,解決方案 #2 特別容易在 Dallas 產(chǎn)品上實現(xiàn),允許線性傳輸并最大限度地減少執(zhí)行時間。

為了利用數(shù)據(jù)指針遞減功能,應用程序代碼首先必須確定源和目標范圍是否以及如何重疊,即使數(shù)據(jù)指針遞減功能不可用,也會執(zhí)行該任務。當檢測到有潛在問題的源/目標緩沖區(qū)重疊時,數(shù)據(jù)指針將放置在相應源/目標副本范圍的末尾,并將 IDx 位配置為啟用數(shù)據(jù)指針遞減模式。下面提供了解決方案 #2 的示例代碼。請注意,DPTR 切換(“INC DPS”)和遞增/遞減(“INC DPTR”)功能包含在代碼中,僅用于理解,如果設(shè)置了相應的自動切換和/或自動遞增/遞減位,則可以將其刪除。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 微控制器
    +關(guān)注

    關(guān)注

    48

    文章

    7459

    瀏覽量

    150861
  • 存儲器
    +關(guān)注

    關(guān)注

    38

    文章

    7435

    瀏覽量

    163526
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    2978

    瀏覽量

    73818
收藏 人收藏

    評論

    相關(guān)推薦

    緩沖區(qū)的解釋

    (FIFO,F(xiàn)irst In First Out)的,NI的數(shù)據(jù)采集卡應該是都有板載的緩沖區(qū),區(qū)別在于緩沖區(qū)的大小而已。然后當板載緩沖區(qū)中的數(shù)據(jù)
    發(fā)表于 04-07 15:56

    STM32進階之串口環(huán)形緩沖區(qū)實現(xiàn)

    兩個指針,一個指向列隊頭,一個指向列隊尾。指向列隊頭的指針(Head)是緩沖區(qū)可讀的數(shù)據(jù),指向列隊尾的指針(Tail)是
    發(fā)表于 06-08 14:03

    STM32串口環(huán)形緩沖區(qū)的實現(xiàn)

    一個數(shù)組,只不過有兩個指針,一個指向列隊頭,一個指向列隊尾。指向列隊頭的指針(Head)是緩沖區(qū)可讀的數(shù)據(jù),指向列隊尾的指針(Tail)是
    發(fā)表于 10-16 11:40

    什么是緩沖區(qū)功能

    嗨,大家好:我是FPGA設(shè)計的新手。什么是緩沖區(qū)功能。如果我沒有在應該使用它們的地方使用緩沖區(qū),我可能面臨什么樣的問題。以上來自于谷歌翻譯以下為原文hi guys: I'm a new
    發(fā)表于 01-24 09:44

    基于ARM和FPGA的環(huán)形緩沖區(qū)接口設(shè)計方案

    來設(shè)計的。在本方案中,F(xiàn)PGA存儲器空間包括兩個部分:寄存器空間和數(shù)據(jù)緩沖區(qū)空間。寄存器空間用于設(shè)置各種讀寫的參數(shù),包括緩沖區(qū)讀寫指針、緩沖區(qū)
    發(fā)表于 05-30 05:00

    CPU與GPU維護數(shù)據(jù)結(jié)構(gòu)來保證環(huán)形緩沖區(qū)的正確工作

    CPU 和 GPU 將各自維護一些數(shù)據(jù)結(jié)構(gòu)來保證環(huán)形緩沖區(qū)的正確工作。這些 數(shù)據(jù)結(jié)構(gòu)有緩沖區(qū)的基地址,緩沖區(qū)大小,寫
    的頭像 發(fā)表于 03-30 15:01 ?6413次閱讀
    CPU與GPU維護<b class='flag-5'>數(shù)據(jù)</b>結(jié)構(gòu)來保證環(huán)形<b class='flag-5'>緩沖區(qū)</b>的正確工作

    環(huán)形緩沖區(qū)的實現(xiàn)原理

    在通信程序中,經(jīng)常使用環(huán)形緩沖區(qū)作為數(shù)據(jù)結(jié)構(gòu)來存放通信中發(fā)送和接收的數(shù)據(jù)。環(huán)形緩沖區(qū)是一個先進先出的循環(huán)緩沖區(qū),可以向通信程序提供對
    的頭像 發(fā)表于 03-22 10:03 ?7479次閱讀
    環(huán)形<b class='flag-5'>緩沖區(qū)</b>的實現(xiàn)原理

    緩沖區(qū)是啥意思 STM32串口數(shù)據(jù)接收之環(huán)形緩沖區(qū)

    完成。 缺點: ①緩沖數(shù)據(jù)組數(shù)一定,且有多變量,代碼結(jié)構(gòu)不太清晰。 ②接收數(shù)據(jù)長度可能大于數(shù)組大小,也可能小于數(shù)組大小。不靈活,需要接收數(shù)據(jù)很長時容易出錯,且
    的頭像 發(fā)表于 07-22 15:33 ?1.1w次閱讀

    STM32串口數(shù)據(jù)接收 --環(huán)形緩沖區(qū)

    STM32串口數(shù)據(jù)接收 --環(huán)形緩沖區(qū)環(huán)形緩沖區(qū)簡介??在單片機中串口通信是我們使用最頻繁的,使用串口通信就會用到串口的數(shù)據(jù)接收與發(fā)送,環(huán)形緩沖區(qū)
    發(fā)表于 12-28 19:24 ?30次下載
    STM32串口<b class='flag-5'>數(shù)據(jù)</b>接收 --環(huán)形<b class='flag-5'>緩沖區(qū)</b>

    消除IoT上的緩沖區(qū)溢出漏洞

    黑客可以使用堆棧緩沖區(qū)溢出將可執(zhí)行文件替換為惡意代碼,從而允許他們利用堆內(nèi)存或調(diào)用堆棧本身等系統(tǒng)資源。例如,控制流劫持利用堆棧緩沖區(qū)溢出將代碼執(zhí)行重定向到正常操作中使用的位置以外的位置
    的頭像 發(fā)表于 10-12 15:25 ?873次閱讀
    消除IoT上的<b class='flag-5'>緩沖區(qū)</b>溢出漏洞

    消除物聯(lián)網(wǎng)上的緩沖區(qū)溢出漏洞

      黑客可以使用堆棧緩沖區(qū)溢出將可執(zhí)行文件替換為惡意代碼,從而使他們能夠利用堆內(nèi)存或調(diào)用堆棧本身等系統(tǒng)資源。例如,控制流劫持利用堆棧緩沖區(qū)溢出將代碼執(zhí)行重定向到正常操作中使用的位置以外
    的頭像 發(fā)表于 12-02 11:57 ?979次閱讀

    數(shù)據(jù)指針遞減功能簡化了重疊內(nèi)存緩沖區(qū)復制操作

    利用Maxim高速微控制器系列中的數(shù)據(jù)指針遞減功能,可以簡化存儲器管理。本應用筆記探討了該系列微控制器在DS80C400、DS5250、DS
    的頭像 發(fā)表于 02-20 09:27 ?448次閱讀
    <b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>指針</b><b class='flag-5'>遞減</b><b class='flag-5'>功能</b><b class='flag-5'>簡化了</b><b class='flag-5'>重疊</b><b class='flag-5'>內(nèi)存</b><b class='flag-5'>緩沖區(qū)</b>的<b class='flag-5'>復制</b><b class='flag-5'>操作</b>

    C++環(huán)形緩沖區(qū)設(shè)計與實現(xiàn)

    Buffer) 環(huán)形緩沖區(qū)(Circular Buffer),也被稱為循環(huán)緩沖區(qū)(Cyclic Buffer)或者環(huán)形隊列(Ring Buffer),是一種數(shù)據(jù)結(jié)構(gòu)類型,它在內(nèi)存中形
    的頭像 發(fā)表于 11-09 11:21 ?1789次閱讀
    C++環(huán)形<b class='flag-5'>緩沖區(qū)</b>設(shè)計與實現(xiàn)

    操作系統(tǒng)不同的緩沖區(qū)概念

    就來區(qū)分一下不同的緩沖區(qū)概念(主要針對類unix平臺)。 用戶進程和操作系統(tǒng)的關(guān)系,首先我用一張圖來解釋“用戶進程和操作系統(tǒng)的關(guān)系: 這是一個計算機系統(tǒng)運行時的簡化模型,我們把所有運行
    的頭像 發(fā)表于 11-10 10:38 ?1185次閱讀
    <b class='flag-5'>操作</b>系統(tǒng)不同的<b class='flag-5'>緩沖區(qū)</b>概念

    內(nèi)存緩沖區(qū)內(nèi)存的關(guān)系

    內(nèi)存緩沖區(qū)內(nèi)存之間的關(guān)系是計算機體系結(jié)構(gòu)中一個至關(guān)重要的方面,它們共同協(xié)作以提高數(shù)據(jù)處理的效率和系統(tǒng)的整體性能。
    的頭像 發(fā)表于 09-10 14:38 ?360次閱讀