考虑一个问题呵!
就是说我想从MSP430里面传送一个Struct数据到PC或别的芯片,这个方式应该怎么组织呢!
因为MSP430 是一个字节一个字的传的,一般来说是先分一个临时的数组,然后往数组里填数据,然后再整个数据的操作,
但是这个过程中怎么去处理一组数据的开始和结尾呢!比如说我把所有的数据都一直往数组里放,那就一锅粥了,怎么去定义一个开始和结尾!?
大家有什么方案说出来一块讨论一下!?说不定哪天就用到了!
一点拙见
数据结构是针对C语言的,C语言没有处理串口的专用编译方法。所以我想只能自己写程序处理数据结构的串口输出,比如用指针把结构中的数据逐项送给串口。接受端接收后,再恢复成原数据结构。
规定好帧格式
如果是定长的帧就很好办,比如两个字节,你收到了两个字节就可以认为是收到了一个完整的帧;要是觉得这样可靠性太低,可以设置帧头和帧尾,来判断帧。比如这样的格式{0x55,……,0xaa}
引用: 原帖由 wstt 于 2012-1-4 09:35 发表 规定好帧格式如果是定长的帧就很好办,比如两个字节,你收到了两个字节就可以认为是收到了一个完整的帧;要是觉得这样可靠性太低,可以设置帧头和帧尾,来判断帧。比如这样的格式{0x55,……,0xaa}
同意,再加上进行校验和吧。可以参考一下GA/T508-2004:
https://bbs.eeworld.com.cn/viewthread.php?tid=309162&page=1&fromuid=194149#pid1213391
你的问题其实就是如何定义一个完整合理的数据帧格式,我讲下我们一般用的格式供你参考。
1. 除非对数据帧长度有限制,一般会使用0X55或者0XAA作为同步字,可以是一字节也可以是2个字节。这个同步字在一般情况下用处不是很大,接收方可以通过该同步字来划分收到的各个数据帧段。但在有的情况下,该同步字就比较有意义了。比如,对方是自适应波特率的应用,加上这个同步字就能很方便地实现自适应波特率的功能。
2. 我们在同步字后跟一个字节的帧头,用来判断帧的起始地址,
3. 除非是固定帧长的应用,我们会在帧的起始位置加一个帧长度,这个也是根据你的应用来确定是用一个字节还是2个字节.
4. 接下来是有效数据帧,根据实际情况确定。
5. 数据帧后,我们一般会跟1-2个字节的校验字,可以是校验和,也可以是CRC。根据你的应用确定。
5. 校验字之后,会有一个字节的帧结束标志。
回复 楼主 wuyanyanke 的帖子
先定义好帧的模式,包括帧头,帧尾,数据区,比如0xaa,0xd5 data0 data1 data2...datan 0xbb,这样发送和接收都能够得到有效识别。
谢谢各位,
我现在遇到一个问题,就是不知道为什么从另一个模块里传进来的数据只能读出来8个字节!?
代码如下:
#pragma vector=USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
{
switch(__even_in_range(UCA1IV,4))
{
case 0:break; // Vector 0 - no interrupt
case 2: // Vector 2 - RXIFG
RxLen++;
RxBuffer[RX_IndexW] =UCA1RXBUF;
if(++RX_IndexW > 128)
{
RX_IndexW = 0;
}
break;
case 4: // Vector 4 - TXIFG
break;
default: break;
}
}
求解!?
如果是串口通信的话,规定好相关的通信协议,规定好帧长,把数据一帧一帧的发送和接收。检测到帧头就开始读数据