¿Existen herramientas de análisis de código estático para C que conviertan punteros en arreglos de un tamaño estático? Es un dolor marginal y simplemente pensé en consultar con la comunidad. Una búsqueda rápida en Google no encontró nada útil porque "a" en la frase "puntero a matriz" generalmente significa algo completamente diferente de lo que estoy buscando aquí ... Cualquier sugerencia o palabra clave sería útil.
P.s. Estoy tratando de convertir algo de código en C sintetizable para una implementación de hardware.
Por ejemplo, este código no es sintetizable:
void sum(float *a, int size, float *out) {
int i;
for (i=0;i<size;i++)
*out += a+1;
}
No es sintetizable ya que el tamaño de a no se declara estáticamente en tiempo de ejecución. (Tenga en cuenta que debería estar bien ya que no es una matriz, aunque no estoy 100% seguro de eso). Sería fantástico si hubiera una herramienta para convertir el uso de matrices de tamaño variable en matrices cuyos tamaños se conocieran en tiempo de compilación.
Además, este código debe transformarse (actualmente de forma manual) a algo como esto:
// Not 100% sure if float * is still allowed.
void sum(float a[SIZE], float *out) {
int i;
for (i=0;i<SIZE;i++)
*out += a[i]; // Not sure if this is necessary.
}
En este momento, tendría que hacer esto manualmente. Tengo que resolver todos los usos de matrices dinámicas. Así es como funciona HLS. Es un asunto serio. Es difícil (o al menos requiere mucho tiempo) hacerlo cuando no escribió el código original. Debe convertirse para que pueda sintetizar el código en hardware.
Todos los tamaños de matriz deben resolverse; es posible que no se hayan declarado explícitamente al principio. Luego, estos tamaños de matriz deben propagarse a todas las funciones / referencias afectadas.
Finalmente, para aquellos de ustedes confundidos por "sintetizable", siéntase libre de revisar estos dos enlaces que lo describen mucho mejor de lo que puedo ...