OpenEdv-开源电子网

标题: 如果mian函数里面调的函数里面有return 0,会不会引起单片机复位 [打印本页]

作者: ddfha1    时间: 2024-7-3 11:29
标题: 如果mian函数里面调的函数里面有return 0,会不会引起单片机复位
如果mian函数里面调的函数里面有return 0,会不会引起单片机复位

如:
int main(void)
{
    uint8_t t;
    uint8_t len;
    uint16_t times = 0;

    sys_stm32_clock_init(336, 8, 2, 7);     /* 设置时钟,168Mhz */
    delay_init(168);                        /* 延时初始化 */

               
    led_init();                             /* 初始化LED */
    btim_timx_int_init(10 - 1, 8400 - 1); /* 84 000 000 / 84 00 = 10 000 10Khz的计数频率,计数5K次为500ms */
       
    while (1)
    {
        delay_ms(1);
         t++;
       if(t==200)
     {
      LED1=!LED1;
      t=0;
     led2flag=1;
     return 0;
     }       
       if(led2flag)
     {
         t2++;
           if(t2==200)
         {
          LED2=!LED2;
          t1=0;
         led2flag=0;
        return 0;
        }       

     }
               

}
这里执行到LED1翻转的时候就复位了,LED2永远也不会翻转
为什么会复位

作者: 姚先起    时间: 2024-7-3 11:29
主函数return并不会导致单片机复位,但是main函数会再次被执行。
/* Call the clock system intitialization function.*/
    bl  SystemInit
/* Call static constructors */
    bl __libc_init_array
/* Call the application's entry point.*/
        bl        main
        bx        lr
上面这段是从STM32启动文件的第93行开始,启动文件调用main函数,如果main函数退出就会运行bx lr。这时PC指针又会回到main函数入口再次执行。

作者: 三叶草    时间: 2024-7-3 12:52
没有看门狗不会
作者: ddfha1    时间: 2024-7-6 08:47
我程序加了看门狗,加看门狗会导致复位重启?

作者: ddfha1    时间: 2024-7-6 08:58
程序里面有看门狗程序




欢迎光临 OpenEdv-开源电子网 (https://www.openedv.com/) Powered by Discuz! X3.4