你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

你的缓存清了吗?

[复制链接]
黄小狼 发布时间:2015-1-30 20:23
最近在搞一个手持操作器的程序,原来是想在stm32f103vb上跑一个ucosII2.92的,但是后来不论怎么搞,在写入SD卡数据时总是出问题,卡死了,原因找了很久,没有搞定。
后来又把ucos去除了,回到裸奔时代!
嘿!还别说,这裸奔就是爽,速度那是刚刚的,不过这里出故事了。
有操作系统的跑得慢,没有的系统的跑得快,中间加的延时间就出问题了!


后来就用定时器定时,用了一个数据准备标志来判断数据是否接收完,或是超时。
其中,在接收中断中,判断数据长度是否超过指定长度,超过了数据准备标志置位。
在定时器中加也加入超时判定,数据发出后,开始计时,时间到时数据准备标志置位。
主程序中,检测到数据准备标志置位后,对数据区进行解析,然后将解析好的数据存到SD卡中。


但是,这下好玩了,DEBUG!过了,没有问题!!!
让程序自动跑吧,嘿嘿,SD写入的数据怎的据和上面的几条一样呢?
后来才发现,当时从ucos中移植回来时,去除了当时解析长度,对整个数据缓冲区进行解析(主要是一次接收的数据特别多)
由于在数据发出到接收完成的时间不是固定的,因为对方的速度有时会慢一点(各种原因啦,主要是得从flash中读取数据再返回过来),在定时器时间内这个慢的数据并不能完全到达,而这个时候,禁止了数据的接收,导致数据区不能完全更新,正进行解析,嘿嘿,就出故事了!


综上所述,之所以出现前后部分数据相同的情况,都是因为缓冲区数据没有完全被更新闹的,如果今后有人遇到这个情况,也不凡清除一下数据接收缓存,或许就好了。总的来说还是自己在设计时没有考虑周全,只清了数据写入的缓存,数据源的缓存没有清。


感谢各位看官,看完俺这出笑话,是否噗嗤一乐?

1ST币,50%,看看谁手气好


收藏 评论10 发布时间:2015-1-30 20:23

举报

10个回答
qianfan 回答时间:2015-1-30 20:34:18
不知道我的运气怎么样
mikeliujia 回答时间:2015-1-30 20:44:01
学习了
黄小狼 回答时间:2015-1-30 20:46:07
QianFan 发表于 2015-1-30 20:34
不知道我的运气怎么样

哇,您这运气太好了,可以买彩票!
feel-376797 回答时间:2015-1-31 05:51:50
谢谢分享
默默前行 回答时间:2015-1-31 07:54:31
感谢楼主分享,我也试试运气!
埃斯提爱慕 回答时间:2015-1-31 08:58:26
提示: 作者被禁止或删除 内容自动屏蔽
lkl0305 回答时间:2015-1-31 09:04:38
多谢分享啊
holts1 回答时间:2015-1-31 09:20:34
我通常下载时全清
chendiand 回答时间:2015-2-2 09:51:39
弱弱的问一句,怎么清
天天晓宇 回答时间:2015-2-2 10:13:41
呵呵,谢谢分享

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版