我從Rasp發送5個字節的數據。 Pi並使用UART通過dsPIC30F微控制器接收它們。我可以正確接收數據並將MAXCNT寄存器設置爲所需的值。當我嘗試發送第二個值時出現問題。 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
無限while循環就是我正在拍攝的東西。至於sscanf(),我希望能夠得到字符串(例如newResBuffer = {'1','2','3','4','5','\ 0'})並轉換它變成一個int(例如12345)。這是做錯的方式嗎? – cjswish
顯示變量的聲明。目前你從'newResBuffer'而不是'nR-4'運行'sscanf'。 – gudok