# เฉลยpolling timingพร้อมหน่วยและขอบ

ข้อมูล4กรณี/11แถวเป็นสังเคราะห์เดิม Scheduler7callsอ่านsequenceจากtest_timing.cppแล้วคำนวณ ไม่รันใหม่ Boundary4กรณีเป็นโจทย์เลขที่ประกาศ ไม่ใช่แถววัดจริง

## P1 · คาบกับงบเป็นโจทย์สมมติ

100Hzให้คาบ1/100s=0.01s=10ms=10000us งาน2+2+1+1=6msเหลือ4ms ค่านี้เป็นตัวอย่างจัดงบที่ประกาศ ไม่ใช่เวลาวัดจริงหรือมาตรฐานflightcontrollerทุกตัว งานอื่น/communication/syncต้องระบุเพิ่มก่อนจัดงบระบบจริง

## P2 · startdeltaไม่ใช่slotdeltaเสมอ

normaldata_row1→2:startdelta10100us;slotdelta10100−late100+previouslate0=10000us คู่2→3:startdelta9900us;slotdelta9900−late0+previouslate100=10000us scheduledของแถวทั้งสามคือ10000/20000/30000 Phaseคงเดิม ขอบ2ที่เริ่มช้า100usไม่ทำให้คาบที่ตั้งเปลี่ยนเป็น10100us และตัวอย่างไม่วัดjitterบนบอร์ดจริง

## P3 · เลือกรอบล่าสุดครั้งเดียว

anchorเริ่ม0:9999ไม่due/anchor0;10000due/anchor10000/late0/skipped0;10000ซ้ำไม่due/anchor10000;20123due/anchor20000/late123/skipped0;50100due/anchor50000/late100/skipped2;59999ไม่due/anchor50000;60000due/anchor60000/late0/skipped0 สูตรslots=floor((now−anchor)uint32/10000),anchor+=slots*10000 ไม่ตั้งanchor=now และทำlatestslotครั้งเดียว Non-dueไม่เขียนsampleใหม่ ช่องว่างไม่แปลว่าlate0จากtrace นี่คือsequenceที่ประกาศ ไม่ใช่ผลรันfirmware

## P4 · lateเล็กยังพลาดรอบได้

missedแถว2start40100:scheduled40000 late100usแต่skipped2สำหรับslots20000/30000 คู่จาก10000มีslotdelta30000usหรือ3slots แถว3start50100:scheduled50000 work11000usเกินงบ2000อยู่9000us=9ms และlate100+work11000=11100usจบหลังslotถัดไป60000อยู่1100us=1.1ms สองเกณฑ์ไม่เท่ากัน และworkยังไม่รวมCSVformat/Serial จึงไม่ใช่loopdeadlineทั้งระบบ

## P5 · แถวไม่ส่งกับtaskที่พลาดต่างกัน

droppeddata_row1→2:startdelta/slotdelta20000usหรือ2slots counter0→1เพิ่ม1แต่currentrow skipped0 สัญญาและโค้ดบอกว่ามีrowส่งไม่ได้หลังtaskหนึ่งรอบ ไม่ใช่taskไม่ทำทุกครั้ง ไม่มีwork/lateของrowที่หายในCSVจึงไม่แต่งค่ามารวม observedskippedรวม0หมายถึงแถวที่เห็น ไม่รับรองทั้งrun/captureตั้งแต่bootหรือหลังแถวสุดท้าย droppedไม่วัดpacketหายบนPCหรือยืนยันผู้รับได้ทุกrow

## P6 · unsignedwrapและขอบ

(8704−4294966000)mod4294967296=10000us=10ms timestampลดในกรณีนี้เป็นโจทย์wrapที่สอดคล้องกับphase ไม่ได้แปลว่าresetเสมอ ยังต้องตรวจclock/counter/runboundary โค้ดกำหนดให้เรียกภายในhalfuint32rangeและanalyzerรับdeltaระหว่างแถว0<delta<2^31us ไม่อ้างถ้าห่างหลายwrap/resetโดยไม่มีข้อมูลเพิ่ม ห้ามใช้ผลเลขบนPCยืนยันIRQlatency

## P7 · เครื่องหมายและขอบคนละเกณฑ์

B1late0/work2000:overbudgetfalse/finishafterfalse B2late0/work2001:true/false B3late8000/work2000:false/falseเพราะรวม10000เท่ากับnextslot ไม่ใช่strictlyafter B4late8001/work2000:false/trueเพราะรวม10001เกิน1us เกณฑ์analyzerเดิมใช้work>2000และlate+work>10000ตามลำดับ ไม่ใช่≥ ทั้งสี่เป็นโจทย์ใหม่ที่ประกาศ ไม่ใช่ตัวอย่างรับรองdeadlineของtaskหรือผลบอร์ด

## P8 · รายงานที่ตรวจย้อนกลับได้

ตัวอย่างmissed:อ้างsynthetic/missed.csvdata_row1–3และคู่1→2 slotdelta30000;เห็นskippedรวม2/lateสูงสุด100/workสูงสุด11000 เกินงบ1แถวและfinishafter1แถวตามคำตอบเดิม ไม่ทราบworkนอกขอบformat/Serial/capturecompleteหรือtimingบอร์ดจริง ผลcompileNUCLEO-F446REเดิมยืนยันbuildtarget ไม่ใช่upload/LED/Serial/IRQ วางbaseline/clock/jointcaptureและจุดวัดเพิ่มเมื่อมีอุปกรณ์ ใช้report-templateเป็นใบงาน ไม่ใช่รายงานผลจริง

เกณฑ์เสนอข้อละ2:คำตอบ1+เหตุผล/หน่วย/ขอบ1รวม16 P1คาบ/สมมติ P2สองคู่/phase P3due/anchor/blank P4skipped/สองเกณฑ์ P5rowกับtask/unknown P6modulo/ขอบ P7strictcomparison/โจทย์ P8แถว/ขอบ/หลักฐานเพิ่ม ไม่แทนเกณฑ์เดิมหรือผลผู้เรียนจริง
