**:
聯合體在微控制器中的應用
微控制器中經常會遇見分離高低位元組的操作,比如進行計時中斷復位操作時往往會進行
(65535-200)/256,(65535-200)%256這樣的操作,而乙個除法消耗四個機器週期,取餘也需要進行一系列複雜的運算,如果在短時間內需要進行很多次這樣的運算無疑會給程式帶來巨大的負擔。其實進行這些操作的時候我們需要的僅僅是高低位元組的資料分離而已,這樣利用聯合體我們很容易降低這部分開銷。
**:
union chufatest;
test.n=65535-200; //進行完這句後就一切ok了,下面通過訪問test中數 組a的資料來取出高低位元組的資料
th1=test.a[0]; 中儲存的是高位資料,這是由於keil的特性(此處應該有誤,聯合體內資料是按位址對齊的。具體是高位資料還是低位資料要看平台的大小端模式,51是大端,stm32預設是小端),如果其他編譯器還請自測
tl1=test.a[1]; 中儲存了test.n的低位資料
!that』s good,僅僅用了一條減法指令就達到了除法、取餘的操作,在進行高頻率定時時尤為有用。
在C 中,如何使用聯合體?
對聯合體變數的引用,是通過對聯合體變數中各成員的引用來實現的。對成員的引用格式如下 格式 聯合體變數名 成員名 說明 由於聯合體變數的幾個成員共同擁有同一段儲存區域,聯合體變數的位址和其成員的位址都是相同的,因此聯合體變數的各個成員不可能同時存在。某一時刻只有乙個成員存在並發揮作用,其他成員就不存在...
c 中的聯合體Union
union介紹 共用體,也叫聯合體,在乙個 聯合 內可以定義多種不同的資料型別,乙個被說明為該 聯合 型別的變數中,允許裝入該 聯合 所定義的任何一種資料,這些資料共享同一段記憶體,以達到節省空間的目的。union變數所占用的記憶體長度等於最長的成員的記憶體長度。union與struct比較 先看乙...
聯合體加結構體的應用
因為最近設計到通訊協議。而通訊協議中為了減少資料量,常常用乙個位元組的八個位分別代表八種不同的狀態。這就涉及到位的操作和分解。過程可能比較麻煩而且如果位數多的表示可能不是很明了,比如我乙個位元組的前三個位元組表示狀態,後面的分別乙個位元組表示其他情況 所以這邊利用了聯合體和結構體的綜合應用。用乙個結...