【发布时间】:2016-05-28 09:55:03
【问题描述】:
我正在从 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循环 -
无限循环是我的目标。至于 sscanf(),我希望获取字符串(例如 newResBuffer = {'1','2','3','4','5','\0'})并转换将其转换为 int(例如 12345)。这是错误的做法吗?
-
显示变量声明。目前你是来自
newResBuffer而不是nR-4的sscanf。 -
@gudok 我改为 sscanf(nR-5, "%d", &newRes)... 仍然无法正常工作。
-
这个赋值
nR = nRreset;使nR指向 NULL。这意味着在读取第二个值的第一个字节时,您正在取消引用 NULL 指针。我想你的意思是nr = newResBuffer。