OpenEdv-开源电子网

标题: Fatfs文件系统f_write处理时间的问题 [打印本页]

作者: 天涯_1110    时间: 2015-9-1 21:41
标题: Fatfs文件系统f_write处理时间的问题
DSP28346平台,没有用操作系统。平台提供的时间片资源有限。 while主循环中有时间片任务:task1msApp(); task2msApp();等,且while循环中任务执行一遍的时间不能超过10ms,否则系统超时复位。 

现在的问题是:经测试f_write()函数写一个扇区占用的时间绝对大于10ms,如果将f_write函数放入主循环任务中,肯定不行。  

最后想做到的是:f_write这个函数写一个扇区操作拆分成多次执行,每次耗时100us左右执行一小部分。这样貌似就复杂了,还得修改文件系统代码。使用操作系统就不会存在这种问题,因为系统会自动帮你保存现场。

还有没有更好的解决方法?
作者: 正点原子    时间: 2015-9-1 21:41
回复【6楼】天涯_1110:
---------------------------------
你这种情况,没办法了。。。
用OS,或者用2个单片机
作者: 正点原子    时间: 2015-9-1 22:08
做定时器,10ms中断,处理喂狗。
作者: 天涯_1110    时间: 2015-9-1 22:22
回复【2楼】正点原子:
---------------------------------
由于系统实时性的要求,while循环一遍的时间一定要在10ms之内完成。 否则复位,这是一种保护机制。 任何时候10ms之内,while中的任务都得执行一遍,要不然就有可能炸机了。 

你说的10ms中断喂狗 ,不太清楚怎么个处理法,  能详细一点吗?
作者: aozima    时间: 2015-9-2 09:43
电脑硬件有时写个扇区最大可能要几百ms,但平均性能能到几十M每秒。
你觉得在最慢的那几百ms里面,电脑CPU都在死等吗?
作者: 正点原子    时间: 2015-9-3 23:02
你是如何保证10ms会复位的?
作者: 天涯_1110    时间: 2015-9-4 09:38
回复【5楼】正点原子:
---------------------------------
主循环while每循环一次都给一个全局变量赋值30,在333.333us的中断每执行一次减一。也就是中断执行30次,30*333.333us=10ms。如果该全局变量还没有更新就会变为0。在中断中看门狗复位。
作者: 天涯_1110    时间: 2015-9-4 09:41
回复【4楼】aozima:
---------------------------------
你说的这个用了操作系统,就不需要死等了,当然没问题。我说的这个是没有操作系统的。
作者: 不良苏    时间: 2019-1-10 19:08
天涯_1110 发表于 2015-9-4 09:41
回复【4楼】aozima:
---------------------------------
你说的这个用了操作系统,就不需要死等了,当然没 ...

楼主你问题解决了了吗,我的问题跟你一模一样,也是裸跑,写入数据也是在10ms的定时器里,我现在的问题是写入的耗时必须控制在1-3ms,不然就会影响别的工作了,
作者: 不良苏    时间: 2019-1-10 19:08
不良苏 发表于 2019-1-10 19:08
楼主你问题解决了了吗,我的问题跟你一模一样,也是裸跑,写入数据也是在10ms的定时器里,我现在的问题是 ...

@正点原子。。。。。。。。




欢迎光临 OpenEdv-开源电子网 (http://47.111.11.73/) Powered by Discuz! X3.4