SW/C

이중 포인터 콜백함수

또난 2022. 11. 20. 16:24

다른 c파일의 파라메터 넘기기 위해 사용.

 

#include <stdio.h>
#include <stdint.h>
// ========= ex.c ==========
uint8_t buf[32] ={0x11,0x12, 0x33,};
void (*p_func)(uint8_t);
void porcess(uint16_t cmd,uint8_t data )
{
    if(cmd ==1 ) data += 1;
    else data -= 1;
    
    if(p_func != NULL) {  // 원래 함수에 추가적인 기능을 콜백함수로 등록
        p_func(data);
    }
}
void setCallback(void (*p_func_para)(uint8_t) )
{
    p_func = p_func_para;
}

void pp_test (uint8_t **pp_buf1, uint8_t **pp_buf2)  // 파라메터 전달하기 위해 이중포인인터 사용
{
    *pp_buf1 = &buf[0];
    *pp_buf2 = &buf[2];
}

//============= main.c ==========

extern void setCallback(void (*p_func_para)(uint8_t) );
extern void pp_test (uint8_t **pp_buf1, uint8_t **pp_buf2);
void dsp(uint8_t _data)
{
    printf("CB dsp %d\n",_data);
}

uint8_t *p_data1, *p_data2; 


int main()
{
    printf("Hello World\n");
    setCallback(dsp);
    porcess(0x01, 45);
    porcess(0x01, 0);
    pp_test(&p_data1, &p_data2);
    printf("pp test %x, %x \n",*p_data1, *p_data2);
}

 

Hello World
CB dsp 46
CB dsp 1
pp test 11, 33