矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: bios

请教各位,while程序有疑惑,请帮忙!

[复制链接]
     
 楼主| 发表于 2019-8-3 10:41:13 | 显示全部楼层
谢谢大家,明白了
main()
{
}
这个主程序,就是一个大循环,我一开始没理解到这一点
我在最下面,}前,加了一句while(1);
这下程序可以停下了,谢谢大家上面各位的指点,谢谢
回复 支持 反对

使用道具 举报

     
发表于 2019-8-6 08:00:06 | 显示全部楼层
本帖最后由 xiaomu 于 2019-8-6 08:58 编辑

void delay(unsigned int a)                  
{            
    unsigned int i;
    while(a- - !=0)
     {
           for(i=0;i < 125; i ++);
      }




}

void main(void )
{        
         led=0;
        delay(1000);
         led =1;
}


/*参考杜洋《单片机魔法编程学校》第一个参考程序, 鸣谢!
最早是在无线电杂志阅读到,19年夏重温*/
我还是认为main()函数只执行一次,想要led闪烁需要加入无限循环语句。
回复 支持 反对

使用道具 举报

     
发表于 2019-8-6 17:53:46 | 显示全部楼层
看看终止代码。
启动代码大家都知道,程序引导到 main() ,但跳出 main() 之后就很少有人关注了,终止代码方式不一样。
有的在最后安排一条复位指令,有的安排一条停机指令,有个输出终止运行的状态信息,有的啥也不做根本就没有这部分。

我这个启动代码在执行完 main() 之后是停在这的。

void __thumb_startup(void)

{
                // Setup registers
                __init_registers();


                // setup hardware
                __init_hardware();


                //        zero-fill the .bss section
                zero_fill_bss();


                //      initialize the floating-point library

#ifdef __VFPV4__

                __fp_init();

#endif

                //        call C++ static initializers
                __call_static_initializers();


                // initializations before main, user specific
                __init_user();


                //        call main(argc, &argv)
                exit(main(0, argv));


                //        should never get here

                while (1);
}

另一个BOOTLOADER 的在做完IAP之后是重启或者重映射加载到APP里去。

所以具体还是要看启动代码(或者终止代码)。
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-29 08:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表