嵌入式技术william hill官网
直播中

张敏

7年用户 1582经验值
私信 关注
[问答]

kawaii matt如何发送结构体数据呢?

各位好!
请教大家个问题:

如何利用kawaii mqtt中的函数

int mqtt_publish(mqtt_client_t* c, const char* topic_filter, mqtt_message_t* msg)发送struct数据?

struct rt_variable
{
rt_uint8_t id;
rt_int32_t value;
};
typedef struct rt_variable *rt_variable_t;
struct rt_upData
{
uint8_t fault_code;
uint8_t channel_no;
char batt_id[32];
uint8_t variables_num;
struct rt_variable *variables;
uint8_t warning_class;
uint8_t warning_no;
};
typedef struct rt_upData *rt_upData_t;
rt_upData_t upData1 = RT_NULL;
msg.payload = (void *)(&upData1);
msg.payloadlen = sizeof(struct rt_upData);

涉及到struct内存对齐原则,导致发送的数据不对,请教大家如何解决该问题?谢谢各位!

回帖(1)

王静

2023-2-8 11:23:30
你可以跟踪一下mqtt_publish函数的部分,看一看数据丢到网络层之前,到底是怎样的?kawaii-mqtt部分是直接操作的字节流,如果没有指定长度就用strlen;像你这样指定了,就用msg.payloadlen。
variables是个指针,原始数据从哪里来的?指向了哪里?先不去讨论sizeof(struct rt_upData),我直观上觉得variables部分不太对。先保证这部分没有啥问题,再讨论对齐的问题,缩小范围。
你使用debug,跟踪一下mqtt_publish函数部分,到MQTTSerialize_publish函数前后,你要发出的数据就很清晰了。或者,你在Broker部分抓包看看,再对应下位机的数据核查一下。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分