我正在调试一段代码,我遇到了一个错误,我似乎无法找到解决方案,它与副作用错误有关,因为变量被声明为 volatile。错误在一行中:
DBG_SLOTS(TIMER_VAR_NAME.maximumS == randomNUM);
Run Code Online (Sandbox Code Playgroud)
错误:_AssertImpl() 的参数 timerVar 有副作用,因为该变量是易失性的。包含函数在构建中的工作方式可能不同。
下面给出了最小的可重现代码:
typedef volatile struct
{
uint32_t maximumS; // Maximum soft timer
callbackEntry_t callbackTable[ CALLBACK_NUM_MAX ];
} regression_t
#if (defined(ROM) || defined(RAM) || defined(DLE) || defined(BLLNK))
timerVar_t TIMER_VAR_NAME;
#endif
uint32_t TServ_MaxInUse;
BackNum_t SEC SYS_Calls(uint64_t calls, PVFV_t callb, BOOL periodic)
{
int runtimeTick = 0;
TimeCallBackNum_t callbackNum;
uint32_t intPosture;
// ++++
G_SLOTS(TIMER_VAR_NAME.maximumS == TServ_MaxInUse);
........
}
Run Code Online (Sandbox Code Playgroud) 在下面的函数中,我在空检查之前面临取消引用错误。在行中
SEC_KM_KEKColumn_t *pAdmin1KEKs = pTCGKS->keySet[SEC_KM_Admin1].kc;
Run Code Online (Sandbox Code Playgroud)
有一个错误指出直接取消引用指针 pTCGKS。并且也在行中
SEC_ASSERT_MODEL(pDefaultKS != NULL && pTCGKS != NULL);
Run Code Online (Sandbox Code Playgroud)
有一个错误指出在空检查之前取消引用 (REVERSE_INULL) check_after_deref:空检查 pTCGKS 表明它可能为空,但它已经在导致检查的所有路径上被取消引用。
Stat_t SEC_COD_SLOW SEC_KM_TCG_Activ(SEC_KM_TCGKeySet_t *pTCGKS, uint32_t rangesSUM, SEC_KM_DefaultKeySet_t *pDefaultKS)
{
Status_t status = STATUS_OK;
uint32_t rangeIndex = 0;
const SEC_KM_KDF_t *pDigestNID = SEC_KM_GetAnybodyDigest();
SEC_KM_KEKColumn_t *pAdmin1KEKs = pTCGKS->keySet[SEC_KM_Admin1].kc;
const SEC_KM_KDF_t *pDigestAID = SEC_KM_TCG_GetSessionCredentials();
SEC_ASSERT_DEBUG(SEC_KM_TCG_GetSessionUserID() == SEC_KM_Admin1);
SEC_ASSERT_MODEL(pDefaultKS != NULL && pTCGKS != NULL);
// Generate Key Chains for all TCG authorities for Original Opal scheme
status = SEC_KM_TCG_Generate(pTCGKS, pDigestNID, pDigestAID);
if (status != …Run Code Online (Sandbox Code Playgroud)