📄 updatequeueafterschedule.m
字号:
function [QueueLength,QueueFront] = ...UpdateQueueAfterSchedule(ATTrafficType,ATDelayRequire,N,Slot,SimTime,ATRate, ATQueueLength, ATQueueFront,ATQueueEnd, SlotTime)global ATQueue;OutData = floor(ATRate * SlotTime);QueueLength = ATQueueLength;QueueFront = ATQueueFront;QueueEnd = ATQueueEnd;global ATDelay;global ATPacketDropNum;MaxArrayLength = 5000;% arrayIndex = mod(Slot-1,MaxArrayLength)+1;for a = 1:N if ATTrafficType(a) == 4 if OutData(a) == 0 for packetIndex = QueueFront(a):QueueEnd(a) temp = mod(packetIndex-1,MaxArrayLength)+1; if ATQueue(temp,a) > 0; if ATDelay(temp,a) == ATDelayRequire(a)-1 && ATTrafficType(a) == 4 ATQueue(temp,a) = 0; QueueFront(a) = min(packetIndex+1,QueueEnd(a));%因为到达最大时延,RT业务丢失一个包 ATPacketDropNum(a) = ATPacketDropNum(a) + 1; else ATDelay(temp, a) = ATDelay(temp, a) + 1; end end end% continue; else% time = QueueFront(a); while OutData(a) > 0 && OutData(a) >= (ATQueue(mod(QueueFront(a)-1,MaxArrayLength)+1,a)) OutData(a) = OutData(a) - ATQueue(mod(QueueFront(a)-1,MaxArrayLength)+1,a); ATQueue(mod(QueueFront(a)-1,MaxArrayLength)+1,a) = 0; QueueFront(a) = min(QueueFront(a) + 1,QueueEnd(a)); end if QueueFront(a) < SimTime ATQueue(mod(QueueFront(a)-1,MaxArrayLength)+1,a) = ATQueue(mod(QueueFront(a)-1,MaxArrayLength)+1,a) - OutData(a); end for packetIndex = QueueFront(a):QueueEnd(a) temp = mod(packetIndex-1,MaxArrayLength)+1; if ATQueue(temp,a) > 0; if ATDelay(temp,a) == ATDelayRequire(a)-1 && ATTrafficType(a) == 4 ATQueue(temp,a) = 0; QueueFront(a) = min(packetIndex+1,QueueEnd(a));%因为到达最大时延,RT业务丢失一个包 ATPacketDropNum(a) = ATPacketDropNum(a) + 1; else ATDelay(temp, a) = ATDelay(temp, a) + 1; end end end end elseif ATTrafficType(a) == 2 end % Delay(Slot, a) = Slot - time;end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -