현재 UART를 통해 내 PC와 ARM M4 마이크로 컨트롤러간에 데이터를 전송하고 있습니다. 각 메시지가 다음과 같이 보이는 고유 한 프로토콜을 정의했습니다.
START_CHAR LEN TYPE SEQ DATA CRC
START_CHAR 및 LEN 필드는 데이터가 끝나는 시점을 결정하는 데 도움이되며, 그 후에 데이터를 확인하기 위해 TYPE (상수 오프셋 3)을 찾습니다. 메시지 클래스에 압축을 풀기 위해 어떤 데이터가 왔습니까?생성 된 플랫 버퍼 헤더에 메타 데이터를 포함 할 수 있습니까?
이제 flatbuffers를 살펴보고 실제 메시지 안에 TYPE을 포함시키지 않으면 TYPE을 인코딩 할 수 없다는 점을 제외하고는 완벽 해 보입니다. 다음은 내가하려는 일입니다.
namespace FlatMessage;
uint8 const TYPE = 50; // does not compile
table String {
value:string;
}
root_type String;
나는 열거 형을 만들 수 있지만 지저분합니다. 고맙습니다!
[편집] 프로토콜을 END_CHAR
으로 바꿀 수 있다고 덧붙여 야하지만 기존의 이유로 TYPE
필드를 지원해야합니다.
글쎄 실제로, 나는 flatbuffer로 그것을 deserialize하는 방법을 알아 내기 위해 타입을 필요로한다고 생각합니다.
uint8_t *buf = builder.GetBufferPointer(); // I can do this with END_CHAR because I could get the buffer.
auto receive_string = GetString(buf); // But I wouldn't know what the type is. e.g. this could be GetCoolString(buf).
감사합니다. 나는 유니온 타입이 좋은 해결책이 될 것이라고 생각했지만, 그렇다면 모든 메시지 정의를 내 임베디드 프로세서에 포함시켜야 할 것이다. 나는 file_identifier로 이동할 것이다. 고맙습니다! – user2316667