IDE编译器平台:IAR 3.10.4
芯片:STM8S207C8
应用此款单片机在产品设计当中需要过UL1998认证,从官网提供的class B函数库用来做自检程序中碰到问题:
1. 当程序调用到如下函数时,不能返回:
/*--------------------------------------------------------------------------*/
/*------------------- CPU registers and Flags Self Test --------------------*/
/*--------------------------------------------------------------------------*/
/* WARNING: all registers destroyed when exiting this function */
/* Initializes counter for control flow monitoring */
CtrlFlowCnt = CPU_POR_CALLER;
CtrlFlowCntInv = 0xFFFFu;
#ifdef STL_INCL_POR_CPU
if (STL_StartUpCPUTest() != CPUTEST_SUCCESS) ////标注的红色函数调用后不能返回
{
fail_safe_assert( 0x00u, "Start-up CPU Test Failure\n\r");
}
else /* Test OK */
{
/* If else statement is not executed, it will be detected by control flow monitoring */
CtrlFlowCntInv -= CPU_POR_CALLER;
#ifdef STL_VERBOSE_POR
printf("\n\rStart-up CPU Test OK\n\r");
#endif /* STL_VERBOSE_POR */
}
#endif /* STL_INCL_POR_CPU */
STL_StartUpCPUTest()为汇编语言编定的函数,程序运行到ret语句,报硬fault: ILLOPF置位。
2.当程序调用到如下函数时,不能返回:
#ifdef STL_INCL_POR_RAM
#if defined (EVAL_BOARD_CONTROL)
BSP_LED_On(LED_VLM);
#endif /* EVAL_BOARD_CONTROL */
/* WARNING: All the stack space is zero-initialized when exiting from this routine */
if (STL_FullRamMarchC() != FULL_RAM_OK) ////标注的红色函数调用后不能返回
{
fail_safe_assert( 0x03u, "RAM Test Failure");
}
#ifdef STL_VERBOSE_POR
printf("Full RAM Test OK\n\r");
#endif /* STL_VERBOSE_POR */
/* Note, control flow variables are cleared inside the RAM test routine and */
/* re-initialized before return to check correct passing of the test */
#if defined (EVAL_BOARD_CONTROL)
BSP_LED_Off(LED_VLM);
#endif /* EVAL_BOARD_CONTROL */
#else /* test is not included */
CtrlFlowCnt = 0u; /* reinit control flow variables */
CtrlFlowCntInv = 0xFFFFu;
#endif /* STL_INCL_POR_RAM */
问题点:其它用C编写的自检函数,调用后无异常,此两处需要调用到的这两个用汇编语言编写的自检函数无论如何均不能返回。感觉只要是调用汇编编写的自检函数,都无法ret!因为产品要做认证时需要用到自检程序,希望ST的FAE能提供协助,万分感谢!


块
导
航
举报
请选择举报类别
- 广告垃圾
- 违规内容
- 恶意灌水
- 重复发帖