IAR中如何而將定義的數組放在指定的位置

在keil中可以使用下面的方法將數組定義到指定的位置

uint8_t g_usart_rx_buf[USART_REC_LEN] __attribute__ ((at(0X20001000)));

但是這個方法在IAR中是用不了的,通過網上查找各種資料,發現了兩種可用的方法。我這里測試的單片機是stm32f103c8t6,其他單片機的操作方法是一樣的。

第一種方法
先用記事本打開stm32f103xb_flash.icf 這個文件
在這里插入圖片描述
里面的代碼如下

/*###ICF### Section handled by ICF editor, don't touch! ****/
/*-Editor annotation file-*/
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */
/*-Specials-*/
define symbol __ICFEDIT_intvec_start__ = 0x08000000;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__   = 0x08000000 ;
define symbol __ICFEDIT_region_ROM_end__     = 0x0801FFFF;
define symbol __ICFEDIT_region_RAM_start__   = 0x20000000;
define symbol __ICFEDIT_region_RAM_end__     = 0x20004FFF;
/*-Sizes-*/
define symbol __ICFEDIT_size_cstack__ = 0x400;
define symbol __ICFEDIT_size_heap__   = 0x200;
/**** End of ICF editor section. ###ICF###*/define memory mem with size = 4G;
define region ROM_region   = mem:[from __ICFEDIT_region_ROM_start__   to __ICFEDIT_region_ROM_end__];
define region RAM_region   = mem:[from __ICFEDIT_region_RAM_start__   to __ICFEDIT_region_RAM_end__];define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };
define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };initialize by copy { readwrite };
do not initialize  { section .noinit };place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };place in ROM_region   { readonly };
place in RAM_region   { readwrite,block CSTACK, block HEAP };

在這個文件里面添加下面兩行代碼

define region RAM_D1_region  = mem:[from 0x20003000 to 0x20004000];  
place in RAM_D1_region {section .RAM_D1}; 

添加完成之后如下
在這里插入圖片描述
注意添加的第一行代碼中內存地址的范圍要在RAM地址范圍之內,否則就會出錯。這個地址段的名稱 “RAM_D1_region” 和“RAM_D1”自己可以隨便取。添加完之后保持文件。然后在代碼中按照下面這種方式定義數組:

#pragma location = ".RAM_D1"   
uint8_t buf1[10]; /* 接收緩沖, 最大USART_REC_LEN個字節. */

第一行是指定數組定義的位置,第二行是自己定義的數組。
在這里插入圖片描述
下面運行代碼,在觀察窗口中查看數組。
在這里插入圖片描述
可以看到數組的起始地址為0x20003000,和剛才設置的一樣。

第二種方法
直接在代碼中設置數組位置

#define DATA_ADDR 0x20002000
__root  uint8_t buf2[12] @ (DATA_ADDR);   

使用宏定義指定數組位置,當然也可以不用宏定義,直接在數組后面寫地址。使用這種方法的話,就不需要修改 stm32f103xb_flash.icf 這個文件內容了,直接使用默認的內容就行。
在這里插入圖片描述

直接運行程序,觀察數組地址
在這里插入圖片描述
可以看到buf2數組的起始地址就從0x20002000 開始了。

這里要注意一個問題,如果使用第2種方法的時候,數組大小必須是4的倍數,否則編譯會報錯。
比如這里將數組大小設置為10
在這里插入圖片描述
這時候編譯就會報錯。
好了,這兩種方法就分享到這,如果后面發現了其他新的方法再補充。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/63467.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/63467.shtml
英文地址,請注明出處:http://en.pswp.cn/web/63467.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

共創共建!葡萄城 SpreadJS 完成 HarmonyOS NEXT 操作系統兼容認證

最新技術資源(建議收藏) https://www.grapecity.com.cn/resources/ 近日,華為“企業工作必備應用鴻蒙化論壇”在北京圓滿落幕,論壇匯聚了眾多行業精英和合作伙伴,聚焦討論企業數字化轉型與原生鴻蒙生態融合等話題。葡萄…

hpe服務器更新陣列卡firmware

背景 操作系統:RHEL7.8 hpe服務器經常出現硬盤斷開,陣列卡重啟問題,導致系統hang住。只能手動硬重啟。 I/O error,dev sda smartpqi 0000:5c:00:0: resettiong scsi 1:1:0:1 smartpqi 0000:5c:00:0: reset of scsi 1:1:0:1:…

websocket的心跳檢測和斷線重連

