STC 串口接收20k左右数据存储到EEprom里,求解!该如何解决
STC 串口接收20k左右数据存储到EEprom里,求解!想到一个办法:首先按键擦除20k左右的EEPROM,然后在串口中断
STC 串口接收20k左右数据存储到EEprom里,求解!
想到一个办法:首先按键擦除20k左右的EEPROM,然后在串口中断里边接收边写数据 ?可行吗 ?急!
我现在操作遇到了问题,不知道是不是这个想法错了,求大家帮忙,先谢谢了
[解决办法]
楼主方法可行,不过不是很合理,中断里面不适合做大量数据处理,这回严重影响代码的实时性能。
也可以在中断里面接收数据,写eeprom的时候在主循环体,当然操作eeprom的时候要关中断。
[解决办法]
如果楼主可以控制,主机发送一帧,等待处理完再发另一帧,做双向协议,或者降低发送波特率,给接收端留出足够的处理时间,同时降低帧长度,帧长度降低到极限就是接收到一个bit写一个bit了。
主循环要尽量简洁,一旦接收到标志位,立即处理,实时性要好。
[解决办法]
[解决办法]一次写一整页这样做是可以省掉不少IIC操作中的START,STOP,能省那么一点时间=.=,
像前面说的,如果主机也是可以控制的,那最好就做成双向协议,主机发完一帧则等待下面操作完成返回确定再发下一帧
[解决办法]自己定义协议来完成,一次发送一次数据包。比如:
数据包组成(简易的,具体自己定义):
头+数据包标识+有效数据长度+有效数据+尾
数据包:
0xaa 0x01 0x05 0x12 0x34 0x56 0x78 0x90 0x55
说明:
oxaa表示数据包头
0x01表示数据包类型,此处定义 0x01为数据传输 0x02为应答
0x05表示有效数据长度,即后面的数据0x12 0x34 0x56 0x78 0x90 这5个,这里就可以放你要存储的数据了,比如一次写512B,你就可以放这么多数据进去
0x55表示数据包尾,一帧数据包结束
例子(本协议只是作为思路提示用):
上位机:0xaa 0x01 0x05 0x12 0x34 0x56 0x78 0x90 0x55
下位机:接收数据,根据0x01标识知道是数据传输,然后处理后面的数据,存储到EEPROM,然后发送应答信号给上位机,0xaa 0x02 0x55 ,此数据包0x02为应答,注意可以加上有效数据用于表示正确存储没
上位机:收到0xaa 0x02 0x55 ,继续下一个数据包发送
下位机:继续如上处理。
上位机:发送完最后一帧
下位机:接收完最后一帧,应答
上位机:结束。