La variable más grande que es posible definir

0

Tengo muchos datos para almacenar a una velocidad muy rápida. No puedo enviarlos usando serial porque es muy lento. He intentado usar una memoria flash externa, pero debido a algún problema de la biblioteca no puedo alcanzar la velocidad de escritura que necesito. La única forma, he intentado, de trabajar es almacenar datos en una matriz de 8 bits. Pero he probado y encontrado que el tamaño máximo que puedo definir es 5000 (array [5000];). Ahora tengo 256 KB de memoria libre para el código en mi MCU, y necesito almacenar 5 KB de código y 200 KB de datos. Pero no puedo definir en el código 50 matrices. ¿Hay una manera que pueda definir una matriz más grande como yo quiero? ¿Hay alguna manera de definir mis arreglos cuando el código se está ejecutando?

    
pregunta Yaro

2 respuestas

3

La mayoría de los micros no te permiten escribir en la memoria flash simplemente declarando una matriz en ella. En cambio, hay funciones de biblioteca que puede usar para transferir un bloque de datos de la memoria RAM a la memoria flash. Tendrá que mirar los detalles del micro que está utilizando (que no ha especificado) y sus herramientas de desarrollo de software para saber cómo hacerlo.

    
respondido por el Dave Tweed
0

No confunda las matrices que define en su código para el código. En realidad, van a una sección de datos, especialmente si los define globalmente y no se inicializa. Si es así, ingresan a la sección denominada BSS, que NO se incluye en el archivo binario resultante que usted coloca en la memoria de códigos de su MCU. El código producido por el compilador asignará un área en la memoria de datos (RAM) para sus secciones .data y .bss. Para la sección .data, la llenará con los datos almacenados en la memoria del código (flash), mientras que para .bss solo la pondrá a cero.

Así que realmente PUEDES asignar 50 arreglos en tu código y ellos ingresarán a BSS (RAM).

Sin embargo, es una pregunta muy interesante por qué no puede asignar más de 5000 bytes en una matriz. ¿Puede estar intentando asignar una matriz dentro de una función en lugar de declararla globalmente? En tal caso, el compilador asigna la matriz en una pila que de hecho puede imponer cualquier límite extraño como 5000 bytes. Por favor, intente declarar globalmente una matriz de mayor tamaño. Entonces, debe estar limitado solo por el tamaño de la RAM de la MCU y la arquitectura (espacio de direcciones).

    
respondido por el Alexander Amelkin

Lea otras preguntas en las etiquetas