娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年02月05日(星期三)

正在發生

2021年02月05日 | STM32 字節對齊 #pragma pack

發布者:落霞與孤鶩 來源: eefocus關鍵字:STM32  字節對齊  pragma  pack 手機看文章 掃描二維碼
隨時隨地手機看文章

1、對齊原則


min(sizeof(word ), 4) = 2,因此是 2 字節對齊,而不是我們認為的 4 字節對齊。


1)每個成員分別按自己的方式對齊,并能最小化長度;


2)復雜類型(如結構)的默認對齊方式是它最長的成員的對齊方式,這樣在成員是復雜類型時,可以最小化長度;


3)對齊后的結構體整體長度必須是成員中最大的對齊參數的整數倍,這樣在處理數組時可以保證每一項都邊界對齊。


對于數組,比如 char a[3]:


它的對齊方式和分別寫 3 個 char 是一樣的,也就是說它還是按 1 個字節對齊;


如果是 typedef char Array3[3]:


Array3 這種類型的對齊方式還是按 1 個字節對齊,而不是按它的長度;


不論類型是什么,對齊的邊界一定是 1,2,4,8,16,32,64.... 中的一個。


2、#pragma pack 作用


指定結構體、聯合以及類成員的對齊 packing alignment;


3、語法


#pragma pack ( [show] | [push | pop] [, identifier], n )

說明:


1) pack 提供數據聲明級別的控制,對定義不起作用;


2) 調用 pack 時不指定參數,n 將被設成默認值;


3) 一旦改變數據類型的 alignment,直接效果就是占用 memory 的減少,但是 performance 會下降;


語法具體分析:


1) show:可選參數


顯示當前packing aligment的字節數,以warning message的形式被顯示;


2) push:可選參數


將當前指定的packing alignment數值進行壓棧操作,這里的棧是the internal compiler stack,同時設置當前的packing alignment為n;如果n沒有指定,則將當前的packing alignment數值壓棧;


3) pop:可選參數


從internal compiler stack中刪除最頂端的record;如果沒有指定n,則當前棧頂record即為新的packing alignment數值;


如果指定了n,則n將成為新的packing aligment數值;如果指定了identifier,則internal compiler stack中的record都將被pop直到identifier被找到,然后pop出identitier,同時設置packing alignment數值為當前棧頂的record;


如果指定的identifier并不存在于internal compiler stack,則pop操作被忽略;


4) identifier:可選參數


當同push一起使用時,賦予當前被壓入棧中的record一個名稱;


當同pop一起使用時,從internal compiler stack中pop出所有的record直到identifier被pop出,如果identifier沒有被找到,則忽略pop操作;


5) n:可選參數


指定packing的數值,以字節為單位;


缺省數值是8,合法的數值分別是1、2、4、8、16。


取消字節對齊:


#pragma pack()    // 取消自定義字節對齊方式


4、重要規則


1)復雜類型中各個成員按照它們被聲明的順序在內存中順序存儲,第一個成員的地址和整個類型的地址相同;


2)每個成員分別對齊,即每個成員按自己的方式對齊,并最小化長度;規則就是每個成員按其類型的對齊參數(通常是這個類型的大小)和指定對齊參數中較小的一個對齊;


3)結構體、聯合體或者類的數據成員,第一個放在偏移為0的地方;


以后每個數據成員的對齊,按照#pragma pack指定的數值和這個數據成員自身長度兩個中比較小的那個進行;


也就是說,當#pragma pack指定的值等于或者超過所有數據成員長度的時候,這個指定值的大小將不產生任何效果;


4)復雜類型(如結構體)整體的對齊是按照結構體中長度最大的數據成員和#pragma pack指定值之間較小的那個值進行;


這樣當數據成員為復雜類型(如結構體)時,可以最小化長度;


5)復雜類型(如結構體)整體長度的計算必須取所用過的所有對齊參數的整數倍,不夠補空字節;


也就是取所用過的所有對齊參數中最大的那個值的整數倍,因為對齊參數都是2的n次方;這樣在處理數組時可以保證每一項都邊界對齊。


5、示例


強制對齊 #pragma pack:


#pragma pack(4)   // 按 4 字節對齊,但實際上由于結構體中單個成員的最大占用字節數為 2 字節,因此實際還是按 2 字節對齊

 

typedef struct

 

{

  // buf[1] 按 1 字節對齊,buf[2] 按 1 字節對齊,由于 buf[3] 的下一成員 word a 是按兩字節對齊

  // 因此 buf[3] 按 1 字節對齊后,后面只需補一空字節

  char buf[3];

  

  // #pragma pack(4),取小值為 2,按 2 字節對齊

  word a;

} kk;

 


refer:


https://www.cnblogs.com/King-Gentleman/p/5297355.html


關鍵字:STM32  字節對齊  pragma  pack 引用地址:STM32 字節對齊 #pragma pack

上一篇:STM32 內存分配詳解
下一篇:STM32 Flash 均衡保存算法

推薦閱讀

