簡體   English   中英

AVR C編程-全局數組

[英]AVR C Programming - Global Arrays

我正在嘗試使用全局數組來存儲我知道不會大於255個字節的數據。 但是,當我嘗試使用數組傳輸數據時,似乎沒有任何傳輸。 我究竟做錯了什么?

char responseFrame[255];

int main {
    ...
    while(1){
        getData();
    }

};
void getData(void) {
    int responseLen = USART1_RX();
    // put data in the response frame
    for (int i = 0; i < responseLen; i++){
        recv_data = USART1_RX();
        responseFrame[i]=recv_data;
        //USART0_TX(responseFrame[i]);
    }

    LogOutput(responseFrame, responseLen);
}

void LogOutput(char *msg, int size) {

    int i;
    for (i = 0; i < size; i++) {
        USART0_TX(msg[i]);
    }
}

但是,當我注釋我的日志記錄函數“ LogOutput”並使用“ USART0_TX(responseFrame [i])”行直接發送時,它將適當地發送信息。

這是我的USART0_TX函數:

void USART0_TX(uint8_t myData) {
    // Wait if a byte is being transmitted
    while( !(UCSR0A & (1<<UDRE0)) );
    // Transmit data
    UDR0 = myData;
};

您確定您的LogOutput函數正在傳遞有效數據嗎?

這應該工作

unsigned char* data = responseFrame;
LogOutput(data,255);

另一個想法:

您是否在對編譯器進行任何優化? 嘗試將其關閉以查看問題是否消失。

另外,您可能需要考慮標記全局揮發物。

volatile char data[255];

您可能需要延遲USART0_TX函數。

// Wait if a byte is being transmitted
while( !(UCSR0A & (1<<UDRE0)) );
// Transmit data
UDR0 = myData;
_delay_ms(250);

這將使uC能夠趕上總線上的數據。 我在傳輸數據時也遇到了類似的問題,我發現將數據放在UDR上后使用一小段延遲即可解決該問題。

之所以在您的getData函數中起作用,是因為其他兩個語句相對於TX函數而言是一個延遲。

如果還沒有,則需要包含util / delay.h。 請記住,最大延遲為4294967.295 ms / F_CPU以MHz為單位

參考: AVR LibC delay.h

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM