es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Codificando cadenas de variables NanoPB

Tengo una cadena que se determina en tiempo de ejecución al leer desde EEPROM:

pre pb_ostream_t config_params_apn = pb_ostream_from_buffer(buffer_arr, buffer_arr_size);

read_or_load_defaults_buffer(APN_CONFIG_BASE,eeprom_buffer,&eeprom_buffer_length);

apn_msg.domain.arg = &eeprom_buffer;
apn_msg.domain.funcs.encode = &encode_string;
read_or_load_defaults_buffer(APN_UNAME_BASE,eeprom_buffer,&eeprom_buffer_length);
apn_msg.username.arg = “nuts”;
apn_msg.username.funcs.encode = &encode_string;

El problema es que “nuts” se está codificando, pero el valor de la variable en eeprom_buffer no. Necesito algunos consejos sobre por qué podría estar sucediendo esto, por favor?

Aquí está mi función encode_string:

bool encode_string(pb_ostream_t* stream, const pb_field_t* field, void* const* arg)

char* str = (char)(arg);

if (!pb_encode_tag_for_field(stream, field))
return false;

return pb_encode_string(stream, (uint8_t*)str, strlen(str));

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema es que la línea apn_msg.domain.arg = &eeprom_buffer; está asignando la dirección del puntero eeprom_buffer a apn_msg.domain.arg, en lugar de la dirección del propio buffer. Esto significa que la función encode_string está codificando la dirección del puntero, no el contenido del buffer.

    Para solucionar este problema, cambia apn_msg.domain.arg = &eeprom_buffer; por apn_msg.domain.arg = eeprom_buffer;, lo cual asigna la dirección del propio buffer a apn_msg.domain.arg. Esto permitirá que la función encode_string codifique correctamente el contenido del buffer en lugar de su dirección.

Comments are closed.