Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SerialPort&;字符串通信_C#_File Transfer - Fatal编程技术网

C# SerialPort&;字符串通信

C# SerialPort&;字符串通信,c#,file-transfer,C#,File Transfer,我正在尝试通过C#发送/接收字符串,在C#中,我只执行以下操作: SerialPort.WriteLine("A6"); 但在CCS中,如果我尝试一个字符接一个字符地发送字符串,它根本不起作用,无论是ReadLine还是ReadExisting!这就是我尝试创建的数组,因此每次输入RXBUFF pragma时,我们都会将收到的字符添加到数组中,直到数组已满(我随机将数组大小定义为2,这意味着我们要处理2个字符长度的字符串),并最终通过一个字符接一个字符发送字符串: #pragma vecto

我正在尝试通过C#发送/接收字符串,在C#中,我只执行以下操作:

SerialPort.WriteLine("A6");
但在CCS中,如果我尝试一个字符接一个字符地发送字符串,它根本不起作用,无论是ReadLine还是ReadExisting!这就是我尝试创建的数组,因此每次输入RXBUFF pragma时,我们都会将收到的字符添加到数组中,直到数组已满(我随机将数组大小定义为2,这意味着我们要处理2个字符长度的字符串),并最终通过一个字符接一个字符发送字符串:

 #pragma vector = USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)

if(__even_in_range(UCA1IV,18) == 0x02){          // Vector 2 - RXIFG
    if(counter==0)
    {
        Data[0]=UCA1RXBUF;
        counter++;
    }
    else
    {
        Data[1]=UCA1RXBUF;
        counter=0;
        UCA1TXBUF=Data[0];
        while(!(UCA1IFG & UCTXIFG)); // until UCTXBUF1 is empty
        UCA1TXBUF=Data[1];
    }
}
在C#中:

我得到了无意义的文本,比如:?A???有时:?A?等等,但有:

listBox2.Items.Add(SerialPort.ReadLine());
第一次我按下发送“A6”的发送按钮时,我什么也没有得到,第二次我也没有感觉到,就像ReadExisting行为一样

顺便说一下,即使我尝试以最简单的方式发送字符串(没有数组和条件),我的意思是:

#pragma vector = USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
        UCA1TXBUF='A';
        while(!(UCA1IFG & UCTXIFG));  // until UCTXBUF1 is empty
        UCA1TXBUF='6';
列表框中还有不一致的项

但是,如果我这样做:

#pragma vector = USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
UCA1TXBUF=UCA1RXBUF;
我确实在列表框中得到了“A6”,并且一切正常(使用ReadLineReadExisting)!
谁能告诉我为什么会这样

这表示您不应该在接收ISR内等待TX标志。RX中断例程应该只填充FIFO缓冲区(字节队列),以便您可以在其他地方解析其内容(主例程?),然后在需要时创建响应

RX ISR的伪代码应类似于:

#pragma vector = USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
FIFO_Enqueue(&RxBuffer, UCA1RXBUF);
main()
循环中的某个地方,您可以解析其内容:

while (1) 
{
    // find the first occurrence of "A6" and dequeue it
    if (FIFO_StartsWith(&RxBuffer, "A6")
        SendResponse();
}

我刚刚抵消了奇偶校验位,现在一切正常,谢谢大家

您确认波特率和其他属性匹配了吗?是的!如果属性不匹配,我想最后一次尝试是行不通的,但确实有效。你不同意我吗?@HansPassant这不是同一个问题。现在你知道该问什么问题了。你是对的,它填充了一个FIFO buff,这就是我使用数组所做的,我认为这不是问题所在,但我仍然不明白在ISR或main中发送字符有什么区别!不管怎样,我试着像你说的那样:但它不起作用。在中和奇偶校验位之后,一切都很好,但只在ISR例程中工作,而不是在main中(也只是使用ReadExisting,但不使用ReadLine),真奇怪!
while (1) 
{
    // find the first occurrence of "A6" and dequeue it
    if (FIFO_StartsWith(&RxBuffer, "A6")
        SendResponse();
}