Передача указателя на функцию обратного вызова - PullRequest
0 голосов
/ 07 июня 2018

Я хочу передать массив в функцию обратного вызова, но я всегда получаю ноль (иногда символ мусора) возврата call_print().Мой код находится в двух отдельных файлах ниже, и мне нравится держать его таким.

file1.c

#include <myheader.h>

uint8_t dummy[6] = {0x30, 0x30, 0x31, 0x31, 0x32, 0x32};

void dcallback(uint8_t **outputBuff)

int main(void)
{
    slave(dcallback);
}

void dcallback(uint8_t **outputBuff)
{ 
    *outputBuff = dummy;
}

file2.c

#include <myheader.h>

static void (*data_callback)(uint8_t **output_buffer);

uint8_t **output_buffer;

void slave(void (*data_callback_in)(uint8_t **output_buffer))
{
    int i;

    data_callback = data_callback_in;
    data_callback(output_buffer);

    for(i=0 ; i<6 ; i++)
    {
        call_print( **(output_buffer + i));
    }
}

Когда я изменяю код, как вы можете видеть ниже, я получаю '0 1 2 3 4 5».Это кажется правильным результатом, но это не то, что я хочу.Я хочу передать массив, чтобы я мог легко указать указатель на другой массив.Я думал, что допустил ошибку при работе с указателем.

file1.c

#include <myheader.h>

uint8_t dummy[6] = {0x30, 0x30, 0x31, 0x31, 0x32, 0x32};

void dcallback(uint8_t *outputBuff)

int main(void)
{
    slave(dcallback);
}

void dcallback(uint8_t *outputBuff)
{ 
    int x;

    for(x=0 ; x<6 ; x++)
    {
        *outputBuff = x;
    }
}

file2.c

#include <myheader.h>

static void (*data_callback)(uint8_t *output_buffer);

uint8_t output_buffer[6];

void slave(void (*data_callback_in)(uint8_t *output_buffer))
{
    int i;

    data_callback = data_callback_in;
    data_callback(output_buffer);

    for(i=0 ; i<6 ; i++)
    {
        call_print(output_buffer[i]);
    }
}

Кто-то, не могли бы вы определить, где я допустил ошибку?Как правильно передать массив 'dummy'?

Спасибо, раньше.

1 Ответ

0 голосов
/ 07 июня 2018

Попробуйте сделать uint8_t **output_buffer; в качестве единственного указателя uint8_t *output_buffer;

, и при вызове обратного вызова из подчиненного метода вам нужно вызвать, как показано ниже.

data_callback(&output_buffer);

Вот полный код.

#include<stdio.h>
#include<stdint.h>

uint8_t dummy[6] = {0x30, 0x30, 0x31, 0x31, 0x32, 0x32};

static void (*data_callback)(uint8_t **output_buffer);

uint8_t *output_buffer;
void dcallback(uint8_t **outputBuff);

int main(void)
{
    slave(dcallback);
}

void dcallback(uint8_t **outputBuff)
{
    *outputBuff = dummy;
}



void slave(void (*data_callback_in)(uint8_t **output_buffer))
{
    int i;

    data_callback = data_callback_in;
    data_callback(&output_buffer);

    for(i=0 ; i<6 ; i++)
    {
        printf("%d\n", *(output_buffer + i));
    }
}
...