嵌入式编程思想:防止一段程序反复运行,使之隔一段时间运行一次

现在我遇到的嵌入式程序,基本都是在main函数里面用一个while(1),循环去执行我们所写的程序,如果不加以处理就会出现浪费cpu资源的现象。

举个例子:我们写了一个定时器程序,控制led灯变色,设想是1s灯的颜色变化一次,也就是说我们1s改变一次GPIO寄存器ODR的值就可以了。但是如果我们这样去写代码,那么我们的cpu在1s中,会把这条语句执行无数次,ODR的值会反复的被赋值。

void main(void)
{
	Initalize();
	do
	{
	LedDisplay();
	}while(1);
}
中断服务函数() //使用定时器中断来给进行定时
{
  对a进行自增或者自减操作;
}
unsigned int a;
void LedDisplay(void)
{
  switch(a)
  {
  case 1:
  GPIOA->ODR = 0x00000001 //打开PA1的输出口
  break;
  case 2:
  GPIOA->ODR = 0x00000002 //打开PA2的输出口
  break;
  }
	

上面的程序,烧到板子里面,确实,led会按想的那样,2个灯会交替闪烁,时间间隔为1s。但是在1s过度到2s的过程中,a一直是1,那么会导致switch(1)一直不断的运行,严重浪费系统资源。

如果我们的程序这样写,就能避免这个问题:

unsigned int a,b;
void InitLedDisplay(void)
{
  a = 0;
  b = 1; 
}
void LedDisplay(void)
{
  unsigned int Temp;
  Temp = a;
  if(Temp != b)
  {
  b = Temp;
  if(temp =  0)
  {
	b = 初值;
	a = 初值;
  }
  switch(Temp)
  {
  case 1:
  GPIOA->ODR = 0x00000001 //打开PA1的输出口
  break;
  case 2:
  GPIOA->ODR = 0x00000002 //打开PA2的输出口
  break;
  }

  }
}

上面代码中,a,b为全局变量,实际使用的时候常用全局结构体变量,在mian函数的文件中,会有函数会对a的值进行改变,比如在中断服务函数中,让a每1s自增一次。b这个值为中间的控制变量,b的值会跟随a的值,但是会慢一拍。这样每次进入到这个函数的时候,碰到if语句,如果条件不满足,就不会执行if里面的内容

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值