MCU/TIP / / 2022. 6. 30. 21:58

bitband 전달하여 함수에서 사용하기 ( 이중포인터 )

typedef uint32_t * const bitband_t;

bitband_t pinPowerLed  = BITBAND_PERIPH(&GPIOC->ODR, 15);
bitband_t pinDispLed  = BITBAND_PERIPH(&GPIOC->ODR, 14);

u32** led_ar[2] = {0, 0};

void led_init(u8 index, u32** led)
{
    if(index >= (sizeof(led_ar)/sizeof(u32)))		return;
    led_ar[index] = led;
}

void led_task(void)
{
    for(int i = 0; i < (sizeof(led_ar)/sizeof(u32)); i++)
    {
        if(led_ar)		
        {
     	   (**led_ar[i])^= 1;
        }
    }
}

void main(void)
{
    led_init(0, (u32**)&pinPowerLed);
    led_init(1, (u32**)&pinDispLed);
}

 

함수를 작성할때 중복 사용 가능한 구조로 만들어서 bitband를 전달할 경우가 있다 ( 버퍼 전달할 경우도 동일 )

LED에만 적용되는게 아니고 다른 출력, 또는 다른 입력을 사용할 수 있다.

또한 bitband를 배열로 만들어 빠르게 사용 가능하다.

 

이중 포인터라고 생각하면 된다.

bitbnad가 어차피 포인터이므로 포인터의 주소를 함수에 전달하고.

받은 주소를 포인트로 다시 만들고, 그 포인트에 할당한 곳에다가 값을 주거나 받아온다.

 

작업 편이 때문에 이런 식으로 많이 사용한다.

왜냐면 또 만들기 귀찮아서..

사업자 정보 표시
봄해(BOMHAI) | 이동현 | 경기도 수원시 장안구 상률로 32 103동 1301 | 사업자 등록번호 : 564-09-02316 | TEL : 010-2977-3322 | Mail : dylan@bomhai.com | 통신판매신고번호 : 2023-수원장안-0750호 | 사이버몰의 이용약관 바로가기
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유