有没有人试图在树莓派上一起使用bcm2835和pubnub posix c api?我能够让他们单独工作,但我一起有记忆问题。我正在使用bcm2835进行spi通信。这是我的代码:
这在main中被调用:
void inline setup() {
error = NO_ERROR;
run = 1;
spi_setup();
pb_setup();
}
当我首先调用spi_setup()然后调用pb_setup()时,spi_setup()完成正常,但是pb_setup()在pubnub_alloc()上被卡住了,但是当我以相反的顺序调用它们时,我立即得到一个段错误从我的main函数调用setup()。我知道这是某种内存问题,但不知道它可能是什么。我知道pubnub_alloc()为用于订阅或发布到通道的上下文动态分配内存。这可能是问题吗?
pb_setup:
void pb_setup() {
#ifdef DEBUG
printf("Starting pubnub setup\n");
#endif
sub_ctx = pubnub_alloc();
pub_ctx = pubnub_alloc();
if ((NULL == sub_ctx) && (NULL != pub_ctx)) {
pubnub_free(pub_ctx);
error = PUBNUB_INIT_ERROR;
return;
} else if ((NULL == pub_ctx) && (NULL != sub_ctx)) {
pubnub_free(sub_ctx);
error = PUBNUB_INIT_ERROR;
return;
} else if ((NULL == pub_ctx) && (NULL == sub_ctx)) {
error = PUBNUB_INIT_ERROR;
return;
}
pubnub_init(sub_ctx, PUBNUB_PUB_KEY, PUBNUB_SUB_KEY);
pubnub_init(pub_ctx, PUBNUB_PUB_KEY, PUBNUB_SUB_KEY);
pthread_mutex_init(&pb_pubstat.mut, NULL);
pthread_mutex_init(&pb_substat.mut, NULL);
pthread_cond_init(&pb_pubstat.cond, NULL);
pthread_cond_init(&pb_substat.cond, NULL);
pubnub_register_callback(pub_ctx, pb_pub_callback, &pb_pubstat);
pubnub_register_callback(sub_ctx, pb_sub_callback, &pb_substat);
pubnub_set_transaction_timeout(pub_ctx, 2000);
pubnub_set_transaction_timeout(sub_ctx, 900000);
pb_subscribe();
#ifdef DEBUG
printf("pubnub setup successful");
#endif
}
spi_setup:
void spi_setup() {
#ifdef DEBUG
printf("Starting spi setup\n");
#endif
if (!bcm2835_init()) {
error = SPI_INIT_ERROR;
return;
}
if (!bcm2835_spi_begin()) {
error = SPI_INIT_ERROR;
return;
}
bcm2835_spi_setBitOrder(BCM2835_SPI_BIT_ORDER_MSBFIRST);
bcm2835_spi_setDataMode(BCM2835_SPI_MODE0);
bcm2835_spi_setClockDivider(BCM2835_SPI_CLOCK_DIVIDER_256);
#ifdef DEBUG
printf("spi setup successful\n");
#endif
}