gpt4 book ai didi

c++ - 未调用库中的 ESP32 函数

转载 作者:行者123 更新时间:2023-12-02 10:27:45 25 4
gpt4 key购买 nike

我在我的 ESP32 项目中导入了一个 lib,它最初是为 eclipse 设计的,并使用 PlatformIO 导入到我的代码中,将它放在 lib 下:
奇怪的行为,如果我激活这条线:

errn =  decode_dinExiDocument(&stream1, &exiDin1);
代码已编译并执行,但函数调用没有输出,即使是以下行:
Serial.println("dintest1");
在函数调用开始时验证方法是否已被调用。
如果我删除对 decode_dinExiDocument 的调用一切都正确打印出来。
我有点迷茫,因为我看不到任何调试方法。有任何想法吗?
#include <Arduino.h>

#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
#include "EXITypes.h"
#include "dinEXIDatatypes.h"
#include "dinEXIDatatypesEncoder.h"
#include "dinEXIDatatypesDecoder.h"
#define BUFFER_SIZE 256
uint8_t buffer1[BUFFER_SIZE];
uint8_t buffer2[BUFFER_SIZE];

static int din_test1(){

Serial.println("dintest1");
int errn = 0;

struct dinEXIDocument exiDin1;
struct dinEXIDocument exiDin2;

bitstream_t stream1;
bitstream_t stream2;
size_t pos1 = 0;
size_t pos2 = 0;

stream1.size = BUFFER_SIZE;
stream1.data = buffer1;
stream1.pos = &pos1;

stream2.size = BUFFER_SIZE;
stream2.data = buffer2;
stream2.pos = &pos2;

/* SetupSessionReq */
/* BMW: 80 9A 00 11 D0 20 00 03 C1 FC 30 00 43 F8 00 */
buffer1[0] = 0x80;
buffer1[1] = 0x9A;
buffer1[2] = 0x00;
buffer1[3] = 0x11;
buffer1[4] = 0xD0;
buffer1[5] = 0x20;
buffer1[6] = 0x00;
buffer1[7] = 0x03;
buffer1[8] = 0xC1;
buffer1[9] = 0xFC;
buffer1[10] = 0x30;
buffer1[11] = 0x00;
buffer1[12] = 0x43;
buffer1[13] = 0xF8;
buffer1[14] = 0x00;

//if i make this call method is not called and i get no output
errn = decode_dinExiDocument(&stream1, &exiDin1);

Serial.println(errn);
return errn;

}

void setup() {
// put your setup code here, to run once:

Serial.begin(115200);

}

void loop() {
// put your main code here, to run repeatedly:

printf("+++ Start simple DIN test +++\n");
int errn = din_test1();
printf("+++ Terminate simple DIN test with errn = %d +++\n\n", errn);
if(errn != 0) {
printf("\nDIN test error %d!\n", errn);

}

Serial.println("new loop");
delay(2000);
}
也不会调用打印“新循环”的行,但会尊重延迟。

最佳答案

不知道函数 decode_dinExiDocument(&stream1, &exiDin1) 的作用是不可能回答你的。
我看到函数来自https://github.com/mhei/OpenV2G并且该库目前处于 alpha 版本。我还注意到开发人员不太喜欢在他们的代码中添加注释。
首先,我强烈建议你看看这个链接:https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/error-handling.html
特别是,有一些函数调用可以从错误代码中获取字符串并将其重定向到串行端口。
正在发生的是一个 fatal error ,它会重置您的微 Controller 。您的函数是否有可能产生内存泄漏、堆栈溢出或它试图访问未初始化的指针?
库内部也有可能使用了一些操作系统特定的函数,这些函数试图分配过多的内存,或者试图访问 ESP32 上不存在的一些操作系统特定的代码?
你在哪里为你的结构调用了“init”代码?如果您查看此标题:https://github.com/mhei/OpenV2G/blob/master/src/din/dinEXIDatatypes.h你可以很容易地看到有一个 init_dinEXIDocument(struct dinEXIDocument* exiDoc);在使用它们之前调用函数来初始化你的结构。
作为旁注/个人意见,我永远不会愿意使用由带有 81 个未注释和未记录案例的巨大 switch 语句组成的函数。

关于c++ - 未调用库中的 ESP32 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63571041/

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