วินิจฉัย Log ของ STM32

บอร์ดพัฒนาเชื่อม debugger ข้างกราฟ log และออสซิลโลสโคปบนโต๊ะวิเคราะห์ระบบควบคุม
ภาพจำลองแนวคิดสร้างด้วย AI ไม่ใช่ภาพหน้าจอหรือรุ่นอุปกรณ์ที่ยืนยันการรองรับ

ก่อนเริ่มฝึก

วัตถุประสงค์: วิเคราะห์ข้อมูลเก่า การปฏิเสธเข้าคิว และแถวที่ไม่ได้ส่ง พื้นฐาน: อ่าน 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 ทุกไบต์ ชุดนี้เพิ่มกรณีฝึกและคำอธิบาย ไม่มีเฟิร์มแวร์หรือผลคอมไพล์ใหม่ ข้อมูลทั้งเจ็ดกรณีเป็น ข้อมูลสังเคราะห์เพื่อการเรียน

ไดอะแกรมอ่าน Log: ตรวจรูปแบบและช่องว่างก่อนแยก stale, queue overflow และแถวที่ส่งไม่ได้ แล้วเขียนข้อจำกัดของหลักฐาน

ไดอะแกรมการวินิจฉัยในธีมเดียวกับคลังความรู้: เริ่มจากสัญญา CSV แล้วแยกชนิดปัญหา ภาพไม่แสดงผลทดลองบอร์ดจริง · เปิดไดอะแกรมขนาดเต็ม

ดาวน์โหลด: ZIP ชุดฝึกวินิจฉัย Log · ใบงาน CSV · เฉลยพร้อมเหตุผล Markdown · ค่าคำตอบ JSON · Manifest และแฮชไฟล์

ขั้นตอนฝึกบนคอมพิวเตอร์

  1. แตก ZIP ในโฟลเดอร์ใหม่ อ่าน README.md แล้วเปิด worksheet.csv เริ่มกรอกคำตอบจาก CSV ก่อนดูเฉลย
  2. รัน python analyze_freshness.py synthetic/stale-only.csv ในโฟลเดอร์ที่แตกไฟล์ บน Linux เปลี่ยนเป็น python3; Windows ที่ใช้ Python Launcher ใช้ py -3 ได้ ไม่ต้องติดตั้ง package เพิ่ม
  3. เปลี่ยนไฟล์ตามลำดับในตาราง คำนวณ delta ของ tick, overflow, dropped ระหว่างสองแถว ไม่ใช้ยอดสะสมแทน delta
  4. เทียบ JSON กับ answers.json และอ่านเหตุผล/ข้อจำกัดใน answers.md กรณี unexplained-gap.csv ต้องคืน exit code 2 พร้อม Invalid log ห้ามแก้ counter ด้วยการเดาให้ผ่าน
  5. รัน 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 ไม่ต้องมีบอร์ดหรือติดตั้งเพิ่ม

ไดอะแกรมคำนวณdeltaของคู่แถว แยกqueueและSerialloss แยกยอดสะสมจากการเพิ่มในช่วง และปฏิเสธช่องว่างที่counterอธิบายไม่ได้

คงภาพเสมือนจริงและแผนผังเดิม ใช้ข้อมูลสังเคราะห์เจ็ดกรณีเดิม ไม่ใช่ผลบอร์ดหรือผลรัน 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 ของชุดฝึกนี้ ค่าที่แสดงไม่ใช่การรับรองความปลอดภัยการบิน

STM32timinglogไมโครคอนโทรลเลอร์