我想将数组传递给回调函数,但我总是得到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]);
}
}
有人,你能否发现我弄错了? 我应该如何正确传递'虚拟'数组?
先谢谢。
答案 0 :(得分:0)
尝试制作uint8_t **output_buffer;
作为单个指针uint8_t *output_buffer;
并且在从slave方法调用回调时,您需要调用如下所示。
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));
}
}