工具/软件:TI-RTOS
您好!
您好!
我是看门狗功能、它以某种奇怪的方式工作、但我的问题是、我将看门狗周期设置为大约30秒。 在第一个周期之后、它启动、然后使自身能够发现、但在下一个周期、当它获得看门狗时、它不会被发现 (此时绿色指示灯也不闪烁)。第三个周期后,指示灯再次重新启动并使其能够发现。 在第四个周期、它显示的行为与第二个周期相同。我不知道如何解决此问题。我使用的是 ble_sdk_2_02_01_18、编译器是 TI V 5.2.9。 我要附加的代码的小快照:
#define Watchdog_count 1.
#define WATCHDOG_TIMEOUT_MS 12000/1800000 // 1800000/1000= 1800/60=30分钟
我现在使用的是30分钟看门狗计时器。 因此、它在30分钟后会被重置、但直到接下来的30分钟才会显示。请帮助我解决我在这里遇到的问题。
/*********
@文件 main.c
@简要介绍 BLE SensorTag 示例应用的主要入门知识。
组:WCS、BTS
目标器件: CC2650、 CC2640、 CC1350
秘书长的报告
版权所有(c) 2014-2016、德州仪器(TI)公司
保留所有权利。
以源代码和二进制形式重新分发和使用、有无
允许进行修改、前提是满足以下条件
符合:
*源代码的重新分发必须保留上述版权
声明、此条件列表和以下免责声明。
*二进制形式的再发行必须复制上述版权
注意、本条件列表和中的以下免责声明
分发时提供的文档和/或其他材料。
*德州仪器公司的名称和名称均不相同
其贡献者可用于认可或推广衍生产品
未经特定的事先书面许可。
本软件由版权所有者和贡献者"按原样"提供
以及任何明示或暗示的保证、包括但不限于
对特定适销性和适用性的隐含保证
不承认目的。 在任何情况下、版权所有者不得或
任何直接、间接、偶然、特殊、
惩罚性或后果性损害(包括但不限于
采购替代货物或服务;丧失使用、数据或利润;
或业务中断)、无论原因是什么以及任何责任理论、
无论是合同、严格责任还是侵权行为(包括疏忽或)
否则)因使用本软件而以任何方式产生、
即使被告知可能会发生此类损坏。
秘书长的报告
版本名称:BLE_SDK_2_02_01_18
发布日期:2016年10月26日15:20:04
(小部分 /
// TI RTOS
#include <ti/sysbios/BIOS.h>
#include
#include
#include
#include
// BLE
#include "bcomdef.h"
//应用
#include "sensortag.h"
#include "sensortag_tmp.h"
#include "sensortag_hum.h"
#include "sensortag_bar.h"
#ifndef USE_DEFAULT_USER_CFG
#include "Ble_user_config.h"
// BLE 用户定义的配置
bleUserCfg_t user0Cfg = BLE_USER_CFG;
#endif // USE_DEFAULT_USER_CFG
/*********
*宏
*
#define Watchdog_count 1.
#define WATCHDOG_TIMEOUT_MS 12000/1800000 // 1800000/1000= 1800/60=30分钟
/*********
*常量
*
/*********
* typedef
*
/*********
*局部变量
*
/*********
*全局变量
*
#ifdef CC1350_LAUNCHXL
#ifdef power_saving
//用于唤醒回调的电源通知对象
Power_NotifyObj rFSwitchPowerNotifyObj;
静态 uint8_t rFSwitchNotifyCb (uint8_t 事件类型、uint32_t *事件变量、
uint32_t * clientArg);
#endif //power_saving
PIN_STATE radCtrlState;
PIN_Config radCtrlCfg[]=
{
Board_DIO1_RFSW | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_PushPull | PIN_DRVSTR_MAX、/*射频 SW 开关默认为2.4GHz 路径*/
Board_DIO30_SWPWR | PIN_GPIO_OUTP_EN | PIN_GPIO_HIGH | PIN_PushPull | PIN_DRVSTR_MAX、/*射频开关电源*
PIN_TERMINATE
};
PIN_Handle radCtrlHandle;
#endif //CC1350_LAUNCHXL
/*********
* extern
*
extern void AssertHandler (uint8 assertCasuse、uint8 assertSubcause);
extern uint32_t WatchdogCC26XX_convertMsToTicks (uint32_t 毫秒);
void watchdog_initlize (void);
/*********
*本地
*
/*********
*@fn Main
*
*@简要应用程序主页
*
*输入参数
*
*@param 无。
*
*输出参数
*
*@param 无。
*
*@返回无。
*
int main()
{
/*注册应用程序回调到堆栈中发出的 TRAP 断言*/
RegisterAssertCback (AssertHandler);
PIN_init (BoardGpioInitTable);
#ifdef CC1350_LAUNCHXL
//启用2.4GHz 无线电
radCtrlHandle = PIN_OPEN (&radCtrlState、radCtrlCfg);
#ifdef power_saving
power_registerNotify (&rFSwitchPowerNotifyObj、
PowerCC26XX_entering_standby | PowerCC26XX_awarK_STANDBY、
(POWER_NotifyFxn) rFSwitchNotifyCb、NULL);
#endif //power_saving
#endif //CC1350_LAUNCHXL
#ifndef power_saving
/*设置待机和空闲模式的约束*/
power_setConstraint (PowerCC26XX_SB_disallow);
power_setConstraint (PowerCC26XX_IDLE_PD_Disallow);
#endif // power_saving
/*初始化 iCall 模块*/
iCall_init();
/*启动外部映像的任务-优先级5 */
iCall_createRemoteTasks();
/*启动配置文件-优先级3 */
GAPRole_createTask();
/*启动应用程序-优先级1 */
SensorTag_createTask();
SensorTagTmp_createTask();
SensorTagHum_createTask();
SensorTagBar_createTask();
/*启动应用程序安全装置*/
Watchdog_initlize();
BIOS_start();//启用中断并启动 SYS/BIOS */
返回0;
}
/*********
*@fn AssertHandler
*
*@简述这是应用程序用于发出断言的回调处理程序
堆栈中。 当在堆栈中定义 EXT_HAL_ASSERT 时
*项目在提出断言时将调用此函数、
*并可用于观察或从预期中陷阱违规
*行为。
*
*例如、对于堆分配失败、堆栈将升高
* HAL_ASSERT_CAUSE_OUT_ORT_MEMORY 作为 assertC句 和
* HAL_ASSERT_SUBCAUSE_NONE 作为 assertSubcause。 一个应用
*开发人员可以通过调用在栈上捕获任何 malloc 失败
匹配情况下的* HAL_ASSERT_SPINLOCK。
*
*建议应用程序开发人员扩展此功能
*供其自己的应用程序使用。 为此、添加 hal_dassert.c
*到您的项目工作区、hal_assert.h 的路径(这可以
*位于堆栈侧)。 通过包含来产生断言
* hal_assert.h 并使用宏 HAL_ASSERT (CAUST)来提出
*用自变量 assertCus. 可能是 assertSubcause
*可在之前由宏 HAL_ASSERT_SET_SUBCAUSE (SUBAUSE)进行选择设置
*以确认其描述的原因。 更多信息是
*在 hal_dassert.h 中可用
*
*输入参数
*
*@param assertCusal -按照 hal_dassert.h 中定义的断言原因
*@param assertSubcause -可选断言子 cause (请参阅 hal_dassert.h)。
*
*输出参数
*
*@param 无。
*
*@返回无。
*
空 AssertHandler (uint8 assertCasuse、uint8 assertSubcause)
{
//检查断言原因
开关(砂锅)
{
默认值:
HAL_ASSERT_SPINLOCK;
}
返回;
}
/*********
*@fn smallErrorHook
*
*@要连接 到 TI-RTOS的简短错误处理程序。
*
*输入参数
*
*@param EB -指向错误块的指针。
*
*输出参数
*
*@param 无。
*
*@返回无。
*
空 smallErrorHook (Error_Block *EB)
{
适用于(;);
}
#IF 已定义(CC1350_LAUNCHXL)&&已定义(POWER_SAVing)
/*********
*@fn rFSwitchNotifyCb
*
*@简短的电源驱动器回调、以切换射频开关开启电源状态
*转换。
*
*输入参数
*
*@param eventType -状态变化。
*@param eventArg -未使用。
*@param clientArg -未使用。
*
*@返回 Power_NOTIFYDONE 以指示成功。
*
静态 uint8_t rFSwitchNotifyCb (uint8_t 事件类型、uint32_t *事件变量、
uint32_t *客户关系)
{
if (eventType = PowerCC26XX_entering_standby)
{
//关闭射频开关
PIN_setOutputValue (radCtrlHandle、Board_DIO30_SWPWR、0);
}
否则、如果(eventType = PowerCC26XX_AK_STANDBY)
{
//为射频开关加电
PIN_setOutputValue (radCtrlHandle、Board_DIO30_SWPWR、1);
}
//已成功处理通知
返回 Power_NOTIFYDONE;
}
#endif //CC1350_LAUNCHXL||节能
/*********
*@fn watchdog_init()
*
*@简单实现看门狗功能。
*
*
*输入参数
*
*@param 无。
*
*@返回 void。
*
空安全装置回调(UARg a0){
while (1);//在此处停止以检查是否正在调用回调
}
/*********
*@fn watchdog_init()
*
*@简单实现看门狗功能。
*
*
*输入参数
*
*@param 无。
*
*@返回 void。
*
void watchdog_initlize (void)
{
Watchdog_handle;
Watchdog_init();
Watchdog_Params 参数;
Watchdog_Params_init (params);
params.callbackFxn =安全装置回调;
params.resetMode = Watchdog_reset_on;
params.debugStallMode = Watchdog_debug_star_on;
观察子句柄= Watchdog_open (0、¶ms);
Watchdog_setReload (watchdogHandle、WatchdogCC26XX_convertMsToTicks (watchdog_timeout_MS));
/*避免待机以使看门狗保持运行*/
power_setConstraint (PowerCC26XX_SB_disallow);
}
/*********
*
