You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

135 lines
4.9 KiB

1 year ago
8 months ago
1 year ago
8 months ago
1 year ago
8 months ago
1 year ago
8 months ago
1 year ago
8 months ago
1 year ago
8 months ago
1 year ago
8 months ago
1 year ago
8 months ago
1 year ago
  1. #include "sys_mgr.hpp"
  2. #include "sdk/os/zos.hpp"
  3. #include "project_configs.h"
  4. #include <stdlib.h>
  5. #include <string.h>
  6. using namespace iflytop;
  7. #define TAG "SysMgr"
  8. extern "C" {
  9. /***********************************************************************************************************************
  10. * STM32_CODE_ERROR *
  11. ***********************************************************************************************************************/
  12. void SysMgr_on_Error_Handler() {
  13. ZLOGE(TAG, "Error_Handler\r\n");
  14. while (1) {
  15. }
  16. }
  17. void SysMgr_on_assert_failed(uint8_t* file, uint32_t line) {
  18. ZLOGE(TAG, "ASSERT: %s [%s:%d]\r\n", file, line);
  19. while (1) {
  20. }
  21. }
  22. /***********************************************************************************************************************
  23. * STM32_ERROR_IRQ *
  24. ***********************************************************************************************************************/
  25. void SysMgr_on_NMI_Handler(void) { ZLOGI(TAG, "on NMI_Handler"); }
  26. void SysMgr_on_HardFault_Handler(void) { ZLOGI(TAG, "on HardFault_Handler"); }
  27. void SysMgr_on_MemManage_Handler(void) { ZLOGI(TAG, "on MemManage_Handler"); }
  28. void SysMgr_on_BusFault_Handler(void) { ZLOGI(TAG, "on BusFault_Handler"); }
  29. void SysMgr_on_UsageFault_Handler(void) { ZLOGI(TAG, "on UsageFault_Handler"); }
  30. /***********************************************************************************************************************
  31. * FREERTOS_ERROR *
  32. ***********************************************************************************************************************/
  33. void vApplicationStackOverflowHook(xTaskHandle xTask, signed char* pcTaskName) {
  34. ZLOGE(TAG, "StackOverflowHook: %s\r\n", pcTaskName);
  35. __disable_irq();
  36. while (1) {
  37. }
  38. }
  39. void vApplicationMallocFailedHook(void) {
  40. ZLOGE(TAG, "MallocFailedHook\r\n");
  41. __disable_irq();
  42. while (1) {
  43. }
  44. }
  45. }
  46. SysMgr* SysMgr::ins() {
  47. static SysMgr s_ins;
  48. return &s_ins;
  49. }
  50. // void SysMgr::regTaskId(osThreadId id) {
  51. // m_task[m_ntask].Id = id;
  52. // m_ntask++;
  53. // }
  54. size_t SysMgr::osGetSysRunTime() { return HAL_GetTick(); }
  55. UBaseType_t uxTaskGetSystemState(TaskStatus_t* const pxTaskStatusArray, const UBaseType_t uxArraySize, uint32_t* const pulTotalRunTime);
  56. void SysMgr::initedFinished() { //
  57. static TaskStatus_t pxTaskStatusArray[SDK_MAX_TASK + 1];
  58. UBaseType_t uxArraySize = SDK_MAX_TASK + 1;
  59. uint32_t pulTotalRunTime;
  60. m_ntask = uxTaskGetSystemState(pxTaskStatusArray, uxArraySize, &pulTotalRunTime);
  61. for (int i = 0; i < m_ntask; i++) {
  62. m_task[i].Id = pxTaskStatusArray[i].xHandle;
  63. }
  64. ZASSERT_INFO(m_ntask < SDK_MAX_TASK, "task num is too large, please increase SDK_MAX_TASK");
  65. }
  66. size_t SysMgr::osGetMinimumEverFreeHeapSize() { return ::xPortGetMinimumEverFreeHeapSize(); }
  67. size_t SysMgr::osGetFreeHeapSize() { return ::xPortGetFreeHeapSize(); }
  68. size_t SysMgr::osGetTotalHeapSize() { return configTOTAL_HEAP_SIZE; }
  69. int32_t SysMgr::getTaskNum() { return m_ntask; }
  70. void SysMgr::dumpSysInfo() {
  71. zos_log("---------------Heap Info--------------\r\n");
  72. zos_log("MinimumEverFreeHeapSize: %d\r\n", osGetMinimumEverFreeHeapSize());
  73. zos_log("FreeHeapSize : %d\r\n", osGetFreeHeapSize());
  74. zos_log("TotalHeapSize : %d\r\n", osGetTotalHeapSize());
  75. zos_log("");
  76. zos_log("---------------Task Info--------------\r\n");
  77. static char buf[40 * SDK_MAX_TASK]; // 40一个任务,最多支持10个任务
  78. vTaskList(buf);
  79. zos_log("Name State Priority Stack Num\r\n");
  80. zlog_raw(buf);
  81. zos_log("- TaskInfoEnd -\r\n");
  82. }
  83. uint32_t SysMgr::osTaskStackRemainingSize(osThreadId id) { return uxTaskGetStackHighWaterMark(id); }
  84. const char* SysMgr::osTaskName(osThreadId id) { return pcTaskGetName(id); }
  85. osThreadId SysMgr::osGetId(int offset) {
  86. if (offset < m_ntask) {
  87. return m_task[offset].Id;
  88. }
  89. return NULL;
  90. }
  91. void SysMgr::osTaskName(osThreadId id, char* name, int bufsize) {
  92. strncpy(name, pcTaskGetName(id), bufsize);
  93. name[bufsize - 1] = 0;
  94. }
  95. void SysMgr::osTaskStackRemainingSize(osThreadId id, uint16_t* remainsize) { *remainsize = uxTaskGetStackHighWaterMark(id); }
  96. void SysMgr::osTaskPriority(osThreadId id, uint16_t* priority) { *priority = uxTaskPriorityGet(id); }
  97. void SysMgr::osTaskGetState(osThreadId id, char* state) {
  98. eTaskState task_state = eTaskGetState(id);
  99. switch (task_state) {
  100. case eRunning:
  101. *state = 'X';
  102. break;
  103. case eReady:
  104. *state = 'R';
  105. break;
  106. case eBlocked:
  107. *state = 'B';
  108. break;
  109. case eSuspended:
  110. *state = 'S';
  111. break;
  112. case eDeleted:
  113. *state = 'D';
  114. break;
  115. default:
  116. *state = '?';
  117. break;
  118. }
  119. }