首页 论坛 原厂专区 ST MCU STM8S207C8 class B库的自检程序调用汇编返回异常

发帖 回复

[求助] STM8S207C8 class B库的自检程序调用汇编返回异常
2005 查看
16 回复
 楼主 | 发布于 2018-09-07 | 只看楼主
分享到:
由于代理商没有提供技术支持,在应用STM8S207C8设计的产品需要用到自检程序,在调用官方提供的class B库时,调用到有汇编的自检程序时,出现无法返回的异常!具体描述问题如下:

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!因为产品要做认证时需要用到自检程序,希望STFAE能提供协助,万分感谢!

(0 ) (0 )
回复 举报

回复于 2018-09-15 11#

支持下,谢谢分享
(0 )
评论 (0) 举报

回复于 2018-09-15 12#

支持下,谢谢分享
(0 )
评论 (0) 举报

回复于 2018-09-15 13#

支持下,谢谢分享
(0 )
评论 (0) 举报

回复于 2018-10-19 14#

感谢分享,有需要机器人方案的可联系我,相互学习,共同进步
(0 )
评论 (0) 举报

回复于 2018-10-19 15#

感谢分享,有需要机器人方案的可联系我,相互学习,共同进步
(0 )
评论 (0) 举报

回复于 2019-02-09 16#

谢谢分享
(0 )
评论 (0) 举报
发表回复
0/3000





举报

请选择举报类别

  • 广告垃圾
  • 违规内容
  • 恶意灌水
  • 重复发帖

全部板块

返回顶部