 
					
				
		
I have clone and import a project of usb_host_msd_fatfs/freerots, it's running well.
after that I want to use freertos work in static allocation mode. so modify FreeRTOSConfig.h with :
#define configSUPPORT_STATIC_ALLOCATION 1and define my vApplicationGetIdleTaskMemory() , vApplicationGetTimerTaskMemory().
the project can compile well, but when download and run on target board, it stuck in 'HardFault_Handler:'
after some digging, I found application will create 2 mutex, one for USB_HostInit(), the other for USB_HostKhciCreate(), all they will call USB_OsaMutexCreate(), it take memory use for mutex from s_UsbFreertosMutexStruct[USB_OSA_FREERTOS_MUTEX_COUNT], but in 'usb_osa_freertos.c'
#define USB_OSA_FREERTOS_MUTEX_COUNT (1U)it just define 1 entry for static mutex. so I change (1U) to (2U). after that the project work.
another question, in 'usb_osa_freertos.c", the code for 'USB_OsaMutexCreate()"
usb_osa_status_t USB_OsaMutexCreate(usb_osa_mutex_handle *handle)
{
#if (defined(configSUPPORT_STATIC_ALLOCATION) && (configSUPPORT_STATIC_ALLOCATION > 0U))
    usb_osa_sem_struct_t *mutex;
    USB_OSA_SR_ALLOC();
#endif
    if (!handle)
    {
        return kStatus_USB_OSA_Error;
    }
#if (defined(configSUPPORT_STATIC_ALLOCATION) && (configSUPPORT_STATIC_ALLOCATION > 0U))
    USB_OSA_ENTER_CRITICAL();
    for (uint32_t index = 0; index < USB_OSA_FREERTOS_MUTEX_COUNT; index++)
    {
        if (0 == s_UsbFreertosMutexStruct[index].isUsed)
        {
            mutex = &s_UsbFreertosMutexStruct[index];
            mutex->isUsed = 1U;
            break;
        }
    }
    USB_OSA_EXIT_CRITICAL();
    if (NULL == mutex)
    {
        return kStatus_USB_OSA_Error;
    }
if there is no free entry in 's_UsbFreertosMutexStruct' , variable 'mutex' may cause not init before access in "if(NULL == mutex)", make this compare take a mistaken result.
so I change to:
usb_osa_sem_struct_t *mutex = NULL
I hope this post can help for somebody want to work in same circumstances.
Cai.
