精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

數據指針遞減功能簡化了重疊內存緩沖區的復制操作

星星科技指導員 ? 來源:ADI ? 作者:ADI ? 2023-02-20 09:27 ? 次閱讀

利用Maxim高速微控制器系列中的數據指針遞減功能,可以簡化存儲器管理。本應用筆記探討了該系列微控制器在DS80C400、DS5250、DS89C430和其他產品中使用MOVX操作。示例代碼在執行內存傳輸操作時突出顯示 DPTR。

概述

任何微控制器的基本操作之一是能夠存儲和檢索數據到內存/從內存檢索數據。MOVX 操作為在 8051 架構上執行此操作提供了一個工具。應用通常需要微控制器在其MOVX地址空間內復制和移動數據存儲器塊。當源地址和目標地址范圍不重疊時,此內存傳輸操作非常簡單,即迭代讀/寫循環。但是,當范圍重疊時,該過程需要一些智能來避免在傳輸原始數據之前覆蓋(損壞)原始數據。本應用筆記將提供兩種在源緩沖區和目標緩沖區之間傳輸數據(重疊)的可能解決方案,并解釋Dallas的數據指針遞減功能如何簡化解決方案。

重疊內存問題

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

pYYBAGPyzJeAYCPfAAAv0b2KhgU996.gif?imgver=1

圖1.問題:內存副本重疊。

可能的解決方案

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

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

pYYBAGPyzJqAa12aAAAzdK8MWKs171.gif?imgver=1

圖2.重疊內存復制解決方案 #1。

pYYBAGPyzJ2AMXODAAAs1AkUu4E644.gif?imgver=1

圖3.重疊內存復制解決方案 #2。

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

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

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

審核編輯:郭婷

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

    關注

    48

    文章

    7496

    瀏覽量

    151087
  • Maxim
    +關注

    關注

    8

    文章

    859

    瀏覽量

    87098
  • 存儲器
    +關注

    關注

    38

    文章

    7455

    瀏覽量

    163624
收藏 人收藏

    評論

    相關推薦

    緩沖區的解釋

    (FIFO,First In First Out)的,NI的數據采集卡應該是都有板載的緩沖區,區別在于緩沖區的大小而已。然后當板載緩沖區中的數據
    發表于 04-07 15:56

    STM32進階之串口環形緩沖區實現

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

    STM32串口環形緩沖區的實現

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

    什么是緩沖區功能

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

    基于ARM和FPGA的環形緩沖區接口設計方案

    來設計的。在本方案中,FPGA存儲器空間包括兩個部分:寄存器空間和數據緩沖區空間。寄存器空間用于設置各種讀寫的參數,包括緩沖區讀寫指針緩沖區
    發表于 05-30 05:00

    CPU與GPU維護數據結構來保證環形緩沖區的正確工作

    CPU 和 GPU 將各自維護一些數據結構來保證環形緩沖區的正確工作。這些 數據結構有緩沖區的基地址,緩沖區大小,寫
    的頭像 發表于 03-30 15:01 ?6429次閱讀
    CPU與GPU維護<b class='flag-5'>數據</b>結構來保證環形<b class='flag-5'>緩沖區</b>的正確工作

    環形緩沖區的實現原理

    在通信程序中,經常使用環形緩沖區作為數據結構來存放通信中發送和接收的數據。環形緩沖區是一個先進先出的循環緩沖區,可以向通信程序提供對
    的頭像 發表于 03-22 10:03 ?7498次閱讀
    環形<b class='flag-5'>緩沖區</b>的實現原理

    緩沖區是啥意思 STM32串口數據接收之環形緩沖區

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

    STM32串口數據接收 --環形緩沖區

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

    消除IoT上的緩沖區溢出漏洞

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

    消除物聯網上的緩沖區溢出漏洞

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

    數據指針遞減功能簡化了重疊內存緩沖區復制操作

    利用Maxim高速微控制器系列中的數據指針遞減功能,可以簡化存儲器管理。本應用筆記探討了該系列微控制器在DS80C400、DS5250、DS
    的頭像 發表于 06-13 16:33 ?443次閱讀
    <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'>重疊</b><b class='flag-5'>內存</b><b class='flag-5'>緩沖區</b>的<b class='flag-5'>復制</b><b class='flag-5'>操作</b>

    C++環形緩沖區設計與實現

    Buffer) 環形緩沖區(Circular Buffer),也被稱為循環緩沖區(Cyclic Buffer)或者環形隊列(Ring Buffer),是一種數據結構類型,它在內存中形
    的頭像 發表于 11-09 11:21 ?1874次閱讀
    C++環形<b class='flag-5'>緩沖區</b>設計與實現

    操作系統不同的緩沖區概念

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

    內存緩沖區內存的關系

    內存緩沖區內存之間的關系是計算機體系結構中一個至關重要的方面,它們共同協作以提高數據處理的效率和系統的整體性能。
    的頭像 發表于 09-10 14:38 ?444次閱讀