zoukankan      html  css  js  c++  java
  • 某个通信的异常判断存在于两个任务中时计算通信超时的一种思路

    任务A :1ms任务,将通信timeout cnt++ , 优先级低;

    任务B :中断触发的任务,当报文正常时,会将timeout cnt 清零 , 优先级高;

    假设使用在任务B中直接将timeout cnt = 0的方式,可能存在风险;

    查看汇编代码,可以知道,timeout cnt++的操作实际上是①先将timeout cnt 放入到加寄存器中,②然后将加寄存器进行加1操作,③再将结果重新赋值给timeout cnt这个变量;

    假如在②的位置,任务A被任务B打断,则会出现,虽然任务B中把timeout cnt清零了,但是在重新切换到A任务时,还是会将加法寄存器中的数值重新负值为timeout cnt这个变量;

    加入任务A每次都在此位置被B打断,则timeout cnt变量将会一直往上自加。

    在任务A和任务B访问全局timeout cnt 变量时加锁,是肯定可以达到真正清零的目的;

    不通过加锁的方式,另外一种思路:

    增加一个packetIndex变量,在任务B中,当报文正常时,packetIndex++;

    在任务A中使用一个静态变量,tempIndex;

    if(tempIndex == packetIndex)
    {
       timeout cnt++;      
    }
    
    else{
       timeout cnt = 0;
    tempIndex = packetIndex; }
  • 相关阅读:
    数据库中总结2
    PyMySQL的基本使用
    数据库总结
    并发编程之多线程
    并发编程之多进程知识
    并发编程之多进程
    操作系统基础知识
    模块二总结
    Python函数进阶
    文件操作
  • 原文地址:https://www.cnblogs.com/DawaTech/p/12572157.html
Copyright © 2011-2022 走看看