update osal api
This commit is contained in:
@@ -25,25 +25,33 @@
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#define USB_OSAL_MS2TICK(ms)
|
||||
|
||||
typedef void *usb_osal_thread_t;
|
||||
typedef void *usb_osal_sem_t;
|
||||
typedef void *usb_osal_mutex_t;
|
||||
typedef void (*usb_thread_entry_t)(void *argument);
|
||||
|
||||
usb_osal_thread_t usb_osal_thread_create(const char *name, uint32_t stack_size, uint32_t prio, usb_thread_entry_t entry);
|
||||
usb_osal_thread_t usb_osal_thread_create(const char *name, uint32_t stack_size, uint32_t prio, usb_thread_entry_t entry, void *args);
|
||||
void usb_osal_thread_delete(usb_osal_thread_t thread);
|
||||
void usb_osal_thread_suspend(usb_osal_thread_t thread);
|
||||
void usb_osal_thread_resume(usb_osal_thread_t thread);
|
||||
|
||||
usb_osal_sem_t usb_osal_sem_create(uint32_t initial_count);
|
||||
void usb_osal_sem_delete(usb_osal_sem_t sem);
|
||||
int usb_osal_sem_take(usb_osal_sem_t sem);
|
||||
int usb_osal_sem_give(usb_osal_sem_t sem);
|
||||
|
||||
usb_osal_mutex_t usb_osal_mutex_create(void);
|
||||
void usb_osal_mutex_delete(usb_osal_mutex_t mutex);
|
||||
int usb_osal_mutex_take(usb_osal_mutex_t mutex);
|
||||
int usb_osal_mutex_give(usb_osal_mutex_t mutex);
|
||||
|
||||
uint32_t usb_osal_enter_critical_section(void);
|
||||
void usb_osal_leave_critical_section(uint32_t flag);
|
||||
|
||||
void usb_osal_delay_ms(uint32_t delay);
|
||||
void usb_osal_msleep(uint32_t delay);
|
||||
|
||||
uint32_t usb_osal_get_tick(void);
|
||||
|
||||
#endif
|
||||
@@ -24,19 +24,34 @@
|
||||
#include <FreeRTOS.h>
|
||||
#include "semphr.h"
|
||||
|
||||
usb_osal_thread_t usb_osal_thread_create(const char *name, uint32_t stack_size, uint32_t prio, usb_thread_entry_t entry)
|
||||
usb_osal_thread_t usb_osal_thread_create(const char *name, uint32_t stack_size, uint32_t prio, usb_thread_entry_t entry, void *args)
|
||||
{
|
||||
TaskHandle_t htask = NULL;
|
||||
stack_size /= sizeof(StackType_t);
|
||||
xTaskCreate(entry, name, stack_size, NULL, prio, &htask);
|
||||
xTaskCreate(entry, name, stack_size, args, prio, &htask);
|
||||
return (usb_osal_thread_t)htask;
|
||||
}
|
||||
|
||||
void usb_osal_thread_suspend(usb_osal_thread_t thread)
|
||||
{
|
||||
vTaskSuspend(thread);
|
||||
}
|
||||
|
||||
void usb_osal_thread_resume(usb_osal_thread_t thread)
|
||||
{
|
||||
vTaskResume(thread);
|
||||
}
|
||||
|
||||
usb_osal_sem_t usb_osal_sem_create(uint32_t initial_count)
|
||||
{
|
||||
return (usb_osal_sem_t)xSemaphoreCreateCounting(1, initial_count);
|
||||
}
|
||||
|
||||
void usb_osal_sem_delete(usb_osal_sem_t sem)
|
||||
{
|
||||
vSemaphoreDelete((SemaphoreHandle_t)sem);
|
||||
}
|
||||
|
||||
int usb_osal_sem_take(usb_osal_sem_t sem)
|
||||
{
|
||||
return (xSemaphoreTake((SemaphoreHandle_t)sem, portMAX_DELAY) == pdPASS) ? 0 : -1;
|
||||
@@ -44,16 +59,25 @@ int usb_osal_sem_take(usb_osal_sem_t sem)
|
||||
|
||||
int usb_osal_sem_give(usb_osal_sem_t sem)
|
||||
{
|
||||
return (xSemaphoreGive((SemaphoreHandle_t)sem) == pdPASS) ? 0 : -1;
|
||||
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
|
||||
uint32_t intstatus = 1;
|
||||
int ret;
|
||||
/* Obtain the level of the currently executing interrupt. */
|
||||
// __asm volatile("csrr %0, mintstatus"
|
||||
// : "=r"(intstatus)::"memory");
|
||||
/* Obtain the number of the currently executing interrupt. */
|
||||
// __asm volatile ( "mrs %0, ipsr" : "=r" ( intstatus )::"memory" );
|
||||
|
||||
// BaseType_t xHigherPriorityTaskWoken = pdFALSE;
|
||||
if (intstatus == 0) {
|
||||
ret = xSemaphoreGive((SemaphoreHandle_t)sem);
|
||||
} else {
|
||||
ret = xSemaphoreGiveFromISR((SemaphoreHandle_t)sem, &xHigherPriorityTaskWoken);
|
||||
if (ret == pdPASS) {
|
||||
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
|
||||
}
|
||||
}
|
||||
|
||||
// int ret = xSemaphoreGiveFromISR((SemaphoreHandle_t)sem, &xHigherPriorityTaskWoken);
|
||||
|
||||
// if (ret == pdPASS) {
|
||||
// portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
|
||||
// }
|
||||
// return (ret == pdPASS) ? 0 : -1;
|
||||
return (ret == pdPASS) ? 0 : -1;
|
||||
}
|
||||
|
||||
usb_osal_mutex_t usb_osal_mutex_create(void)
|
||||
@@ -61,6 +85,11 @@ usb_osal_mutex_t usb_osal_mutex_create(void)
|
||||
return (usb_osal_mutex_t)xSemaphoreCreateMutex();
|
||||
}
|
||||
|
||||
void usb_osal_mutex_delete(usb_osal_mutex_t mutex)
|
||||
{
|
||||
vSemaphoreDelete((SemaphoreHandle_t)mutex);
|
||||
}
|
||||
|
||||
int usb_osal_mutex_take(usb_osal_mutex_t mutex)
|
||||
{
|
||||
return (xSemaphoreTake((SemaphoreHandle_t)mutex, portMAX_DELAY) == pdPASS) ? 0 : -1;
|
||||
@@ -82,7 +111,12 @@ void usb_osal_leave_critical_section(uint32_t flag)
|
||||
taskEXIT_CRITICAL();
|
||||
}
|
||||
|
||||
void usb_osal_delay_ms(uint32_t delay)
|
||||
void usb_osal_msleep(uint32_t delay)
|
||||
{
|
||||
vTaskDelay(delay);
|
||||
}
|
||||
vTaskDelay(pdMS_TO_TICKS(delay));
|
||||
}
|
||||
|
||||
uint32_t usb_osal_get_tick(void)
|
||||
{
|
||||
return xTaskGetTickCount();
|
||||
}
|
||||
|
||||
@@ -23,22 +23,17 @@
|
||||
#include "usb_osal.h"
|
||||
#include <rtthread.h>
|
||||
|
||||
usb_osal_thread_t usb_osal_thread_create(const char *name, uint32_t stack_size, uint32_t prio, usb_thread_entry_t entry)
|
||||
usb_osal_thread_t usb_osal_thread_create(const char *name, uint32_t stack_size, uint32_t prio, usb_thread_entry_t entry, void *args)
|
||||
{
|
||||
rt_thread_t htask;
|
||||
htask = rt_thread_create(name, entry, NULL, stack_size, prio, 10);
|
||||
htask = rt_thread_create(name, entry, args, stack_size, prio, 10);
|
||||
rt_thread_startup(htask);
|
||||
return (usb_osal_thread_t)htask;
|
||||
}
|
||||
|
||||
usb_osal_sem_t usb_osal_sem_create(uint32_t initial_count)
|
||||
{
|
||||
static uint16_t index = 0;
|
||||
char str[16];
|
||||
|
||||
sprintf(str, "usbh_sem%u", index);
|
||||
index++;
|
||||
return (usb_osal_sem_t)rt_sem_create(str, initial_count, RT_IPC_FLAG_FIFO);
|
||||
return (usb_osal_sem_t)rt_sem_create("usbh_sem", initial_count, RT_IPC_FLAG_FIFO);
|
||||
}
|
||||
|
||||
int usb_osal_sem_take(usb_osal_sem_t sem)
|
||||
@@ -53,12 +48,7 @@ int usb_osal_sem_give(usb_osal_sem_t sem)
|
||||
|
||||
usb_osal_mutex_t usb_osal_mutex_create(void)
|
||||
{
|
||||
static uint16_t index = 0;
|
||||
char str[16];
|
||||
|
||||
sprintf(str, "usbh_mutex%u", index);
|
||||
index++;
|
||||
return (usb_osal_mutex_t)rt_mutex_create(str, RT_IPC_FLAG_FIFO);
|
||||
return (usb_osal_mutex_t)rt_mutex_create("usbh_mutex", RT_IPC_FLAG_FIFO);
|
||||
}
|
||||
|
||||
int usb_osal_mutex_take(usb_osal_mutex_t mutex)
|
||||
@@ -82,7 +72,7 @@ void usb_osal_leave_critical_section(uint32_t flag)
|
||||
rt_exit_critical();
|
||||
}
|
||||
|
||||
void usb_osal_delay_ms(uint32_t delay)
|
||||
void usb_osal_msleep(uint32_t delay)
|
||||
{
|
||||
rt_thread_mdelay(delay);
|
||||
}
|
||||
Reference in New Issue
Block a user