·上一文章:面向LCD的电磁干扰滤波器
·下一文章:基于FPGA实现的FFT插值正弦波频率估计
2 基于优先级晋升算法的系统调度
CAN总线采用非破坏的逐位仲裁技术,当2个或2个以上节点同时向网络上传送数据时,总线通过仲裁,使优先级低的节点主动停止发送数据,而优先级高的节点可不受影响继续传输数据。在竞争中被取消发送权的节点将等待下一个总线空闲期自动地再尝试发送。在系统运行过程中,某些节点(如打击力场温度场测试节点)不断有大量数据需要传送时,会造成网络负载繁重,有可能导致其他优先级较低的节点数据传输延时的不确定性,使整个网络实时性和可靠性大大降低。
为此,测试系统采用了优先级晋升算法进行总线调度。首先需要将CAN的数据帧的仲裁字段划分为优先级标识和帧标识两部分,帧标识部分与传统的数据帧标识符意义相同,而优先级标识部分只表示数据帧的优先级,它根据总线调度机制分配给数据帧的优先级的变化而变化。在系统中有个优先级队列,每个节点仅存储本节点在队列中的位置,其值PRIi=PRIi0-fi(t)。PRIi0。为节点的初始位置,PRIi0=-(2l-l-xi0),l为优先级标识位数,xi0为系统分配的初始优先级因子。fi(t)为优先级晋升项,t可以是排队时间,这里fi(t)设为kn,其中n为数据自首次发送以来,仲裁失败的次数,k为权重,k值越大,数据帧的优先级随仲裁失败次数的增加晋升越快。这样,PRIi=(2l-1-xi0)-kn,优先级晋升的算法流程如图2所示。随着节点数据优先级的提高,发送成功的概率也增大了。通过提高优先级发送成功的节点数据在发送成功后,再把其优先级降为初始优先级。