api-hal-task.c 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #include "cmsis_os.h"
  2. #include "api-hal-task.h"
  3. //-----------------------------cmsis_os2.c-------------------------------
  4. // helpers to get isr context
  5. // get arch
  6. #ifndef __ARM_ARCH_6M__
  7. #define __ARM_ARCH_6M__ 0
  8. #endif
  9. #ifndef __ARM_ARCH_7M__
  10. #define __ARM_ARCH_7M__ 0
  11. #endif
  12. #ifndef __ARM_ARCH_7EM__
  13. #define __ARM_ARCH_7EM__ 0
  14. #endif
  15. #ifndef __ARM_ARCH_8M_MAIN__
  16. #define __ARM_ARCH_8M_MAIN__ 0
  17. #endif
  18. #ifndef __ARM_ARCH_7A__
  19. #define __ARM_ARCH_7A__ 0
  20. #endif
  21. // get masks
  22. #if((__ARM_ARCH_7M__ == 1U) || (__ARM_ARCH_7EM__ == 1U) || (__ARM_ARCH_8M_MAIN__ == 1U))
  23. #define IS_IRQ_MASKED() ((__get_PRIMASK() != 0U) || (__get_BASEPRI() != 0U))
  24. #elif(__ARM_ARCH_6M__ == 1U)
  25. #define IS_IRQ_MASKED() (__get_PRIMASK() != 0U)
  26. #elif(__ARM_ARCH_7A__ == 1U)
  27. /* CPSR mask bits */
  28. #define CPSR_MASKBIT_I 0x80U
  29. #define IS_IRQ_MASKED() ((__get_CPSR() & CPSR_MASKBIT_I) != 0U)
  30. #else
  31. #define IS_IRQ_MASKED() (__get_PRIMASK() != 0U)
  32. #endif
  33. // get is irq mode
  34. #if(__ARM_ARCH_7A__ == 1U)
  35. /* CPSR mode bitmasks */
  36. #define CPSR_MODE_USER 0x10U
  37. #define CPSR_MODE_SYSTEM 0x1FU
  38. #define IS_IRQ_MODE() ((__get_mode() != CPSR_MODE_USER) && (__get_mode() != CPSR_MODE_SYSTEM))
  39. #else
  40. #define IS_IRQ_MODE() (__get_IPSR() != 0U)
  41. #endif
  42. // added osKernelGetState(), because KernelState is a static var
  43. #define IS_IRQ() (IS_IRQ_MODE() || (IS_IRQ_MASKED() && (osKernelGetState() == osKernelRunning)))
  44. //-------------------------end of cmsis_os2.c----------------------------
  45. bool task_is_isr_context(void) {
  46. return IS_IRQ();
  47. }
  48. bool task_equal(TaskHandle_t a, TaskHandle_t b) {
  49. if(a == NULL || b == NULL) return false;
  50. return a == b;
  51. }