CySysGetResetReason在Launcher切换到App后获取不正确

公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Lin_Qiang
Level 4
Level 4
5 likes given First like given 50 replies posted

我使用PSoC的Launcher模式,发现在Launcher切换到App后,在App中使用CySysGetResetReason获取WatchDog Reset原因不正确,没有发生WatchDog Reset,也依然判断发生过,判断条件是if (CY_SYS_RESET_WDT == CySysGetResetReason(CY_SYS_RESET_WDT)),去掉Launcher后就正常了,这是为什么?

 

0 点赞
1 解答
LinglingG_46
Moderator
Moderator
Moderator
500 solutions authored 1000 replies posted 10 questions asked


这个跟工程没有关系,就是code语法的分析。
你这句话就相当于写了一个if(1&&1==1&&1),这个肯定是成立的。
因为从函数的角度出发,CySysGetResetReason(CY_SYS_RESET_WDT)和CySysGetResetReason(CY_SYS_RESET_SW))返回值是相同的为CY_SYS_RESET_SW,这两个值相与为1。 CY_SYS_RESET_WDT&&CY_SYS_RESET_SW这部分两个非0的值相与为1,所以代码每次都能执行这个条件成立的部分。

在原帖中查看解决方案

0 点赞
6 回复数
LinglingG_46
Moderator
Moderator
Moderator
500 solutions authored 1000 replies posted 10 questions asked

我建了一个launcher的工程,在APP中我调用下面的逻辑,

if (CY_SYS_RESET_WDT == CySysGetResetReason(CY_SYS_RESET_WDT))
{
PWM_1_Start();
}

代码没有跳进去执行"PWM_1_Start();" ;不知道你是通过什么样的测试发现这个地方有问题的?

0 点赞
Lin_Qiang
Level 4
Level 4
5 likes given First like given 50 replies posted

sorry是我描述有问题,你能否再试一下这个if (CY_SYS_RESET_WDT&&CY_SYS_RESET_SW == CySysGetResetReason(CY_SYS_RESET_WDT)&&CySysGetResetReason(CY_SYS_RESET_SW))条件,这个在Launcher切换到App后会一直判断有,if (CY_SYS_RESET_WDT == CySysGetResetReason(CY_SYS_RESET_WDT))这个条件虽然没有判断有,但即使发生过WatchDog Reset也判断不出来。

0 点赞
LinglingG_46
Moderator
Moderator
Moderator
500 solutions authored 1000 replies posted 10 questions asked

Launcher 跳到APP的时候会调用API: CySoftwareReset();

这个你可以在static void Launcher_LaunchApplication(void)这个函数里面找到。

这样你在上面提到的if条件就成立了,理论和实验现象都是合理的。

如果像验证WDT reset的话,你可以在Laucher的code中判断。 

0 点赞
Lin_Qiang
Level 4
Level 4
5 likes given First like given 50 replies posted

我明白Launcher会有CySoftwareReset();所以我加上了CY_SYS_RESET_SW判断,但是并没有发生过WatchDog Reset,if (CY_SYS_RESET_WDT&&CY_SYS_RESET_SW == CySysGetResetReason(CY_SYS_RESET_WDT)&&CySysGetResetReason(CY_SYS_RESET_SW))这个条件依然会进入,我很困扰,你能提供一个有Launcher的例程吗?以上述的条件做判断。

0 点赞
LinglingG_46
Moderator
Moderator
Moderator
500 solutions authored 1000 replies posted 10 questions asked


这个跟工程没有关系,就是code语法的分析。
你这句话就相当于写了一个if(1&&1==1&&1),这个肯定是成立的。
因为从函数的角度出发,CySysGetResetReason(CY_SYS_RESET_WDT)和CySysGetResetReason(CY_SYS_RESET_SW))返回值是相同的为CY_SYS_RESET_SW,这两个值相与为1。 CY_SYS_RESET_WDT&&CY_SYS_RESET_SW这部分两个非0的值相与为1,所以代码每次都能执行这个条件成立的部分。

0 点赞
Lin_Qiang
Level 4
Level 4
5 likes given First like given 50 replies posted

明白了,确实是这个问题,非常感谢。

0 点赞