心跳檢測和斷線重連可以通過WebSocket的事件和屬性來實現。以下是一個簡單的JavaScript示例,使用WebSocket API實現心跳檢測和斷線重連的功能: let ws;function connectWebSocket() {ws new WebSocket(ws://your-websocket-server-url);ws.onopen fun…

ES6學習Symbol(五)

這里寫目錄標題 一、概述二、代碼 一、概述 ES6引入了一種新的原始數據類型Symbol,表示獨一無二的值。 它是 JavaScript 語言的第七種數據類型,前六種是: undefined 、 null 、布爾值(Boolean)、字符串(St…

Spark-Streaming容錯語義

一、背景 為了理解Spark Streaming提供的語義,我們先回顧西Spark RDD的基本容錯語義學。 RDD是一個不可變的、確定性可重新計算的分布式數據集。每個RDD都記住在容錯輸入數據集上用于創建它的確定性操作的沿襲。如果RDD的任何分區由于工作節點故障而丟失&#xff…

AmpliconSuite-pipeline

AmpliconSuite-pipeline: 多線程支持的端到端工具,用于從配對端全基因組測序數據分析局部拷貝數擴增(如ecDNA或BFB) AmpliconSuite-pipeline 是一個多線程支持的端到端工具,用于 AmpliconArchitect 和 AmpliconClassifier,以支持從配對端全基因組測序數據分析局部拷貝數擴…

QNX通過pfctl工具查看socket通信狀態

通過pfctl -si && pfctl -ss可以查看當前主機IP和外域IP之間的所有socket通信狀態,顯示的格式是 傳輸層協議 | 主機IP | 外域IP | 主機端狀態:外域狀態 ------------------------------------------------------------------------…

Windows安全中心(病毒和威脅防護)的注冊

文章目錄 Windows安全中心(病毒和威脅防護)的注冊1. 簡介2. WSC注冊初探3. WSC注冊原理分析4. 關于AMPPL5. 參考 Windows安全中心(病毒和威脅防護)的注冊 本文我們來分析一下Windows安全中心(Windows Security Center…

JSX和vue模版哪個更好?

JSX和Vue模板各有優缺點,選擇哪種取決于具體需求和個人偏好。? JSX的優點 ?靈活性?:JSX允許在JavaScript代碼中直接插入任意表達式,這使得它在處理復雜邏輯時更加靈活。例如,條件渲染和循環渲染可以通過JavaScript的標準語法…

[代碼隨想錄21回溯]組合問題,電話號碼的字母組合問題

前言 回溯的提出是解決循環問題,回溯的提出就是為了解決排列和組合問題,以及多層遍歷問題,因為如果遍歷的層數越多我們的效率就會越低,回溯加上剪枝能很好解決這個問題。 題目鏈接 77. 組合 - 力扣(LeetCode&#xff…

智能工廠的設計軟件 三種處理單元(NPU/GPU/CPU)及其在深度學習框架中的作用 之2

本文要點 分類學 利用NPU、GPU和CPU的分工協作,實現 一個信息系統架構中的靈活的模塊化框架,該框架使用一個類似元素周期表的分類法,將 該元素周期表 左邊的行矢(時間關系,由應用規格 約束) 、頂上的列簇…

幾款主流的超聲波流量計應用場景梳理

清水應用 這款 聲樂 在含有最少固體或曝氣(≤ 1-2%)的清潔水的情況下表現出色。該儀表融合了卓越的性能和經濟性,使其成為需要外夾式超聲波流量計的應用的理想選擇。它在市政水處理設施中特別有效,其精度和成本效益確保了最佳運行…

Flag 驗證器

Flag 驗證器使用教程 Flag 驗證器 是一種常用工具,用來驗證命令行參數或配置文件中的標志(flag)是否符合預期規則。這些工具可以幫助開發者確保傳入的參數滿足一定的條件,避免因參數錯誤而導致程序運行失敗。以下是對各個驗證器功…

二進制分析的新興趨勢:塑造安全的移動應用

在當今快速發展的數字世界中,保障移動應用的安全性變得尤為重要。隨著移動技術的廣泛應用,安全性需求也日益增強。二進制分析作為確保移動應用安全和合規性的重要手段,通過對已編譯的應用進行深入分析,能夠發現源代碼中難以察覺的…

Python:動態粒子愛心

預覽 代碼結構概述 這段代碼使用了 pygame 庫來創建一個動態的圖形窗口,繪制一個心形圖案,并在其中顯示閃爍的文本。代碼主要分為以下幾個部分: 初始化和設置心形曲線的計算粒子類的定義生成粒子文本設置主循環 1. 初始化和設置 import p…

React源碼02 - 基礎知識 React API 一覽

1. JSX到JavaScript的轉換 <div id"div" key"key"><span>1</span><span>2</span> </div>React.createElement("div", // 大寫開頭會當做原生dom標簽的字符串&#xff0c;而組件使用大寫開頭時&#xff0c;這…

使用DynadotAPI購買域名清倉列表中的過期域名

前言 Dynadot是通過ICANN認證的域名注冊商&#xff0c;自2002年成立以來&#xff0c;服務于全球108個國家和地區的客戶&#xff0c;為數以萬計的客戶提供簡潔&#xff0c;優惠&#xff0c;安全的域名注冊以及管理服務。 Dynadot平臺操作教程索引&#xff08;包括域名郵箱&…

js分頁功能

先聲明些全局變量方便我們在下面的代碼中使用 //一頁有多少條數據 let num 10; //頁碼 let k 0; //總頁數 let divide; // 用來判斷顯示哪幾頁的頁數 let page_num 0; // 聲明一個用于接數據的變量 let datas; // 聲明一個用于接數據的變量 let data; //一頁有多少條數據 l…

CMake Do‘s and Don‘ts (行為準則)

CMake Dos and Donts {行為準則} 1. General2. Modules3. ProjectsReferences Effective Modern CMake https://gist.github.com/mbinna/c61dbb39bca0e4fb7d1f73b0d66a4fd1 Do’s and Don’ts https://cliutils.gitlab.io/modern-cmake/chapters/intro/dodonot.html dos and …

驗證的分類及相關工具

目錄 1.驗證方法的分類1.1動態驗證1.2.靜態驗證 2.動態驗證及相關工具2.1.電路級仿真工具2.2.邏輯仿真工具 3.靜態驗證及相關工具3.1 形式驗證工具3.2 靜態時序分析工具 SOC設計中驗證包含以下幾個方面&#xff1a; 驗證原始描述的正確性驗證設計的邏輯功能是否符合設計規范的要…