gpt4 book ai didi

c - 树莓派的 Kaa C 应用程序

转载 作者:行者123 更新时间:2023-11-30 16:50:50 25 4
gpt4 key购买 nike

我正在尝试在我的树莓派上构建一个C应用程序以将日志发送到kaa服务器,我正在遵循官方网站上的C文档。在使用 java 之前我已经成功地做到了这一点,但现在我尝试用 C 来做同样的应用程序。这是我的代码

#include <stdio.h>
#include <stdlib.h>
#include <kaa/kaa.h>
#include <kaa/platform/kaa_client.h>
#include <kaa/kaa_error.h>
#include <extensions/logging/kaa_logging.h>
#include <kaa/platform-impl/common/ext_log_upload_strategies.h>

#define LOG_UPLOAD_THRESHOLD 5

typedef struct {
kaa_client_t *kaa_client;
kaa_string_t * uuid;
kaa_string_t * proximity;
int32_t major;
int32_t minor;
int32_t measured_power;
int32_t rssi;
double accuracy;
} log_context;

static void sendLog(void *context)
{
if (context == NULL) {
return;
}

log_context * log_details_context = context;

kaa_logging_beacon_t *log_record = kaa_logging_beacon_create();

if (!log_record) {
printf("Failed to create log record\r\n");
kaa_client_stop(log_details_context->kaa_client);
return;
}

log_record->uuid = log_details_context->uuid;
log_record->major = log_details_context->major;
log_record->minor = log_details_context->minor;
log_record->measured_power = log_details_context->measured_power;
log_record->rssi = log_details_context->rssi;
log_record->accuracy = log_details_context->accuracy;
log_record->proximity = log_details_context->proximity;

kaa_error_t error = kaa_logging_add_record(
kaa_client_get_context(log_details_context->kaa_client)->log_collector,
log_record, NULL);

if (error) {
printf("Failed to add log record, error code %d\r\n");
kaa_client_stop(log_details_context->kaa_client);
return;
}

// log_record->destroy(log_record);

kaa_client_stop(log_details_context->kaa_client);
}

int main(int argc, char **argv)
{
double accuracy;
kaa_string_t * uuid;
kaa_string_t * proximity;
int32_t major, minor, measured_power, rssi;

if (argc != 8) {
printf("Number of arguments are not right");
return EXIT_FAILURE;
}

uuid = argv[1];
if (sscanf (argv[2], "%i", &major) != 1) {
printf("Major is not an integer");
return EXIT_FAILURE;
}

if (sscanf (argv[3], "%i", &minor) != 1) {
printf("Minor is not an integer");
return EXIT_FAILURE;
}

if (sscanf (argv[4], "%i", &measured_power) != 1) {
printf("Measured power is not an integer");
return EXIT_FAILURE;
}

if (sscanf (argv[5], "%i", &rssi) != 1) {
printf("RSSI is not an integer");
return EXIT_FAILURE;
}

if (sscanf (argv[6], "%lf", &accuracy) != 1) {
printf("Accuracy is not a double");
return EXIT_FAILURE;
}

proximity = argv[7];
/*
printf("UUID = %s\n", uuid);
printf("major = %d\n", major);
printf("minor = %d\n", minor);
printf("measured power = %d\n", measured_power);
printf("RSSI = %d\n", rssi);
printf("accuracy = %lf\n", accuracy);
printf("proximity = %s\n", proximity);
*/


/**
* Initialize Kaa client.
*/
kaa_client_t *kaa_client = NULL;
kaa_error_t error = kaa_client_create(&kaa_client, NULL);

if (error) {
printf("Failed to create Kaa client\r\n", error);
return EXIT_FAILURE;
}

log_context log_details_context;
log_details_context.kaa_client = kaa_client;
log_details_context.uuid = uuid;
log_details_context.major = major;
log_details_context.minor = minor;
log_details_context.measured_power = measured_power;
log_details_context.rssi = rssi;
log_details_context.proximity = proximity;
log_details_context.accuracy = accuracy;

void *log_upload_strategy_context = NULL;
error = ext_log_upload_strategy_create(kaa_client_get_context(kaa_client),
&log_upload_strategy_context, KAA_LOG_UPLOAD_VOLUME_STRATEGY);

if (error) {
printf("Failed to create log upload strategy, error code %d\r\n", error);
return EXIT_FAILURE;
}

error = ext_log_upload_strategy_set_threshold_count(log_upload_strategy_context,
LOG_UPLOAD_THRESHOLD);

if (error) {
printf("Failed to set threshold log record count, error code %d\r\n", error);
return EXIT_FAILURE;
}

error = kaa_logging_set_strategy(kaa_client_get_context(kaa_client)->log_collector,
log_upload_strategy_context);

if (error) {
printf("Failed to set log upload strategy, error code %d\r\n", error);
return EXIT_FAILURE;
}

/**
* Start Kaa client main loop.
*/
error = kaa_client_start(kaa_client, sendLog,
&log_details_context, 0);

if (error) {
printf("Failed to start Kaa client, error code %d\r\n", error);
return EXIT_FAILURE;
}


/**
* Destroy Kaa client.
*/
kaa_client_destroy(kaa_client);

return EXIT_SUCCESS;
}

