嵌入式编程 while(1)的妙用!

在嵌入式编程代码中,我们往往能看到许多地方有while(1)的身影。最初接触嵌入式编程时,对这个常见的符号有些不解,后来慢慢熟悉后发现,while(1)原来有着这么多有用的小技巧。

1 循环主函数

我们都知道while(1)是一个死循环,很多单片机程序裸跑的时候的结构基本上为

main()
{
    init_something();

    while(1)
    {
        do_something();
    }
}

Interrupt()
{
    doing_something();
}

这样的结构使得程序在主循环中运行,有中断来时去运行中断。其效果和for(;;)类似。

2 调试代码

有时我们为了检测某一段代码是否有bug,就在这段代码后面加上while(1),程序运行完之后,便停在了这个位置,防止后面的程序对之前的程序运行结果产生影响。当然,打断点也是可以的。

3 程序复位

单片机的运行机制是由看门狗防止程序跑飞。
当单片机在规定时间内没有喂狗,这程序启动复位机制,强制单片机复位执行。
因此,在需要单片机执行复位操作的地方,可以添加while(1)来实现。

笔者测试过某些单片机,发现有些单片机存在看门狗中断,也就是在看门狗计数器快达到临界值时进入看门狗中断,在中断中喂狗。防止程序没有喂狗造成的跑飞。

如果存在这种情况,while(1)的复位效果就不那么理想了。这时我们可以编写一个简单的程序运行控制权转移函数,俗称跳转函数实现复位。
大致结构为:

static void vControlSwitch(unsigned int sp,unsigned int pc)
{
  asm("ldr   r0, [r0]");
  asm("mov   sp, r0");
  asm("ldr   r0, [r1]");
  asm("bx    r0");
}

函数中的sp为程序起始地址,pc为sp+4即复位中断地址。这样便可以实现复位操作。

关于while(1)的妙用就说到这,以后笔者会慢慢更新其他嵌入式编程相关的小技巧,敬请期待。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

董董灿是个攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值