最近需要做个读写sd卡的模块,所以重点研究了下zlg/fs文件系统.
写好了驱动部分,最后调试的时候总是发现有奇怪的取数据终止现象.
分析了半天,终于在OSFileTask通信(文件系统和os)接口函数里发现了一点小问题.
void OSFileTask(void *pdata)
{
......
while(1)
{
Command=(OSFileParameter *)OSQPend(FileCommad,100,&err); //等待命令
if(err==OS_TIMEOUT)
{
......
}
if(err==OS_NO_ERR)
{
......
}
/**********ERR*******/
OSMboxPost(Command->Rt,(void *)1);
}
}
最后一句OSMboxPost可能有问题,假如err为TIMEOUT,这是很常见的,100ms内没有命令,时间溢出.这个时候OSQPend会返回(void *)0给Command.这样,OSMboxPost的第一个参数就会在异常向量表那个位置取数据,那是绝对会出问题的.
所以,如果是时间溢出,或则是Command为NULL,那就没有必要OSMboxPost了.
不知道还有没有其他问题,不管如何,还是非常感谢zlg/fs,实现了一个易懂不大的文件系统,让文件系统不再那么难以上手.