多任务时的参数传递处理

背景:在开发板上判断旋钮左旋和右旋从而控制一个数的增加和减小(TASK A),同时在LCD上显示这个数(TASK B)。

问题:假设左旋一下,则在LCD上显示左旋了很多下,用串口显示确实多次操作了。

思考:认真思考后发现问题出在任务的同步上,当A从开始到结束,有可能B已经运行很多次了,这就导致了多次判断出错。

解决:

A:

if (Knob_num && Knob_dir) {
   Knob_num_temp = Knob_num;
   Knob_dir_temp = Knob_dir;
   Knob_num = Knob_dir = 0;
   if(Knob_dir_temp == KNOB_LEFT) {
      position_x --;
   } else {
        position_x ++;
   }
}

B:

if (Knob_num_temp && Knob_dir_temp) {
   //do some thing
    Knob_num_temp = Knob_dir_temp = 0;
}
当A中检测到旋钮旋转时,把状态传给中间变量,然后清零,之后在A中对状态的操作都换成对中间变量的操作。

在B中用中间变量作为if进入条件,这样当进入A时,即使任务切换至B也只会进入一次B中if,这样就用两个"多余“的变量实现了“同步”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值