嵌入式C語言--Pragma Section與Map文件

嵌入式C語言–Pragma Section與Map文件

嵌入式C語言--Pragma Section與Map文件

  • 嵌入式C語言--Pragma Section與Map文件
    • 一. Pragma修飾符
    • 二. Map文件
      • 1)什么是map文件
      • 2)map文件的構成
      • 3)常用的段映射地址
      • 4)map文件生成
    • 三. Section修飾符
      • 1)定義
      • 2)作用

一. Pragma修飾符

#pragma命令的作用: 是設定編譯器的狀態或者是指示編譯器完成一些特定的動作
它是一個預編譯指令,它的格式: #pragma 參數
#pragma once保證頭文件被編譯一次,
#pragma hdrstop表示預編譯頭文件到此為止,后面的頭文件不進行預編譯
#pragma resource “.dfm“ 表示把.dfm文件中的資源加入工程.
#pragma warning(disable:4507) 不顯示4507警告信息.
#pragma warning(once:4385) : 4385號警告信息僅報告一次;
#pragma warning(error:164) : 把164號警告信息作為一個錯誤
#pragma pack(n) 從這開始對后面的結構成員進行對齊,既如果結構成員1的大小<n則將成員1擴大到n個大小;  
如果成員1的大小>n則使用成員1的大小.
#pragma comment(lib, “aaa.lib”)添加鏈接庫
#pragma warning( push ) : 保存所有警告信息的現有的警告狀態

二. Map文件

1)什么是map文件

map文件是軟件編譯后產生的有關所有程序、數據及IO空間的一種映射文件。
通過map文件可以知道函數大小,入口地址等一些重要信息。
Map文件可以理解成為它就是程序的地圖。

2)map文件的構成

map文件大概分為文件頭、內存配置、段映射、全局符號四部分。
段映射部分與cmd文件中的SECTION指令關聯,在該部分程序中所有的段實際映射的起始地址與實際長度均有詳細說明。可以具體到程序中PROGMA指定的段和各個單獨文件產生的obj文件。

3)常用的段映射地址

Section放置位置說明
RO-data位于FLASH中指除了內聯數據(inline data)之外的常量數據
RW-data位于RAM中指可讀寫(RW)、已初始化的變量數據
Rozdata位于RAM中指未初始化(ZI)的變量數據

4)map文件生成

編譯后產生,在編譯完生成mot文件的同時,生成一個同名的map文件。
在這里插入圖片描述

三. Section修飾符

1)定義

使用section關鍵字可以將我們指定的結構體或變量放入到我們自定義的輸入段中
同時函數也可以放到我們自定義的輸入段當中。

2)作用

對代碼的安全校驗、擴展移植都會有很好的效果。
小型項目、獨立開發看不出效果,但對復雜的多人合作的項目,合適的關鍵字對代碼的穩定性和架構是錦上添花的。

將函數放入到my_fun這個段當中。
將變量aaa放入到my_val這個段當中。

int __attribute__((section("my_val"))) aaa; 
int __attribute__((section("my_fun"))) test1(int a,int b) 
{ 
return (a+b); 
}

不同編譯器對section屬性的定義略有差異,但效果相同、在這里可以了解一下。

#if defined(__CC_ARM) || defined(__CLANG_ARM)      		 /* ARM Compiler */
#define SECTION(x)    __attribute__((section(x)))
#elif defined (__IAR_SYSTEMS_ICC__)                     		/* for IAR Compiler */
#define SECTION(x)     @ x
#elif defined (__GNUC__) 					/* GNU GCC Compiler */ 
#define SECTION(x) __attribute__((section(x)))
???

在map當中的Section。
在這里插入圖片描述
在這里插入圖片描述

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

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

相關文章

HAL_UART_IRQHandler(UART_HandleTypeDef *huart)分析

//接收沒錯誤&#xff1a;執行UART_Receive_IT(huart) //接收有錯誤&#xff1a;執行UART_Receive_IT(huart)、HAL_UART_ErrorCallback(huart) void HAL_UART_IRQHandler(UART_HandleTypeDef *huart) {uint32_t isrflags READ_REG(huart->Instance->SR);uint32_t cr1…