我在控制台上得到以下输出:

2017/02/05 0:24:47 [INFO] [kaa.c:149] (0) - Kaa SDK version 0.10.0, commit hash

2017/02/05 0:24:47 [DEBUG] [kaa_logging.c:383] (0) - Initialized log collector with log storage {0x2037c40}, log upload strategy {0x2037c78}

2017/02/05 0:24:47 [INFO] [kaa_client.c:471] (0) - Log collector init completed

2017/02/05 0:24:47 [INFO] [kaa_client.c:155] (0) - Kaa client created

2017/02/05 0:24:47 [INFO] [kaa_client.c:295] (0) - Starting Kaa client...

Segmentation fault (core dumped)

这是我从 gdb 获得的调试信息

Starting program: /home/delvebyte/projects/beacon-scanner-pi/kaa-application-c/build/kaa-app UUID 0 1 -65 -72 0.873637383 near
2017/02/06 16:20:26 [INFO] [kaa.c:149] (0) - Kaa SDK version 0.10.0, commit hash
2017/02/06 16:20:26 [DEBUG] [kaa_logging.c:383] (0) - Initialized log collector with log storage {0x5555557a14d0}, log upload strategy {0x5555557a1ab0}
2017/02/06 16:20:26 [INFO] [kaa_client.c:471] (0) - Log collector init completed
2017/02/06 16:20:26 [INFO] [kaa_client.c:155] (0) - Kaa client created
2017/02/06 16:20:26 [INFO] [kaa_client.c:295] (0) - Starting Kaa client...

Program received signal SIGSEGV, Segmentation fault.
strlen () at ../sysdeps/x86_64/strlen.S:106
106 ../sysdeps/x86_64/strlen.S: No such file or directory.
(gdb) bt
#0 strlen () at ../sysdeps/x86_64/strlen.S:106
#1 0x00005555555658c2 in kaa_string_get_size (data=0x7fffffffe256)
at /home/delvebyte/projects/beacon-scanner-pi/kaa-application-c/kaa/src/kaa/kaa_common_schema.c:117
#2 0x000055555556220d in kaa_logging_beacon_get_size (data=0x5555557a1b70)
at /home/delvebyte/projects/beacon-scanner-pi/kaa-application-c/kaa/src/kaa/gen/kaa_logging_gen.c:63
#3 0x00005555555700f4 in kaa_logging_add_record (self=0x5555557a0bc0,
entry=0x5555557a1b70, log_info=0x0)
at /home/delvebyte/projects/beacon-scanner-pi/kaa-application-c/kaa/src/extensions/logging/kaa_logging.c:514
#4 0x0000555555556dcf in sendLog (context=0x7fffffffdd30)
at /home/delvebyte/projects/beacon-scanner-pi/kaa-application-c/src/kaa-application.c:46
#5 0x0000555555557b48 in kaa_client_start (kaa_client=0x5555557a0010,
external_process=0x555555556cf0 <sendLog>,
external_process_context=0x7fffffffdd30, max_delay=0)
at /home/delvebyte/projects/beacon-scanner-pi/kaa-application-c/kaa/src/kaa/platform-impl/posix/kaa_client.c:300
#6 0x0000555555557153 in main (argc=8, argv=0x7fffffffde68)
at /home/delvebyte/projects/beacon-scanner-pi/kaa-application-c/src/kaa-application.c:160
(gdb)

最佳答案

问题在于将 kaa_string_t * 视为 char * ,当我更好地了解 kaa 库时,我发现 kaa_string_t 是一个内部有 char * 的结构,所以我使用这个函数来初始化变量 kaa_string_move_create 并且是吗

关于c - 树莓派的 Kaa C 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42047412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com