임베디드/임베디드 레시피

shadow, Bit operation

twoweeks-within 2025. 1. 14. 12:46

shadow ~= Backup

  > Register 중 Write 만 가능한 (Read X)것들을 전역변수에 backup

     > 언제든 그 값을 볼 수 있게

 

Register : Bit별로 설정이 가능한 Latch

>

Mask  : 내가 원하는 부분만 보겠다 

ex) 6번 bit를 보려면

if (reg_data & 0x20 ) 

   > 0x20 : Mask 

~= reg_data >>6 & 0x1 == reg_data & ( 1<<6)

+

한번에 2 bit 빼내는법

 reg_data >> 6 & 0x3 

   : bit 6,7, 을 빼오게됨

  1100000   >>6  :  0000011 & 11 

 

반대로 넣는법은 OR !

 

클리어 하는법

 다른 bit 는 모두 1 , 원하는 bit 를 0  한뒤에  &

reg_data & = ~(1<<3);

// ~(1<<3) : 3번째 bit : 0  > 11111011

기존 데이터 유지, 원하는 데이터는 초기화

 

XOR

reg_data ^= (1<<3)

3 번째 bit가 0> 1, 1>0

 

Data type : bit 단위로 관리

typedef struct
{
       int32    flag : 3;   /* flag 3 bit */
                   data_1 : 20 ;  /* data_1 : 20 bit */
                   data_2 : 9 ;   /* data_2 : 9 bit */
} REGISTER_SHADOW;
 

REGISTER_SHADOW R_0;  // 이름을 R_0 으로 설정
R_0.flag = 2;
R_0.data_1 = 16;
R_0.data_2 = 22;

 

>>

data_1 : 20 ) 20bit 짜리 공간(Filed) > 0000 0000 0000 0000 0000

여기에 R_0.data_1 = 16 을 집어넣음 >  0000 0000 0000 0001 0000

 

'임베디드 > 임베디드 레시피' 카테고리의 다른 글

Synchronous ,Asynchronous  (0) 2025.01.15
MACRO Technics  (0) 2025.01.14
Device Interface의 CS, address 이용 - LCD  (0) 2025.01.14
MCU의 외부통신, 컨트롤  (0) 2025.01.14
Memory Device Control  (0) 2025.01.13