I want to pass an array to a callback function, but I always get zero (sometimes garbage character) return of call_print()
.
My code are in two separate files below, and I like to keep it like this.
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));
}
}
When I modify the code as you can see below, I got '0 1 2 3 4 5'. This seems correct result, but this is not what I want. I want to pass an array, so that I can point the pointer to another array easily. I thought I made mistake working with pointer.
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]);
}
}
Someone, could you please spot where I made mistake? How should I properly pass 'dummy' array?
Thanks before.
Try making uint8_t **output_buffer;
as single pointer uint8_t *output_buffer;
and while calling the callback from slave method you need to call like below.
data_callback(&output_buffer);
Here is the full code.
#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));
}
}