Browse Source

添加复位原因检查

transmit_disinfection
zhaohe 11 months ago
parent
commit
2d392a81f3
  1. 27
      sysmgr/sys_mgr.cpp
  2. 23
      sysmgr/sys_mgr.hpp

27
sysmgr/sys_mgr.cpp

@ -126,6 +126,32 @@ SysMgr* SysMgr::ins() {
size_t SysMgr::osGetSysRunTime() { return HAL_GetTick(); }
UBaseType_t uxTaskGetSystemState(TaskStatus_t* const pxTaskStatusArray, const UBaseType_t uxArraySize, uint32_t* const pulTotalRunTime);
void SysMgr::checkRst(void) {
if (__HAL_RCC_GET_FLAG(RCC_FLAG_PINRST) != RESET) { // NRST 引脚复位
printf("RESET_REASON: PIN reset \n");
m_reset_reason = kreset_reason_pinrst;
} else if (__HAL_RCC_GET_FLAG(RCC_FLAG_PORRST) != RESET) { // 上电掉电复位
printf("RESET_REASON: POR/PDR reset \n");
m_reset_reason = kreset_reason_porrst;
} else if (__HAL_RCC_GET_FLAG(RCC_FLAG_SFTRST) != RESET) { // 软件复位
printf("RESET_REASON: Software reset \n");
m_reset_reason = kreset_reason_sftrst;
} else if (__HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST) != RESET) { // 独立看门狗复位
printf("RESET_REASON: Independent watchdog reset \n");
m_reset_reason = kreset_reason_iwdgrst;
} else if (__HAL_RCC_GET_FLAG(RCC_FLAG_WWDGRST) != RESET) { // 窗口看门狗复位
printf("RESET_REASON: Window watchdog reset \n");
m_reset_reason = kreset_reason_wwdgrst;
} else if (__HAL_RCC_GET_FLAG(RCC_FLAG_LPWRRST) != RESET) { // 低功耗复位
printf("RESET_REASON: (Low-power reset \n");
m_reset_reason = kreset_reason_lpwrrst;
} else {
printf("RESET_REASON: Unkown reset \n");
m_reset_reason = kreset_reason_unkown;
}
__HAL_RCC_CLEAR_RESET_FLAGS(); // 清除复位标志
}
void SysMgr::initedFinished() { //
static TaskStatus_t pxTaskStatusArray[SDK_MAX_TASK + 1];
UBaseType_t uxArraySize = SDK_MAX_TASK + 1;
@ -137,6 +163,7 @@ void SysMgr::initedFinished() { //
ZASSERT_INFO(m_ntask < SDK_MAX_TASK, "task num is too large, please increase SDK_MAX_TASK");
PVD_Init();
checkRst();
}
size_t SysMgr::osGetMinimumEverFreeHeapSize() { return ::xPortGetMinimumEverFreeHeapSize(); }

23
sysmgr/sys_mgr.hpp

@ -7,13 +7,24 @@ class ZTaskInfo {
osThreadId Id;
};
typedef enum {
kreset_reason_pinrst = 1, // NRST引脚复位
kreset_reason_porrst = 2, // 上电掉电复位
kreset_reason_sftrst = 3, // 软件复位
kreset_reason_iwdgrst = 4, // 独立看门狗复位
kreset_reason_wwdgrst = 5, // 窗口看门狗复位
kreset_reason_lpwrrst = 6, // 低功耗复位
kreset_reason_unkown = 7, //
} reset_reason_t;
class SysMgr {
private:
/* data */
public:
ZTaskInfo m_task[30] = {0};
int m_ntask = 0;
ZTaskInfo m_task[30] = {0};
int m_ntask = 0;
reset_reason_t m_reset_reason = kreset_reason_unkown;
static SysMgr* ins();
void initedFinished();
@ -45,6 +56,14 @@ class SysMgr {
void osTaskGetState(osThreadId id, char* state);
int32_t getTaskNum();
/***********************************************************************************************************************
* CHIP *
***********************************************************************************************************************/
reset_reason_t chipGetResetReason() { return m_reset_reason; }
private:
void checkRst(void);
};
} // namespace iflytop
Loading…
Cancel
Save