我如何提前知道 nanopb 中的缓冲区大小是否足够?

how do i know in advance that the buffer size is enough in nanopb?

我正在尝试使用 nanopb,根据示例: https://github.com/nanopb/nanopb/blob/master/examples/simple/simple.c

缓冲区大小初始化为128:

uint8_t buffer[128];

我的问题是我怎么知道(提前)这个 128-length buffer 足以传送我的消息?如何在初始(或编码)之前决定一个合适的(足够但不会因过大而浪费太多)大小的缓冲区?

看起来是个菜鸟问题 :),但感谢您的快速建议。

如果可能,nanopb 在生成的 .pb.h 文件中添加一个定义,该文件具有消息的最大编码大小。在文件 examples/simple/simple.pb.h 中,您会发现:

/* Maximum encoded size of messages (where known) */
#define SimpleMessage_size                       11

并且可以指定uint8_t buffer[SimpleMessage_size];

仅当所有重复字段和字符串字段都已指定 (nanopb).max_count(nanopb).max_size 选项时,此定义才可用。

出于许多实际目的,您可以选择您估计足够大的缓冲区大小,并处理错误情况。也可以使用 pb_get_encoded_size() 来计算编码大小并动态分配存储空间,但通常这在嵌入式应用程序中不是一个很好的解决方案。当总系统内存大小有限时,通常最好有一个可用于测试的恒定大小的缓冲区,而不是让可用的动态内存量在运行时变化。