S32K144复位或启动原因查看方式

有这样一个需求,我想知道我写好的程序在S32K144中运行的情况怎么样,有没有被看门狗重启过,或者有没有被其他的方式复位,比如外部引脚复位。S32K144支持查看复位或启动的原因。

做这个事情,大概分成3个步骤:

  1. 配置电源管理模块,使得代码可以调用查看复位原因的方法。

  1. 在代码中调用查看复位原因的方法。

  1. 通过CAN或者其他通讯方式将结果输出到电脑上进行查看分析。

我是安装的S32 Design Studio for ARM Version 2.2进行S32K144开发的。

配置电源管理模块的方法,双击Components,双击power_manager。

查看复位原因的方法名是 POWER_SYS_GetResetSrcStatusCmd(),以下是测试示例代码:

  if(POWER_SYS_GetResetSrcStatusCmd(RCM, RCM_WATCH_DOG) == true){
      masterRxBuffer[0] = 1;
  }
  if(POWER_SYS_GetResetSrcStatusCmd(RCM, RCM_EXTERNAL_PIN) == true){
        masterRxBuffer[1] = 1;
  }
  if(POWER_SYS_GetResetSrcStatusCmd(RCM, RCM_POWER_ON) == true){
      masterRxBuffer[2] = 1;
  }
  if(POWER_SYS_GetResetSrcStatusCmd(RCM, RCM_SJTAG) == true){
      masterRxBuffer[3] = 1;
  }
  if(POWER_SYS_GetResetSrcStatusCmd(RCM, RCM_CORE_LOCKUP) == true){
      masterRxBuffer[4] = 1;
  }
  if(POWER_SYS_GetResetSrcStatusCmd(RCM, RCM_SOFTWARE) == true){
      masterRxBuffer[5] = 1;
  }
  if(POWER_SYS_GetResetSrcStatusCmd(RCM, RCM_SMDM_AP) == true){
      masterRxBuffer[6] = 1;
  }
  if(POWER_SYS_GetResetSrcStatusCmd(RCM, RCM_STOP_MODE_ACK_ERR) == true){
      masterRxBuffer[7] = 1;
  }
  recvmsg_can0.id = 0x120;
  can0_sendmsg(recvmsg_can0.id, masterRxBuffer);

POWER_SYS_GetResetSrcStatusCmd()方法的第二个参数类型是枚举类型:

typedef enum
{
    RCM_LOW_VOLT_DETECT      = 1U,             /*!< Low voltage detect reset */
    RCM_LOSS_OF_CLK          = 2U,       /*!< Loss of clock reset */
    RCM_LOSS_OF_LOCK         = 3U,       /*!< Loss of lock reset */
#if FEATURE_RCM_HAS_CMU_LOSS_OF_CLOCK
    RCM_CMU_LOC              = 4U,        /*!< CMU Loss of lock reset */
#endif
    RCM_WATCH_DOG            = 5U,        /*!< Watch dog reset */
    RCM_EXTERNAL_PIN         = 6U,       /*!< External pin reset */
    RCM_POWER_ON             = 7U,       /*!< Power on reset */
    RCM_SJTAG                = 8U,       /*!< JTAG generated reset */
    RCM_CORE_LOCKUP          = 9U,       /*!< core lockup reset */
    RCM_SOFTWARE             = 10U,       /*!< Software reset */
    RCM_SMDM_AP              = 11U,       /*!< MDM-AP system reset */
    RCM_STOP_MODE_ACK_ERR    = 13U,       /*!< Stop mode ack error reset */
    RCM_SRC_NAME_MAX
} rcm_source_names_t;

具体含义参考后面的注释,我关注的是否为看门狗重启,因此RCM_WATCH_DOG是我的焦点。

启动看门狗后,且不给喂狗,测试的效果如下:

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值