|
|
@ -2,7 +2,6 @@ |
|
|
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
|
|
|
|
|
|
|
using namespace iflytop; |
|
|
|
|
|
|
|
#define TAG "SysMgr"
|
|
|
@ -42,11 +41,62 @@ static size_t get_free_heap_size() { |
|
|
|
/***********************************************************************************************************************
|
|
|
|
* STM32_ERROR_IRQ * |
|
|
|
***********************************************************************************************************************/ |
|
|
|
void SysMgr_on_NMI_Handler(void) { ZLOGI(TAG, "on NMI_Handler"); } |
|
|
|
void SysMgr_on_HardFault_Handler(void) { ZLOGI(TAG, "on HardFault_Handler"); } |
|
|
|
void SysMgr_on_MemManage_Handler(void) { ZLOGI(TAG, "on MemManage_Handler"); } |
|
|
|
void SysMgr_on_BusFault_Handler(void) { ZLOGI(TAG, "on BusFault_Handler"); } |
|
|
|
void SysMgr_on_UsageFault_Handler(void) { ZLOGI(TAG, "on UsageFault_Handler"); } |
|
|
|
// void SysMgr_on_NMI_Handler(void) { ZLOGI(TAG, "on NMI_Handler"); }
|
|
|
|
// void SysMgr_on_HardFault_Handler(void) { ZLOGI(TAG, "on HardFault_Handler"); }
|
|
|
|
// void SysMgr_on_MemManage_Handler(void) { ZLOGI(TAG, "on MemManage_Handler"); }
|
|
|
|
// void SysMgr_on_BusFault_Handler(void) { ZLOGI(TAG, "on BusFault_Handler"); }
|
|
|
|
// void SysMgr_on_UsageFault_Handler(void) { ZLOGI(TAG, "on UsageFault_Handler"); }
|
|
|
|
|
|
|
|
void NMI_Handler(void) { |
|
|
|
printf("E:%s\n", __FUNCTION__); |
|
|
|
NVIC_SystemReset(); |
|
|
|
} |
|
|
|
void HardFault_Handler(void) { |
|
|
|
printf("E:%s\n", __FUNCTION__); |
|
|
|
NVIC_SystemReset(); |
|
|
|
} |
|
|
|
|
|
|
|
void MemManage_Handler(void) { |
|
|
|
printf("E:%s\n", __FUNCTION__); |
|
|
|
NVIC_SystemReset(); |
|
|
|
} |
|
|
|
|
|
|
|
void BusFault_Handler(void) { |
|
|
|
printf("E:%s\n", __FUNCTION__); |
|
|
|
NVIC_SystemReset(); |
|
|
|
} |
|
|
|
void UsageFault_Handler(void) { |
|
|
|
printf("E:%s\n", __FUNCTION__); |
|
|
|
NVIC_SystemReset(); |
|
|
|
} |
|
|
|
void DebugMon_Handler(void) {} |
|
|
|
|
|
|
|
static void PVD_Init(void) { |
|
|
|
PWR_PVDTypeDef PvdStruct; |
|
|
|
|
|
|
|
HAL_PWR_EnablePVD(); |
|
|
|
|
|
|
|
PvdStruct.PVDLevel = PWR_PVDLEVEL_6; /* set PVD thr to 3.1v */ |
|
|
|
PvdStruct.Mode = PWR_PVD_MODE_IT_RISING; |
|
|
|
HAL_PWR_ConfigPVD(&PvdStruct); |
|
|
|
|
|
|
|
/* enable lost power irq */ |
|
|
|
HAL_NVIC_SetPriority(PVD_IRQn, 0, 0); /* */ |
|
|
|
HAL_NVIC_EnableIRQ(PVD_IRQn); /* */ |
|
|
|
} |
|
|
|
|
|
|
|
void PVD_IRQHandler(void) { |
|
|
|
if (__HAL_PWR_GET_FLAG(PWR_FLAG_PVDO)) /* 1为VDD小于PVD阈值,掉电情况 */ |
|
|
|
{ |
|
|
|
/* 掉电前的紧急处理 */ |
|
|
|
printf("low power detect......\n"); |
|
|
|
for (size_t i = 0; i < 1000; i++) { |
|
|
|
// wait for lost power
|
|
|
|
printf("low power detect......\n"); |
|
|
|
} |
|
|
|
NVIC_SystemReset(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/***********************************************************************************************************************
|
|
|
|
* FREERTOS_ERROR * |
|
|
@ -85,6 +135,8 @@ void SysMgr::initedFinished() { // |
|
|
|
m_task[i].Id = pxTaskStatusArray[i].xHandle; |
|
|
|
} |
|
|
|
ZASSERT_INFO(m_ntask < SDK_MAX_TASK, "task num is too large, please increase SDK_MAX_TASK"); |
|
|
|
|
|
|
|
PVD_Init(); |
|
|
|
} |
|
|
|
|
|
|
|
size_t SysMgr::osGetMinimumEverFreeHeapSize() { return ::xPortGetMinimumEverFreeHeapSize(); } |
|
|
@ -95,8 +147,6 @@ size_t SysMgr::osGetFreeSysHeapSize() { return get_free_heap_size(); } |
|
|
|
int32_t SysMgr::getTaskNum() { return m_ntask; } |
|
|
|
|
|
|
|
void SysMgr::dumpSysInfo() { |
|
|
|
|
|
|
|
|
|
|
|
zlog("---------------Heap Info--------------\n"); |
|
|
|
zlog("MinimumEverFreeHeapSize : %d\n", osGetMinimumEverFreeHeapSize()); |
|
|
|
zlog("RTOS FreeHeapSize : %d\n", osGetFreeHeapSize()); |
|
|
|