在f103上,每500ms进行SD卡打开文件,写入2k字节数据,关闭文件操作。这样会出现卡顿现象,main线程会出卡顿现象和错误,之后还能正常上述操作,反复出现,不知问题出在哪里。
int size = 0;
rt_tick_t s,e;
char *str = writeBuffer;
while (count++)
{
s = rt_tick_get();
fd= fopen("/text10.txt", "ab+");
if(fd !=NULL)
{
size = fwrite( str, sizeof(char),2048,fd);
fflush(fd);
fclose(fd);
e = rt_tick_get();
rt_kprintf("size:%d,%d\n",size,(e-s));
str = writeBuffer;
}
rt_thread_mdelay(500);
}
现象如下:
SD卡的写入是有时间的,你在整个系统线程的调用处理中有没有查下写入2K字节的SDK需要的最大时间是多少,如果这个时间超出了500ms,则你在上次还没有写完的情况下启动了写入。
如果时间间隔没有问题,建议你在重启SD卡写入时,查下是否上次写入已经结束,如果没有哦结束,则需要等待。可以给个自锁信号,在写入时信号量锁定,完成时信号量解锁。这样你就按500模式给出一个写入队列。从队列中提取地址(指向写入的数据缓冲)。当然这样的队列不能开大。只能缓冲2~3次的数据,这样可以保证500ms内有突发系统情况没有及时完成写入,也不会丢掉数据。