再過一個月,高通(Qualcomm)和博通(Broadcom)——移動通信領域最主要的技術和芯片貢獻者和全球半導體行業最為兇猛的并購操盤手之間的“決戰”時刻,就要到來。3月6日,高通將在位于美國圣迭戈總部的雅各布大廳舉行2018年度股東大會,會上將就是否接受博通提出的替換現有高通董事會成員和1300億美元的要約收購進行表決。博通不希望失手,而高通不能承受...
目前,我國快遞和外賣行業呈現高速度增長趨勢,并涌現出一大批優秀的企業,例如:阿里菜鳥、京東物流、餓了么、美團、蘇寧等。在中國人口紅利下降,人力成本飆升的風口下,機器人換人已是大勢所趨。在配送領域,有Segway Robotics、YOGO、深蘭、云跡、真機智能等公司,無人配送機器人的市場角逐戰早已打響。在2018年,多家配送機器人公司相繼獲得A輪融資...
“全平易近辦 ETC”,讓 ETC 成為 2019 年的流量“網紅”,也讓良多銀行報酬操持 ETC 卡絞盡了腦汁。 進入 2020 年后,29 個聯網省分的 487 個省界免費站打消,終究完成全國高速“一張網”運轉,但是,ETC 零碎卻因“槽點”浩繁備受存眷。很多車主反應,今朝 ETC 繳費存在免費明細難查、統一路段免費紛歧等亂象。ETC 免費幾次遭質疑2019 ...
2月4日,內蒙古發改委、工信廳發布關于調整部分行業電價政策和電力市場交易政策的通知,對部分行業電價政策和電力市場交易政策進行調整。通知指出,為嚴格落實國家和自治區進一步加強能耗總量和強度雙控的工作任務,按照國家和自治區有關文件精神,經自治區人民政府同意,對部分行業電價政策和電力市場交易政策進行調整。其中關于調整部分行業電力市場交易...

史海拾趣

問答坊 | AI 解惑

600MA低壓差LDO AP1735 AP6256

安崴提供低壓差600MA輸出電流的LDO,AP1735做到600MA/350MV, AP6256做到600MA/500MV 需要樣品請聯系13537795709 梁生,QQ 291426765 郵箱:LY158@TOM.COM …

查看全部問答∨

27倍自動聚焦的大炮筒,有沒有單獨的控制線?

27倍自動聚焦的大炮筒,有沒有單獨的控制線?…

查看全部問答∨

誰用過FreeScale的i.MX31,ADS1.2中,中斷搞不定啊!

我用FreeScale的i.MX31(ARM11)做嵌入式系統,在WinCE下能使用中斷,但是winCE初始化中斷的代碼是看不到的! 我在ADS1.2中做BootLoader,中斷調不出來!發生中斷時,沒有自動跳轉到中斷向量那里去。 1、CP15中VE(Bit24)置0, V( Bit13)置0,即中斷 ...…

查看全部問答∨

vxworks 添加104擴展板卡驅動

大家好,我需要把勝博PC104的兩塊擴展卡添加到系統中,一塊為ADT882,一塊為ADT900,其都有驅動,并且告訴了安裝過程,如下: adt900 安裝步驟 1)、把cdt900.o文件拷貝到$(WIND_BASE)/target/lib/objPENTIUMgnuvx目錄中; 2)、在您的VxWorksW ...…

查看全部問答∨

VISTA系統下安裝 Tornado2.0后,運行時總出現 gdb error,是什么原因?

  運行Tornado時,總彈出好幾個錯誤的對話框,標題為 gdb error!   內容為:Failed to register COM Server. Error code = ox8002801c   將對話框點掉之后 Tornado 就啟動起來了,運行還算正常,但每次一啟動就出 ...…

查看全部問答∨

用busybox做的文件系統為什么dev下沒有文件啊

包括什么ttyS0,console等等,什么都沒有 怎樣修改才能添加呢 另外etc文件夾下也什么文件都沒有,不知怎么一回事 內核是2.6的 謝謝…

查看全部問答∨

怎樣將BOOT1在系統復位后當作IO用?

                                 起因是我的板子上少了一條IO輸出線,說啥也找不到了,能通過跳線利用的只有BOOT1/PB2了,因為現在該腳通過一個電阻 ...…

查看全部問答∨

MSP FET430 UIF 仿真器 支持BSL嗎

大家好: 我想知道 TI 的 MSP-FET430UIF 仿真器能不能支持 兩線 BSL 仿真模式? 如果可以能不能把這個方法用于 430F21X1系列的MCU 上.…

查看全部問答∨

MSP430 最簡單的問題,型號問題

MSP430F5438 是屬于哪個系列的? 手頭有一個正宗的MSP-EXP430F5438 開發板 CPU上印字 X430F5438 在TI CCE軟件中,設備選項名列最后一個,即選擇 XMS430F5438(這是培訓手冊上指導的) 看了一下隨帶光盤資料: 1xx Users Guide,手冊封面寫著 ...…

查看全部問答∨

如何使單片機輸出頻率變大

現在我做一題目發現時鐘芯片只能產生20khz如何得到38khz希望大家幫忙。。 謝謝!!…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 汉源县| 西青区| 松阳县| 临洮县| 靖江市| 沂源县| 乌什县| 海晏县| 明星| 张家界市| 长宁区| 商南县| 凤凰县| 喀喇| 蒙自县| 奉节县| 青龙| 鄂尔多斯市| 玛纳斯县| 定远县| 安宁市| 柳林县| 枣庄市| 东港市| 隆化县| 五家渠市| 错那县| 宜城市| 辽宁省| 玛纳斯县| 长垣县| 安国市| 罗甸县| 成武县| 文水县| 西华县| 北安市| 肃北| 玉环县| 崇文区| 隆昌县|