SDK สำหรับ TESAIoT Dev Kit
คู่มืออ้างอิง API และ Tutorial (ModusToolbox)
Loading...
Searching...
No Matches
จังหวะของเซนเซอร์

Functions

void ai_engine_set_sensor_rate (uint32_t interval_ms)
 ตั้งช่วงเวลาการป้อนข้อมูลของเซนเซอร์วัดความเร่ง; เป็นผู้ส่งรายเดียวที่ถูกต้องบน s_rate_msg
void ai_engine_resume_sensor (void)
 resume จังหวะค่าเริ่มต้นแบบยืนเดี่ยว; ห้ามเรียกติดกันกับการตั้งอัตรา

Detailed Description

ฟังก์ชัน 2 ตัวที่ใช้บัฟเฟอร์ข้อความ CY_SECTION_SHAREDMEM (s_rate_msg) ร่วมกันเพียงก้อนเดียว และใช้ Cy_IPC_Pipe_SendMessage แบบอะซิงโครนัสร่วมกันเพียงตัวเดียว ข้อเท็จจริงข้อเดียวนั้นคือข้อกำหนดการเรียกใช้ทั้งหมดของหัวข้อนี้

variant ที่ใช้ได้
mtb-mpy และ mtb-only

Function Documentation

◆ ai_engine_set_sensor_rate()

void ai_engine_set_sensor_rate ( uint32_t interval_ms)

ตั้งช่วงเวลาการป้อนข้อมูลของเซนเซอร์วัดความเร่ง; เป็นผู้ส่งรายเดียวที่ถูกต้องบน s_rate_msg

Set the accelerometer feed interval (20 = 50 Hz model rate, 100 = 10 Hz dashboard). Eva Kit drives a local LVGL timer; AI Kit sends an IPC rate request to CM33. Callable from any CM55 task.

ข้อกำหนดการเรียกใช้
ตั้งช่วงเวลาการป้อนข้อมูลของเซนเซอร์วัดความเร่ง (accelerometer) — เป็น 20 (อัตราของโมเดลที่ 50 Hz) หรือ 100 (dashboard ที่ 10 Hz) AI Kit ส่งคำขอเปลี่ยนอัตราแบบ op=2 ผ่าน IPC ไปยัง CM33; ส่วน Eva Kit ขับตัวจับเวลาของ LVGL ในเครื่องเอง เรียกได้จาก CM55 task ใด ๆ ฟังก์ชันนี้ต้องเป็นผู้ส่ง IPC รายเดียวบนบัฟเฟอร์ s_rate_msg ที่ใช้ร่วมกันห้ามเรียกติดกันกับ ai_engine_resume_sensor(): การส่งเป็นแบบอะซิงโครนัส CM33 อ่านบัฟเฟอร์ผ่านพอยน์เตอร์หลังจากการเรียกคืนค่ากลับมาแล้ว และ memset ที่อยู่ต้นของ resume จะล้าง op=2 ที่ยังเดินทางอยู่ให้เป็นศูนย์ CM33 จึงอ่านได้ data[0] == 0 = PAUSE (ai_engine.c:522-536) call site ที่ส่งมอบจริงทั้ง 5 จุด (deepcraft_task.c:665,:688,:765,:805,:822) ส่งค่าที่ได้จาก dc_desired_sensor_rate() ซึ่งไล่ดู set ที่ active อยู่และยกอัตราขึ้นเป็น 50 Hz หากมีสมาชิกรายใดก็ตามเป็น AI_SENSOR_IMU อัตรานี้ถูกยืนยันเฉพาะภายในสาขาที่สำเร็จของ ai_engine_start() ถูกลดลงทุกครั้งที่ ai_engine_stop() และถูกยืนยันซ้ำทุก 2 s เพื่อให้ระบบซ่อมตัวเองได้
variant ที่ใช้ได้
mtb-mpy และ mtb-only
ที่มา
ยกมาจาก deepcraft_task.c:805 and the re-assert at :816-823 (คอมไพล์รวมอยู่ใน archive สำเร็จรูป ไม่ได้ส่งมอบมาเป็นซอร์ส)

◆ ai_engine_resume_sensor()

void ai_engine_resume_sensor ( void )

resume จังหวะค่าเริ่มต้นแบบยืนเดี่ยว; ห้ามเรียกติดกันกับการตั้งอัตรา

Restore the default sensor cadence after a model session.

ข้อกำหนดการเรียกใช้
คืนจังหวะเซนเซอร์ค่าเริ่มต้นหลังจบเซสชันของโมเดล ด้วยการส่งข้อความ resume แบบ op=1 ไม่มีผู้เรียกอยู่ที่ใดเลยในเฟิร์มแวร์ที่ส่งมอบจริง (ไม่ปรากฏใน consumer_must_provide.txt; ส่วน stub ของ sim ที่ sim_ai_engine_stub.c:121 เป็นการนิยาม ไม่ใช่การเรียก) คอมเมนต์ที่กำกับการนิยามของมันเองคือกฎห้ามใช้อย่างชัดแจ้ง: "DO NOT call this immediately after ai_engine_set_sensor_rate()" — อันตรายเรื่องบัฟเฟอร์ที่ใช้ร่วมกันข้างต้นเคยทำให้การป้อนข้อมูล Edge AI ฝั่ง MicroPython ล้วนค้างไป (result() == None) บนฮาร์ดแวร์จริง อีกทั้งยังไม่จำเป็นต้องเรียกหลังการเปลี่ยนอัตรา: handler ฝั่ง CM33 ของ set_sensor_rate ล้างสถานะ pause และ resume ตัว push task ให้เสร็จเป็นหน่วยเดียวอยู่แล้ว การใช้ที่ถูกต้องคือการส่งแบบยืนเดี่ยว โดยไม่มีสิ่งอื่นเดินทางอยู่บน s_rate_msg (เช่น เส้นทางออกจากหน้าที่ไม่ต้องการเปลี่ยนอัตรา) เรียกจาก CM55 task context
variant ที่ใช้ได้
mtb-mpy และ mtb-only
ตัวอย่าง (เขียนขึ้นเอง — ไม่มี call site ในของที่ส่งมอบจริง)

ตัวอย่างด้านล่างแสดง anti-pattern: ลำดับที่กำกับว่า WRONG ไว้ในกรอบคือสิ่งที่ห้ามเขียน ส่วนการเรียกเดี่ยว ๆ ที่ตามมาคือรูปแบบเดียวที่ถูกต้อง

static void bento_ex_ai_engine_resume_sensor(void)
{
/* WRONG — the shared-buffer hazard (see the box above):
*
* ai_engine_set_sensor_rate(100u); // op=2, in flight...
* ai_engine_resume_sensor(); // memset kills it -> PAUSE
*
* RIGHT — set_sensor_rate alone already resumes the push task:
*
* ai_engine_set_sensor_rate(100u); // walk down to dashboard rate
*
* RIGHT — resume as a standalone message, nothing else in flight
* on s_rate_msg (page-leave path, no rate change wanted): */
}