chry_mempool_osal_rtthread.c 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. /*
  2. * Copyright (c) 2024, sakumisu
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. #include "chry_mempool.h"
  7. #include <rtthread.h>
  8. #include <rthw.h>
  9. chry_mempool_osal_sem_t chry_mempool_osal_sem_create(uint32_t max_count)
  10. {
  11. return (chry_mempool_osal_sem_t)rt_sem_create("chry_mempoolh_sem", max_count, RT_IPC_FLAG_FIFO);
  12. }
  13. void chry_mempool_osal_sem_delete(chry_mempool_osal_sem_t sem)
  14. {
  15. rt_sem_delete((rt_sem_t)sem);
  16. }
  17. int chry_mempool_osal_sem_take(chry_mempool_osal_sem_t sem, uint32_t timeout)
  18. {
  19. int ret = 0;
  20. rt_err_t result = RT_EOK;
  21. if (timeout == 0xfffffff) {
  22. result = rt_sem_take((rt_sem_t)sem, RT_WAITING_FOREVER);
  23. } else {
  24. result = rt_sem_take((rt_sem_t)sem, rt_tick_from_millisecond(timeout));
  25. }
  26. if (result == -RT_ETIMEOUT) {
  27. ret = -1;
  28. } else if (result == -RT_ERROR) {
  29. ret = -1;
  30. } else {
  31. ret = 0;
  32. }
  33. return (int)ret;
  34. }
  35. int chry_mempool_osal_sem_give(chry_mempool_osal_sem_t sem)
  36. {
  37. return (int)rt_sem_release((rt_sem_t)sem);
  38. }