je travaille avec le contrôleur AVR ATMEGA16 ayant 16kb du flash et 1kb de Sram.i ont stocké des données dans un tableau statique static char raw_data[15361];
-à-dire et d'essayer de l'envoyer sur USART en utilisant la fonction suivante:Envoi grand tableau sur USART
void USART_TxChar( char data) /* Data transmitting function */
{
UDR = data; /* Write data to be transmitting in UDR */
while (!(UCSRA & (1<<UDRE))); /* Wait until data transmit and buffer get empty */
}
void USART_SendString( char *str) /* Send string of USART data function */
{
int i=0;
while (str[i]!=0)
{
USART_TxChar(str[i]); /* Send each char of string till the NULL */
i++;
}
}
mon problème est quand jamais je mets mon tableau dans usart il montre la mémoire pleine. USART_SendString(raw_data);
.i recherché en ligne et de découvrir que ma fonction est de charger tout le tableau en RAM, conduisant à une erreur.je trouve il y a un moyen cependant que vous pouvez envoyer des données stockées en flash sur usart en utilisant PROGMEM attribute
mais cela fonctionne uniquement pour const string type
. alors comment dois-je envoyer mes données stockées dans la mémoire flash sur usart sans entraîner une erreur mémoire pleine ??
Rangez votre tableau en flash (PROGMEM) et réécrire votre fonction SendString à 'vide USART_SendString (const char * str)'. Btw, 'statique char' ne signifie pas qu'il sera en flash. – tilz0R
@ tilz0R j'ai essayé cela aussi mais il dit que je dois faire le tableau 'const'.qui je ne peux pas parce qu'avant d'envoyer des données sur usart je stocke mes données de capteur dans ce tableau.fait je ne peux pas ajouter des valeurs à ce tableau. –
"1kb de Sram" puis "statique char raw_data [15361];". Votre tableau est 15 fois plus grand que votre RAM disponible. Cela vous semble-t-il correct? – Lundin