我與有AVR控制器ATmega16的Flash和Sram.i的1KB的16KB已經存儲的數據在一個靜態數組即static char raw_data[15361];
,並試圖在USART發送使用下列函數工作:發送過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++;
}
}
我的問題是,當我把我的陣列放入usart時,它顯示內存已滿。 USART_SendString(raw_data);
。我在網上搜索並發現我的函數正在將所有數組加載到RAM中,因此導致錯誤。我發現有一種方法可以使用PROGMEM attribute
將數據存儲在閃存中,但它僅適用於const string type
。 所以我應該如何發送我的數據存儲在閃存上方,而不會導致內存滿錯誤?
Store中的閃光燈(PROGMEM)陣列和重寫你的SendString功能'無效USART_SendString(爲const char * STR)'。順便說一句,'靜態字符'並不意味着它將閃光。 – tilz0R
@ tilz0R我也試過,但它說我必須使數組'const'.which我不能因爲之前發送數據通過usart我將我的傳感器數據存儲在該數組中。製作它const我不會能夠添加值到該陣列。 –
「Skb的1kb」,然後是「static char raw_data [15361];」。您的陣列比可用RAM大15倍。這對你看起來是否正確? – Lundin