0

これが私が持っているコードです。私は今それをテストすることができないので、誰かがこれが完全なstr文字列を取り、各文字を個別に送信することを確認できるかどうか疑問に思っていますTXREG

char str [10];
int n;
n = sprintf(str, "%u%% %u\n", Duty_Cycle, DAC_Output);
transmit_uart(str);                    // Send the value

で、方法はこちらtransmit_uart()

void transmit_uart(const char *value) {
    for(int i = 0; value[i] != '\0'; i++) {
        while(TXIF == 0) {}
        TXREG = value[i];
    }
}

したがって、これは次のようなものを送信する必要があります

50% 128

transmit_uart()私がそこにある方法でフォーマットされた文字列で呼び出すたびに。

更新: 昨日テストすることができましたが、これは実際に機能しました! 助けてくれてありがとう!

4

2 に答える 2

1

TXIF私はそれをMCUに個人的にロードしてテストしていませんが、そうです、それがどのように見えるかを実行する限り、それは問題なく見えます。

本当にsnprintf、またはより大きなバッファーを使用する必要があります。これは、整数のオーバーフロー(単に値が大きすぎる、または任意の負の値の場合など)がバッファオーバーフローにカスケードされる1つのケースです。

于 2012-12-04T04:40:04.317 に答える
1

5〜9文字の文字列を送信する場合:

1 or 2 or 3 symbols - Duty_Cycle value,
1 symbol - % symbol,
1 symbol - space,
1 or 2 or 3 symbols - DAC_Output value,
1 symbol - \n symbol,

あなたは正しくやっています。

于 2012-12-04T04:40:27.750 に答える