java項目部署腳本

一、java項目部署腳本示例 在Java項目中&#xff0c;部署腳本通常依賴于項目的構建工具&#xff08;如Maven或Gradle&#xff09;以及部署環境&#xff08;如Docker、Tomcat、Kubernetes等&#xff09;。以下是一個基于Maven和Shell腳本的Java項目部署示例&#xff0c;假設我們…

8*8LED點陣點亮一個點

#include<reg51.h> typedef unsigned int u16; //對系統默認數據進行重定義 typedef unsigned char u8; //定義74HC595控制管腳 sbit SRCLKP3^6; //移位寄存器時鐘輸入 sbit RCLKP3^5; //存儲寄存器時鐘輸入 sbit SERP3^4; //串…

SpaceX: 太空火箭自主精準著陸

本文是根據Lars Blackmore在16年的一篇公開論文翻譯而來&#xff0c;雖然有些早而且是科普文章&#xff0c;但是可以初見一些SpaceX火箭著陸的細節&#xff0c;后面我會對spaceX landing control 技術主管MIT博士期間研究火箭控制算法的論文進行講解&#xff0c;敬請期待。 Lar…

Linux系統常用命令

Linux 系統常用命令 1、文件操作2、目錄操作 1、文件操作 創建文件&#xff1a; touch 文件名 創建文件并編輯&#xff1a;vim 文件名 查看文件全部內容&#xff1a;cat 文件名 帶行號查看文件內容&#xff1a; cat -n file 查看文件內容并監視內容更新&#xff1a; 以翻頁形…

【電機】步進電機相關指標

一 靜態指標&#xff1a; 相數&#xff1a;線圈的組數&#xff0c;兩相步進電機步距角一般為 1.8&#xff0c;三相的步進電機步距角為 1.2&#xff0c;相數越多步距角越小。 步距角&#xff1a;一個脈沖信號所對應的電機轉動的角度&#xff0c;這個步距角他不一定是電機實際工…

OpenEuler華為歐拉系統安裝—從零開始,小白也能學會

介紹 openEuler&#xff08;歐拉&#xff09;是一款開源操作系統。 當前openEuler內核源于Linux&#xff0c;支持鯤鵬及其它多種處理器&#xff0c; 能夠充分釋放計算芯片的潛能&#xff0c;是由全球開源貢獻者構建的高效、 穩定、安全的開源操作系統&#xff0c;適用于數據庫…

JVM運行數據區-Java堆

Java堆 堆區&#xff08;Heap區&#xff09;是JVM運行時數據區占用內存最大的一塊區域&#xff0c;每一個JVM進程只存在一個堆區&#xff0c;它在JVM啟動時被創建&#xff0c;JVM規范中規定堆區可以是物理上不連續的內存&#xff0c;但必須是邏輯上連續的內存。 1、堆區是線程…

Java面試題-基礎

Java面試題-基礎 1、Java語言有哪些特點&#xff1f;2、面向對象和面向過程的區別是什么&#xff1f;3、說說標識符的命名規則&#xff1f;4、說說Java八種基本數據類型的大小以及他們的封裝類&#xff1f;5、instanceof關鍵字有什么作用&#xff1f;6、自動裝箱與自動拆箱是什…

「網絡編程」基于 UDP 協議實現回顯服務器

&#x1f387;個人主頁&#xff1a;Ice_Sugar_7 &#x1f387;所屬專欄&#xff1a;計網 &#x1f387;歡迎點贊收藏加關注哦&#xff01; 實現回顯服務器 &#x1f349;socket api&#x1f349;回顯服務器&#x1f34c;實現&#x1f95d;服務器&#x1f95d;客戶端 &#x1f3…

純血鴻蒙實戰開發—如何添加頂部tab頁面

1.Tabs組件 Tabs組件的頁面組成包含兩個部分&#xff0c;分別是TabContent和TabBar。TabContent是內容頁&#xff0c;TabBar是導航頁簽欄. 根據不同的導航類型&#xff0c;布局會有區別&#xff0c;可以分為底部導航、頂部導航、側邊導航&#xff0c;其導航欄分別位于底部、頂…

react基礎學習 JSX

JSX的測試網站 Babel Babel 可以測試代碼的效果 JSX實現map列表 注意 key不一樣&#xff08;使用遍歷的時候&#xff09; 簡單條件渲染 復雜條件渲染 綁定事件 function App() {const colorse (e)>{console.log("測試點擊",e);}const colorse1 (name)>{…

代碼隨想錄訓練營第六十天 | 84.柱狀圖中最大的矩形

84.柱狀圖中最大的矩形 題目鏈接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 文檔講解&#xff1a;代碼隨想錄 視頻講解&#xff1a;單調棧&#xff0c;又一次經典來襲&#xff01; LeetCode&#xff1a;84.柱狀圖中最大的矩形_嗶哩嗶哩_bilibili 狀態&#xff1a;未…

地理信息科學中的大數據挑戰

在信息化爆炸的時代&#xff0c;地理信息科學&#xff08;GIScience&#xff09;正經歷著前所未有的變革&#xff0c;其中&#xff0c;地理空間大數據的涌現為科學研究與應用帶來了前所未有的機遇與挑戰。作為地理信息與遙感領域的探索者&#xff0c;本文旨在深入剖析地理空間大…

揭秘HubSpot集客營銷:如何吸引并轉化全球潛在客戶

隨著全球數字化浪潮的推進&#xff0c;企業出海已經成為許多公司擴大市場、增加品牌曝光度的重要戰略。HubSpot集客營銷作為一種以客戶為中心、數據驅動的營銷策略&#xff0c;為企業在海外市場的成功提供了強有力的支持。作為HubSpot亞太地區的合作伙伴&#xff0c;NetFarmer將…

[AIGC] 自定義Spring Boot中BigDecimal的序列化方式

在很多場景下&#xff0c;我們需要對BigDecimal類型的數據進行特殊處理&#xff0c;比如保留三位小數。Spring Boot使用Jackson作為默認的JSON序列化工具&#xff0c;我們可以通過自定義Jackson的序列化器&#xff08;Serializer&#xff09;來實現&#xff0c;下面將詳細介紹實…

力扣2730.找到最長的半重復子字符串

力扣2730.找到最長的半重復子字符串 找到相鄰的相同字母后same 再雙指針找到前一組相同字母位置 class Solution {public:int longestSemiRepetitiveSubstring(string s) {int res1,n s.size(),same0;for(int i1,j0;i<n;i){if(s[i] s[i-1] && same > 1)for…

godot的安裝和使用 1

今天是第一節&#xff0c;因此呢先做godot的安裝&#xff0c;其實很簡單 godot官網&#xff1a;https://godotengine.org/ 進入官網&#xff0c; 安裝好之后呢&#xff0c;會有兩個文件 打開第一個就是可視化界面的&#xff0c;進入后是這個樣子 說明安裝成功了

【ArcGIS微課1000例】0115:字段數據類型案例詳解

文章目錄 一、ArcGIS數據類型概述二、案例1. 數字2. 文本3. 日期4. BLOB5. 對象標識符6. 全局標識符一、ArcGIS數據類型概述 創建要素類和表時,需要為各字段選擇數據類型。可用的類型包括多種數字類型、文本類型、日期類型、二進制大對象 (BLOB) 或全局唯一標識符 (GUID)。選…

python高級面試題

1. Python 中的 GIL (Global Interpreter Lock) 是什么? 解答: Python 的 GIL 是全局解釋器鎖,限制了在 CPython 解釋器中同時執行多個線程。GIL 確保在任意時刻只有一個線程執行 Python 字節碼。這是為了保護訪問 Python 對象的內部數據結構免受并發問題的影響。盡管 GIL 會…