ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 임베디드 시스템 프로그래밍 C언어 비트 연산자(bit operation) 쓰는 법 - 대표적이 사용 예 LED 제어
    정보통신에너지/소프트웨어 2012. 12. 13. 02:59


     

     

     

     

    임베디드 프로그래밍을 하다보면

     

    은근히 비트 오퍼레이션을 많이 씁니다.

     

    사실 좃나 많이 써요 ㅠㅠ

     

    그래서 참 짜증나고 머리 아픈데

     

    나중에 많이 쓰다보면 아예 다 외워져 가지고 편해지는 날이 올 것 같은데

     

    전 그래도 짜증나더라구요.

     

    ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

     

     

    어쨌든 하드웨어 제어할 때 비트 오퍼레이션을 굉장히 많이 씁니다.

     

    거의 대부분 비트 OR 이나 비트 AND 시키거나

     

    아니면 쉬프팅 시켜서 제어를 하곤 하죠

     

    하나의 예를 들어볼까요?

     

     

    보통 하드웨어가 구성될 때 여러가지 반도체 소자들에 의해서 논리회로가 구성이 됩니다.

     

    그리고 그 논리회로는 회로 설계도를 보면 파악할 수 있지요.

     

    어쨌든 그렇게 해서 LED 8개 짜리 제어가 가능한 8비트 보드가 있다고 칩시다.

     

    대부분 회로도 설계에 의해서

     

    그 8자리수는 2비트 8개로 표현이 가능합니다.

     

    즉 0000 0000 이나 1111 1111 이런 식으로 하드웨적으로 구성이 되어 있고

     

    여기에 임베디드 소프트웨어적으로 접근해서 LED를 껏다켰다 하는 것이죠.

     

    그래서 for문이나 루프를 돌려서 특정 조건의 변화에 따라서 원하는

     

    방식의 LED 컨트롤이 가능해집니다.

     

    바로 여기에 시간 관리 타임 컨트롤 개념이 들어가면

     

    LED 위치만 잘 맞추면 시계를 만들어볼 수도 있고 그런데

     

    그건 아주 기초중 개기초에 속하죠

     

    ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

     

     

    어쨌든 머랄까..

     

    모든 계산은 AND나 OR 그리고 쉬프팅으로 다 할 수가 있습니다.

     

    그리고 쉬프팅 개념이 몹시 중요한데

     

    보드의 특정 메모리에 접근을 하면

     

    바로 보드의 LED 상태를 읽어올 수가 있어요.

     

    그런다음 보드의 특정 메모리에 LED 값을 2진수 8자리로

     

    적당히 조합해서 집어넣어주면

     

    바로 보드의 LED를 제어할 수 있게 됩니다.

     

    그리고 그 보드의 특정 메모리 주소값은

     

    하드웨어 스펙 사양서에 다 적혀 있거나

     

    아니면 동봉된 하드웨어 펌웨어 들어있거나

     

    뭐 그렇게 되겠죠.

     

    암튼

     

    1000 0000

     

    요런 값이 메모리에서 읽혀진다면

     

    요건 첫번째 LED가 켜져있고 나머진 다 꺼져있다 칩니다.

     

    요 값을 16진수로 변환하면

     

    0x01 이 되겠죠.

     

    참고로 변수에는 16진수를 쓰는 것이 편해요 ㅋ

     

    이것을 한번 쉬프르시켜볼까요?

     

    만약 1000 0000의 변수명이 a라 치면

     

    b = a <<8

     

    요따위로 집어넣어주면

     

    0000 0001

     

    로 값이 변해서 첫번째 LED는 꺼지고 맨 마지막 LED가 켜지게 되는 거죠.

     

    주의할 점이 우리가 보는 방향이랑 실제 컴터에 입력되는 시프팅 방향이랑 정 반대에요

     

    그러니까 컴터 입장에서는 0000 0001 이

     

    10000000 이 되는 거죠.

     

    이게 존나 짱나요 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

     

    한 두 개면 모르는데 시프팅이 막 30~40개씩 있으면 진짜 돌아버립니다.

     

    ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

     

     

    머 어쨋든 저도 잘 몰라요

     

    전 귀차나서 대충대충 하는편이라 그냥 씁니다.

     

     

    어쩃든 C언어에서 임베디드 프로그래밍 하다보면

     

    비트 오러페이션 무진장 많이 쓰니까...

     

    엄청 짜증날 것이라는 것...

     

    그것만은 확실합니다...

     

    ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

     

     

     

     

     

    댓글