|
SDK สำหรับ TESAIoT Dev Kit
คู่มืออ้างอิง API และ Tutorial (MTB & µPython)
|
บทนี้ไม่รวมอยู่ในชุดเอกสารของ mtb-only เพราะ variant นั้นไม่มี REPL และไม่มี TACP ซึ่งเป็นเหตุผลที่ BENTO IDE แฟลชมันไม่ได้ (variants/mtb-only.mk ~:19-20)
รู้กฎ 3 ข้อของ TACP: init หนึ่งครั้งต่อหนึ่ง soft reset ปั๊ม UART ภายในทุกลูปที่รอ และประกอบเฟรมของทุกคำตอบด้วยความยาวจริงของมัน พร้อมรู้จักทางออกฉุกเฉินฝั่ง ISR ที่มีไว้สำหรับวันที่ /main.py วิ่งหลุดจนทำให้ตัวปั๊มอดตาย
init หนึ่งครั้งต่อหนึ่ง soft reset tacp_init() ล้าง ring buffer, state machine และ FIFO ของ UART เพื่อไม่ให้ไบต์ที่ค้างอยู่ทำให้เกิดการรีเซ็ตซ้ำสองครั้ง:
ตัวปั๊ม tacp_poll_uart() เป็นตัวปั๊ม ไม่ใช่ตัวตรวจเงื่อนไข — จุดเรียกทั้ง 7 จุดในเทมเพลตทิ้งค่าที่คืนมาทั้งหมด ฟังก์ชันนี้ทำงานใน MicroPython task context และวางไว้ภายในทุกลูปที่รอ:
รูปแบบสำหรับ FreeRTOS จับคู่มันกับ vTaskDelay(pdMS_TO_TICKS(1)):
การประกอบเฟรมของคำตอบ tacp_claw_respond() รับ payload_len เป็นค่าที่ snprintf คืนมาจริงแคสต์เป็น uint16_t — ห้ามใช้ strlen ของบัฟเฟอร์ที่ถูกตัดสั้น:
เฟรม TACP_CLAW_READY ส่งออกหลังจาก tacp_init(), mp_init(), การเมานต์ VFS และ boot/main.py เท่านั้น (mpy_main.c:697-703) เฟรมเป็นข้อมูลไบนารี และห้ามผสมข้อความตัวอักษรเข้าไปในสตรีม (modbentoclaw.c:1967-1971)
ทางออกฉุกเฉินฝั่ง ISR เรียกจาก IPC ISR โดยมี BENTO_HAS_MPY เป็นตัวกัน สำหรับกรณีที่ /main.py วนไม่รู้จบจนทำให้ tacp_poll_uart() อดตาย:
แฟลช ตัดไฟแล้วจ่ายไฟใหม่ เปิด BENTO IDE ที่พอร์ตของบอร์ด
สิ่งที่ควรสังเกต IDE รายงานว่าบอร์ดพร้อม บนคอนโซลดิบจะเห็น [MPY] GC heap u KB @ p in s (mpy_main.c:552-554) มาก่อนหน้านั้น ส่วนเฟรม READY เองเป็นข้อมูลไบนารีและไม่พิมพ์ออกมา
สิ่งที่ควรสังเกต ปุ่ม stop/reset ของ IDE ยังใช้ได้ — time.sleep_ms ผ่าน MICROPY_EVENT_POLL_HOOK ซึ่งเป็นที่อยู่ของตัวปั๊ม ส่วนลูปที่วนกินเวลาโดยไม่ยอมคืนคิว (ไม่มี sleep ไม่มี poll hook) จะไม่ปั๊ม และ IDE จะเสียการติดต่อกับบอร์ดจนกว่าจะใช้ทางออกฉุกเฉินฝั่ง ISR หรือ hard reset
tacp_ring_buf_read() และ tacp_ring_buf_readable() ส่งออกมาโดย ไม่มีผู้เรียกที่ใดเลย (นิยามอยู่ที่ tacp.c:885/:889) ตัวอย่างของทั้งสองเป็นตัวอย่างที่เขียนขึ้นเองและกำกับไว้เช่นนั้นในคู่มืออ้างอิง mpy_secure ให้ถือว่าเป็นเครื่องมือช่วยตรวจสอบ ไม่ใช่ส่วนหนึ่งของเส้นทางโปรโตคอลที่ส่งมอบจริง
mtb-mpy เท่านั้น บน mtb-only ตัว IDE เข้าถึงบอร์ดไม่ได้ สัญญาณเดียวบนคอนโซลคือ [HB] t=lus tasks=u