关于单片机串口通讯:上位机发送数据到下位机,单片机保存数据到24c512; 100
(是led的程序,单片机接收上位机数据用以更新显示内容)下载信息命令协议:DataHead+SaveFileCMD+FileNo+Attrib1+Attrib2+Mess...
(是led的程序,单片机接收上位机数据用以更新显示内容)
下载信息命令协议:
DataHead+SaveFileCMD+FileNo+Attrib1+Attrib2+MessageSizeH+MessageSizeL +
(Dlay400ms)+…Message…+CheckSumH+CheckSumL+ETX+(Dlay150ms)
其中“Mesage”是数据部分,有很多个字节。该部分需要保存在24c512。现在的问题是 协议不变的情况,如何实现数据的保存呢? 中断内 好像不能进行24c512的读写;如果在主程序中读写的话,不能做到实时更新,而且还需要很大的缓冲区接收上位机数据;
不知道大家是怎么做的? 【有讲述这方面的书籍、资料也可以】bearclaw2012@163.com 展开
下载信息命令协议:
DataHead+SaveFileCMD+FileNo+Attrib1+Attrib2+MessageSizeH+MessageSizeL +
(Dlay400ms)+…Message…+CheckSumH+CheckSumL+ETX+(Dlay150ms)
其中“Mesage”是数据部分,有很多个字节。该部分需要保存在24c512。现在的问题是 协议不变的情况,如何实现数据的保存呢? 中断内 好像不能进行24c512的读写;如果在主程序中读写的话,不能做到实时更新,而且还需要很大的缓冲区接收上位机数据;
不知道大家是怎么做的? 【有讲述这方面的书籍、资料也可以】bearclaw2012@163.com 展开
3个回答
展开全部
看你主程序循环时间了,如果比整个数据包接收下来的时间要短的话,你可以建立两个缓冲区,对换进行接收数据。
一个数据包完成后建立一个标志,换一个缓冲接收;主程序一旦查到有标志位被置位,刚把相应缓冲区的内容写到EEPROM,再把标志清零。
程序需要两个缓冲区,一个缓冲标识位和一个接收完成标志位。
一般来说,主程序循环时间太长说明你的程序有些地方处理不好,可以把占用时间较长的函数进行分片处理。
一个数据包完成后建立一个标志,换一个缓冲接收;主程序一旦查到有标志位被置位,刚把相应缓冲区的内容写到EEPROM,再把标志清零。
程序需要两个缓冲区,一个缓冲标识位和一个接收完成标志位。
一般来说,主程序循环时间太长说明你的程序有些地方处理不好,可以把占用时间较长的函数进行分片处理。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
那没办法,只有查询等待了,上位机一次发送一段数据,单片机接收到后写入24c512,写完后才返回一个应答信号给上位机。而上位机只有收到这信号后才发送下一段数据。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果数据量很大很多,是不是可以采用分段传输的方式
追问
上位机软件固定,我无法更改协议
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询