Взял 0.07
Для uCOS получилось примерно так:
CODE
#include "ucos_ii.h"
#define WAIT_OBJECT_0 TRUE
typedef OS_EVENT * HANDLE;
inline HANDLE CreateMutex(void *p1, BOOL b, void *p2)
{
HANDLE FatFS_Sem;
FatFS_Sem = OSSemCreate(1);
if (0 == FatFS_Sem)
{
while(1)
{
}
}
return (FatFS_Sem);
}
inline void CloseHandle(HANDLE pmutex)
{
INT8U err;
OSSemDel(pmutex, OS_DEL_ALWAYS, &err);
}
inline BOOL WaitForSingleObject(HANDLE pmutex, INT16U tout)
{
INT8U err;
OSSemPend(pmutex, tout / OS_TICKS_PER_SEC, &err);
if (OS_ERR_NONE == err)
{
return (TRUE);
}
return (FALSE);
}
inline void ReleaseMutex(HANDLE pmutex)
{
OSSemPost(pmutex);
}
Но, не знаю, насколько автор тестировал "re-entrancy for multitask operation", поскольку есть банальная синтаксическая ошибка в функции unlock_fs().
Но по коду бегло просмотрел, вроде как дополнительно низкоуровневые функции драйвера лочить не нужно, все должно разруливаться через введенные lock_fs() и unlock_fs().
Буду тестировать.
Если у кого вдруг появятся результаты, в том числе найдутся баги (мало ли, любой код не без этого), то интересно будет узнать.
Пасу котов...