簡體   English   中英

nanopb : 獲取重復子消息的大小

[英]nanopb : get the size of repeated submessages

對於一個項目,我正在嘗試解碼重復數量的結構,我必須將其填充到動態分配的數組中,但為了使其工作,我需要知道重復的子消息有多少元素,以便分配事先合適的尺寸。 我正在為重復的子消息使用可變大小(沒有上限),所以我不能使用max_size

但我似乎找不到任何方法來事先檢索子消息的數量。

那么,有人知道如何找出重復字段中子消息的數量嗎?

我能想到的唯一其他選擇是暫時使用鏈表來跟蹤所有信息,然后在解碼后將信息復制到數組中,但這似乎非常麻煩和骯臟。

Nanopb 本身可選地支持動態分配,它使用realloc()來增量擴展分配的數組。 要使用它,您將在 .proto 中定義[(nanopb).type = FT_POINTER] .proto並使用PB_ENABLE_MALLOC編譯器定義。

如果要預先計算repeated字段中的項目數,可以使用字段回調。 然后,您可以將回調替換為將項目存儲在數組中並再次解碼消息的不同回調。 理想情況下,您可以直接在回調中處理數據,而不是將其存儲到 RAM 中。

但是,如果這是一個內存受限的嵌入式系統(這是 nanopb 的主要目標),我建議只確定一個合理的最大值並將max_size設置為它。 這樣,如果你的內存用完了,它會在測試中立即顯現出來,因為總是分配了最大需要的數量。 在具有少量 RAM 的系統上,您不能假設動態分配會成功。 內存碎片等影響可能會導致分配失敗,具體取決於先前執行的分配順序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM