私はRaspから5バイトのデータを送信しています。 UARTを使用してdsPIC30Fマイクロコントローラを介して受信します。データを正しく受信し、MAXCNTレジスタを希望の値に設定することができます。問題は、私が2番目の値を送信しようとしたときに発生します。 newResBuffer []の値は、最初に読み込まれたデータの後で変更されません。文字の配列へのポインタのリセット
私はポインタ/配列については初心者ですが、自分の問題が自分のポインタをリセットする方法にあると思われます。私はこれを成功させることなく、さまざまな方法で試しました。このステップを正しく実行していますか?
#include <string.h>
char newResBuffer[10];
char *nR = newResBuffer;
char *nRreset = NULL;
char rxRead = 0;
int newRes = 0;
int newResFlag = 0;
int j = 0;
int main(void)
{
nRreset = nR; // set reset point at the beginning of newResBuffer[]
while(1)
{
if(U1STAbits.URXDA) // check if there is data available
{
rxRead = U1RXREG & 0xFF; //read data from UART receive register
*nR = rxRead; //store data to first byte of newResBuffer[]
nR++; // increment pointer
j++;
if(j > 4)
{
*nR = '\0'; // null terminate the string
newResFlag = 1; // set the flag that new value is ready to be set
j = 0; // reset count variable
}//if(j>4)
}//if(U1STAbits.URXDA)
if(newResFlag) // has flag been set?
{
sscanf(newResBuffer, "%d", &newRes); // convert string received to an int
MAXCNT = (newRes * 2) - 1; // set MAXCNT register to new value
nR = nRreset; // reset pointer to start of newResBuffer[]
newResFlag = 0; // reset flag
}//if(newResFlag)
}//while(1)
return 0;
}//main()
診断LEDでテストしましたが、newResBuffer []が最初に送信した値にリセットされているようです。私は新しいMAXCNT値を無駄に設定した後、すべての0にアレイを再初期化しようとしました。
わからない 'のsscanf(newResBuffer、 "%dの"、およびnewresコマンド);:
は、ここで同じことを達成し、コードの簡単なバージョンです'あなたがしたいことをしていて、あなたは無限のwhileループを持っています – sjsam
無限ループは私が撮影したものです。sscanf()については、文字列(newResBuffer = {'1'、 '2'、 '3'、 '4'、 '5'、 '\ 0'})を変換して変換したいそれをintに変換します(例:12345)。これは間違っているのでしょうか? – cjswish
変数の宣言を表示します。現在、 'nR-4'の代わりに' newResBuffer'から 'sscanf'しています。 – gudok