转 参考 https://www.cnblogs.com/embedded-linux/p/6792359.html
遍历函数blobmsg_for_each_attr(pos, attr, rem) : pos 相当于指针 rem为偏移量 attr相当于data . attr 对应上图的 blob_attr.
遍历
static void read_modbus_iteam_init(void)
{
rem1_modbus = tb_modbus ? blobmsg_data_len(tb_modbus) : 0;
attr_modbus = (struct blob_attr *) (tb_modbus ? blobmsg_data(tb_modbus) : NULL);
//
#if 0
rem1_modbus = blobmsg_data_len(tb_modbus);
attr_modbus = (struct blob_attr *) blobmsg_data(tb_modbus);
#endif
}
static void read_modbus_iteam(void)
{
int ret=0;
while (rem1_modbus > 0 && (blob_pad_len(attr_modbus) <= rem1_modbus) && \
(blob_pad_len(attr_modbus) >= sizeof(struct blob_attr)))
{
blobmsg_for_each_attr(sattr_modbus, attr_modbus, rem2_plc)
{
if (check_modbus_iteam(sattr_modbus) == -1)
{
ret = 1;
break;
}
ret = 0;
}
rem1_modbus -= blob_pad_len(attr_modbus);
attr_modbus = blob_next(attr_modbus);
// if (ret == 0)
// printf("return:ret=%d\n,ret");
// return;
}
printf("sample_finish=true \n");
sample_finish = true;
return ;
}