Browse Source

add pvd detect

transmit_disinfection
zhaohe 11 months ago
parent
commit
4e7f7f3c3e
  1. 66
      sysmgr/sys_mgr.cpp

66
sysmgr/sys_mgr.cpp

@ -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());

Loading…
Cancel
Save