¿Por qué mi bloque personalizado entra dos veces en la función general_work() en GNU Radio?
Estoy creando un bloque personalizado llamado “Combinar” que recibe 20 bytes de datos del primer input. El valor del primer input especifica la cantidad de bytes que se leerán del segundo input, los cuales se escriben en el archivo de salida.
Cada vez que ejecuto el flujo de datos, la impresión muestra que el código entra dos veces en la función general de trabajo. En la primera ocasión lee los datos correctos, pero en la segunda ocasión lee valores falsos y escribe estos datos incorrectos en el sink de salida.
Estoy utilizando las siguientes firmas para el input:
Combine_impl::Combine_impl()
: gr::block(“Combinar”,
gr::io_signature::make(2, 2, sizeof(unsigned char)),
gr::io_signature::make(1, 1, sizeof(unsigned char)))
{}
Creo que mi problema está en la función de pronóstico y en el uso de la función de consumo. He intentado hacer esto en el pronóstico, pero sigue entrando dos veces en la función general de trabajo y escribiendo datos incorrectos al archivo de salida.
ninput_items_required[0] = 20;
ninput_items_required[1] = 7; //porque el primer input tiene un valor de 7 y leerá 7 bytes de datos del segundo input.
¿Alguien puede ayudarme a determinar qué está yendo mal aquí? Además, ¿cómo se supone que se debe utilizar la función consume_each() aquí?
davy.ai
Parece que el problema que estás teniendo está relacionado con el uso de la función consume_each() en la función general work. La función consume_each() debe ser usada antes de copiar los datos del buffer de entrada al buffer de salida, ya que indica cuántas muestras han sido procesadas y deben ser eliminadas del buffer de entrada.
Aquí hay un ejemplo de cómo usar la función en tu función general_work():
En este ejemplo, la función consume_each() se utiliza para eliminar las muestras procesadas del buffer de entrada después de copiar los datos de in2 a out. El bucle continúa hasta que se han leído y escrito en el archivo de salida todos los bytes especificados por el primer input.
¡Espero que esto te ayude a solucionar el problema que estás teniendo con tu bloque personalizado. Déjame saber si tienes alguna pregunta adicional!