工具/软件:
您好:
我们在我们的应用中的 syscfg 中启用 BIOS 置为有效、并在启动时立即置为有效。 断言来自 TI-RTOS 时钟模块 (KNL/Clock.c):
assert_isTrue(!((params->startFlag!= false)&&(timeout == 0U))、Clock_a_badTimeout);// Clock.c ln:651.
原因是 BDB 报告功能尝试启动超时为 0 的时钟。 违规代码位于此处、存在于样本和较早的 SDK 中:
//
// bdb_reporting.c
//
static void bdb_RepStartReporting( void )
{
//Stop if reporting timer is active
if( !OsalPortTimers_getTimerTimeout( bdb_TaskID, BDB_REPORT_TIMEOUT ) )
{
//timerElapsedTime is zero
OsalPortTimers_stopTimer( bdb_TaskID, BDB_REPORT_TIMEOUT );
bdb_reportingNextEventTimeout = 0; // <== SET HERE
bdb_reportingNextClusterEndpointIndex = BDBREPORTING_INVALIDINDEX;
//Start Timer
bdb_RepRestartNextEventTimer( );
}
}
发生的情况是:
- bdb_reportingNextEventTimeout is set to 0, and then bdb_RepRestartNextEventTimer is called
- bdb_RepRestartNextEventTimer calls OsalPortTimers_startTimer( bdb_reportingNextEventTimeout )
- OsalPortTimers_startTimer (0)
=> createTimerEntry
=> Clock_P_create
=> Clock_create
=> Clock_construct
=> Clock_Instance_init
ASSERT
文档对是否允许 0 超时保持沉默、但考虑到断言、它显然不受支持、预期行为可能未定义。
我们将初始化格式 0 更改为 1、从而解决了断言问题。
您能否告知此修复程序没有任何不良后果?
此致、