ก่อนเริ่มฝึก
วัตถุประสงค์: วิเคราะห์ข้อมูลเก่า การปฏิเสธเข้าคิว และแถวที่ไม่ได้ส่ง พื้นฐาน: อ่าน CSV หกช่องจากบท Freshness Gate ได้ เวลาฝึกโดยประมาณ: 45 นาที เป็นเวลาที่ผู้จัดทำเสนอ ยังไม่ได้วัดกับผู้เรียนจริง
ตรวจความเข้าใจ: ทำใบงานเจ็ดกรณีและอ้างแถวที่สนับสนุนข้อสรุป ใช้ผลชุดเดิมประกอบการเรียน การคอมไพล์หรือการจำลองที่ผ่านยังไม่ยืนยันบอร์ดหรือการบินจริง
ดูเส้นทางเรียนทั้งหมด · ทบทวนเซนเซอร์และการสื่อสาร
ชุดฝึก: วินิจฉัย Log ของ STM32
ใช้เพื่ออะไร: ฝึกอ่านหลักฐานจากชุด Data Freshness ก่อนแก้คิวหรือเกณฑ์เวลา แยก stale (รับ event แล้วข้าม task), overflow (ปฏิเสธ event ตอนคิวเต็ม) และ dropped (main ส่งแถวไม่ได้) พร้อมรู้ว่าข้อมูลที่ไม่ได้บันทึกยังสรุปไม่ได้
เหมาะกับผู้ผ่าน FIFO และ CSV หกช่อง ใช้ Python 3 บน Windows/Linux ได้โดยไม่ต้องต่อบอร์ด Analyzer เหมือนรุ่น 1.15.8 ทุกไบต์ ชุดนี้เพิ่มกรณีฝึกและคำอธิบาย ไม่มีเฟิร์มแวร์หรือผลคอมไพล์ใหม่ ข้อมูลทั้งเจ็ดกรณีเป็น ข้อมูลสังเคราะห์เพื่อการเรียน
ไดอะแกรมการวินิจฉัยในธีมเดียวกับคลังความรู้: เริ่มจากสัญญา CSV แล้วแยกชนิดปัญหา ภาพไม่แสดงผลทดลองบอร์ดจริง · เปิดไดอะแกรมขนาดเต็ม
ดาวน์โหลด: ZIP ชุดฝึกวินิจฉัย Log · ใบงาน CSV · เฉลยพร้อมเหตุผล Markdown · ค่าคำตอบ JSON · Manifest และแฮชไฟล์
ขั้นตอนฝึกบนคอมพิวเตอร์
- แตก ZIP ในโฟลเดอร์ใหม่ อ่าน
README.mdแล้วเปิดworksheet.csvเริ่มกรอกคำตอบจาก CSV ก่อนดูเฉลย - รัน
python analyze_freshness.py synthetic/stale-only.csvในโฟลเดอร์ที่แตกไฟล์ บน Linux เปลี่ยนเป็นpython3; Windows ที่ใช้ Python Launcher ใช้py -3ได้ ไม่ต้องติดตั้ง package เพิ่ม - เปลี่ยนไฟล์ตามลำดับในตาราง คำนวณ delta ของ
tick,overflow,droppedระหว่างสองแถว ไม่ใช้ยอดสะสมแทน delta - เทียบ JSON กับ
answers.jsonและอ่านเหตุผล/ข้อจำกัดในanswers.mdกรณีunexplained-gap.csvต้องคืน exit code 2 พร้อมInvalid logห้ามแก้ counter ด้วยการเดาให้ผ่าน - รัน
python test_cases.pyเพื่อตรวจหกกรณีที่สอดคล้องและหนึ่งกรณีที่ถูกปฏิเสธ จากนั้นเขียนสรุป “สิ่งที่เห็น → สิ่งที่ยังบอกไม่ได้ → หลักฐานที่จะเก็บเพิ่ม” ต่อกรณี
เลือกกรณีฝึกและสิ่งที่ต้องสังเกต
ไฟล์ใน synthetic/ |
จุดฝึก | คำตอบย่อจากข้อมูลที่เห็น |
|---|---|---|
stale-only.csv |
ข้อมูลเก่าโดยไม่มี reported loss | fresh 1 / stale 2; age 20,000 us ยัง fresh |
queue-loss.csv |
callback ที่ถูกปฏิเสธตอน enqueue | delta tick 3 = overflow 2 + dropped 0 + แถวปัจจุบัน 1 |
serial-loss.csv |
แถวที่ main ส่งไม่ได้ | delta tick 2 = overflow 0 + dropped 1 + แถวปัจจุบัน 1 |
combined-loss.csv |
ปัญหาคิวและช่องส่งในช่วงเดียวกัน | delta tick 4 = overflow 2 + dropped 1 + แถวปัจจุบัน 1 |
task-budget.csv |
งานที่ยัง fresh แต่เกิน budget ฝึก | task 2,001 us เกิน 2,000 us หนึ่งแถว; ไม่ใช่ผล loop deadline |
partial-window.csv |
แยกยอดสะสมกับการเพิ่มในช่วง | overflow 7 / dropped 3 คงเดิมทั้งสองแถว จึงไม่มีการเพิ่มที่รายงานระหว่างคู่นี้ |
unexplained-gap.csv |
ตรวจข้อมูลที่อธิบายช่องว่างไม่ได้ | delta tick 2 แต่ผลรวม 0 + 0 + 1 = 1; ต้องปฏิเสธ |
สมการใช้ได้กับสัญญาของโปรแกรมเดิม: delta_tick = delta_overflow + delta_dropped + 1 โดย delta tick แบบ uint32 อยู่ในช่วง (0, 2^31), clock/boot เดิม และ counters ไม่ reset/wrap overflow ถ่ายค่าตอน enqueue ของ event นั้น ส่วน dropped เป็นยอดแถวที่ main ส่งไม่ได้ก่อนแถวปัจจุบัน ผ่าน analyzer จึงหมายถึงสอดคล้องกับส่วนของสัญญาที่ตรวจได้ ไม่ได้รับรอง capture ครบ
คำแนะนำและเกณฑ์ตรวจงาน
ถ้า stale เพิ่ม ให้ตรวจช่วงหยุดอ่านคิวและงานใน main; ถ้า overflow เพิ่ม ให้ตรวจอัตรารับกับอัตราบริการ; ถ้า dropped เพิ่ม ให้แยกการสร้างแถว ช่องส่ง Serial และการบันทึกฝั่ง PC ด้วยหลักฐานเพิ่มเติม เปลี่ยนทีละปัจจัยและเก็บไฟล์ต้นฉบับไว้ อย่าเพิ่มคิวหรือ cutoff เพียงเพื่อทำให้รายงานผ่าน
ให้กรณีละ 3 คะแนน: delta/การปฏิเสธถูก 1, สรุปเฉพาะสิ่งที่เห็น 1, ระบุข้อจำกัดและหลักฐานขั้นต่อไป 1 รวม 21 คะแนน เป็นเกณฑ์ฝึกสำหรับผู้สอน ยังไม่มีผลทดลองกับผู้เรียนจริง
ข้อจำกัดที่ต้องเขียนในรายงาน: no_reported_queue_or_log_losses=true ไม่ได้แปลว่าไม่มี stale หรือ capture ครบ; แถวที่ส่งไม่ได้ไม่เปิดเผย state/work ของแถวนั้น; overflow หลัง enqueue สุดท้ายอาจไม่ปรากฏ ชุดนี้ไม่มี queue occupancy, boot ID หรือ capture-end snapshot อายุ callback ไม่ใช่อายุเซนเซอร์/IRQ latency และ fresh ณ จุดตรวจอาจเก่าเมื่อใช้ภายหลัง Budget/freshness เป็นเกณฑ์ฝึก ไม่มีข้อสรุปด้านความปลอดภัยการบินจาก CSV นี้
เมื่อมีอุปกรณ์ ให้กำหนด capture boundary/boot identity และจุด timestamp ที่สัมพันธ์กับ requirement ก่อนวัด occupancy หรือ IRQ latency อ้างอิงกลไก mask/restore ของ CMSIS PRIMASK ในชุดต้นทาง โดยชุดฝึกนี้ไม่ได้เปลี่ยน ISR หรือการจัดการ interrupt
เรียนต่อและทบทวน
ทบทวน อายุข้อมูลและ Freshness Gate · เรียนต่อ ที่มาและขอบเขต Log · กลับภาพรวมขั้นสูง
อ่านข้อมูลผ่านเครื่องมือบนเว็บ
เปิดเครื่องมืออ่าน CSV และกราฟ Log เพื่อฝึกจากตัวอย่างสังเคราะห์หรือ CSV หกช่องของชุด Freshness Gate ประมวลผลในเครื่อง รองรับไม่เกิน 1 MB/10,000 แถว ขอบเขตแคบกว่า analyzer Python เดิม ใช้ผลจากทุกแถวคำนวณสถิติ ส่วนกราฟแสดงสูงสุด 1,000 จุดและอาจไม่เห็นยอดแหลมทั้งหมด
ฝึกวินิจฉัยจากคู่แถวและเขียนรายงาน
วัตถุประสงค์: ใช้ delta แยกเหตุข้อมูลเก่า คิวเต็ม และส่งแถวไม่ได้ แล้วเขียนข้อสรุปที่ตรวจย้อนกลับได้ พื้นฐาน: ผ่าน FIFO/Freshness Gate และอ่าน CSV หกช่องได้ เวลาเสนอ: 45–60 นาที ยังไม่ได้วัดกับผู้เรียนจริง ใช้กระดาษหรือโปรแกรมอ่าน CSV ไม่ต้องมีบอร์ดหรือติดตั้งเพิ่ม
คงภาพเสมือนจริงและแผนผังเดิม ใช้ข้อมูลสังเคราะห์เจ็ดกรณีเดิม ไม่ใช่ผลบอร์ดหรือผลรัน analyzer ใหม่
ดาวน์โหลด วิธีฝึกวินิจฉัย, ใบงาน 8 ข้อ, ตารางคู่แถวว่าง, ข้อมูลเดิม 15 แถว และ แบบรายงานว่าง ทำก่อนเปิด เฉลยเหตุผล, เฉลยคู่แถว กับ คำตอบ JSON เดิม ตรวจที่มา/SHA-256 จาก manifest
1. แยกกรณีและคำนวณคู่แถว · Q1–Q4
กรอกตารางทั้งแปดคู่จากเจ็ดกรณี โดยแยก scenario ก่อนหาผลต่าง ห้ามคำนวณข้ามขอบไฟล์ ใช้ tick แบบ uint32 และ counter ที่ไม่ reset/wrap อ้าง data_row ซึ่งนับแถวข้อมูลไม่รวม header ไม่ใช่เลขบรรทัดดิบ แล้วตรวจสมการของ schema เดิมพร้อม state/work และขอบตัวเลข
คำแนะนำ: stale คือข้าม task เพราะข้อมูลเก่า overflow คือปฏิเสธ enqueue ส่วน dropped คือส่ง row ไม่ได้ สถานะของ event/row ที่ไม่อยู่ใน Log ให้ตอบว่าไม่ทราบพร้อมเหตุผล ไม่เติมผลรวมด้วยการเดา
2. อ่านส่วนงานและหน้าต่างข้อมูล · Q5–Q6
หาแถว fresh ที่ work เกินงบฝึก 2,000 µs แปลงหน่วยและระบุส่วนงานที่ work ไม่ครอบคลุม จากนั้นอ่าน partial-window ที่ยอด overflow7/dropped3 คงเดิม แยกยอดสุดท้ายจาก delta ระหว่างคู่ คำแนะนำ: flag ว่าไม่มี reported loss ใช้ยอดสะสม จึงต้องอธิบายหน้าต่างและตำแหน่ง snapshot ประกอบ
3. เก็บ Log ที่ผิดสัญญาไว้ตรวจ · Q7
กรณี unexplained-gap มี delta_tick2 แต่ counter อธิบายได้1 ให้ระบุว่าต้องปฏิเสธพร้อมสมการ เก็บต้นฉบับ/แฮชและตรวจ schema โปรแกรม และขอบ capture ไม่เดาเติม counter หรือฟันธงว่าอุปกรณ์ส่วนใดเสีย ไม่เอากรณีที่ถูกปฏิเสธไปรวมสถิติที่รับรองของกรณีที่ผ่าน
4. เขียนรายงานที่อ้างหลักฐาน · Q8
เลือกกรณีหนึ่งกรอกแบบรายงานสามส่วน: สิ่งที่เห็น → สิ่งที่ยังไม่ทราบ → หลักฐานที่จะเก็บเพิ่ม ระบุไฟล์/แถว/คู่/หน่วย/ขอบเวลาและสมมติฐานก่อนเสนอเปลี่ยนคิวหรือ cutoff เมื่ออธิบายได้ให้ต่อ ที่มาและขอบเขต Log
หากใช้ เครื่องมืออ่าน CSV บนเว็บ ให้นำ CSV เดิมหกคอลัมน์จาก ZIP เข้าเครื่องมือ ไฟล์รวมใหม่มี metadata เพิ่มจึงไม่ตรง schema สำหรับอัปโหลด และกรณีผิดสัญญาต้องถูกปฏิเสธตามตัวตรวจ
ตรวจตนเอง: ชุดนำทางนี้เสนอข้อละ2 (คำตอบ1+เหตุผล/หน่วย/ข้อจำกัด1) รวม16 แยกจากเกณฑ์7กรณี×3ของชุดเดิม ใช้เลือกทบทวน ไม่ใช่ผลผู้เรียนจริง รอบนี้ตรวจตัวเลขและที่มา ไม่รัน analyzer/compile/firmware/SITL หรือทดลองบอร์ดใหม่
เลือกชุดฝึกหรือทบทวนต่อ
กลับสารบัญชุดฝึก MCU 10 ชุด เพื่อเลือกโจทย์ตามเป้าหมายและพื้นฐานที่ควรรู้ หรือ ทำแบบประเมินความเข้าใจ 12 ข้อ เพื่อหาหัวข้อที่ควรทบทวน
หลังตรวจเฉลย ให้บันทึกคำตอบที่แก้ เหตุผล และสิ่งที่หลักฐานยังไม่ยืนยัน แล้วเลือกชุดถัดไปที่ช่วยตอบคำถามนั้น คะแนนใบงานกับแบบประเมินเป็นคนละส่วน ใช้เลือกทบทวนด้วยตนเอง
ทดลองอ่าน Log บนเว็บ
เลือกตัวอย่างสังเคราะห์ หรือเปิด CSV หกช่องของชุด Freshness Gate เพื่อดูอายุข้อมูลและเวลาทำงาน ไฟล์ประมวลผลในเบราว์เซอร์ ไม่ส่งขึ้นเซิร์ฟเวอร์และไม่บันทึกไฟล์ในความก้าวหน้า
รองรับ CSV ตัวเลขแบบไม่ใส่เครื่องหมายคำพูด UTF-8/BOM และ CRLF/LF ไม่เกิน 1,000,000 ไบต์/10,000 แถว ไม่รองรับแถวว่างกลางไฟล์ ใช้ขอบอายุ 20,000 µs และงบงาน 2,000 µs ของชุดฝึกนี้ ค่าที่แสดงไม่ใช่การรับรองความปลอดภัยการบิน