|
SDK สำหรับ TESAIoT Dev Kit
คู่มืออ้างอิง API และ Tutorial (MTB & µPython)
|
Topics | |
| ข้อสรุปเรื่อง extern ที่เขียนด้วยมือ | |
Functions | |
| uint32_t | calculate_idle_percentage (void) |
| แหล่งค่าเปอร์เซ็นต์เวลาว่างของ GFX — ให้ผูกเข้ากับ LV_SYSMON_GET_IDLE | |
Variables | |
| TaskHandle_t | rtos_cm55_gfx_task_handle |
| handle ของ GFX task ซึ่ง tesaiot_display_init() เป็นเจ้าของ — ห้ามแตะต้องจากภายนอก | |
| volatile tesaiot_display_diag_t | g_tesaiot_display_diag |
| struct ข้อมูลวินิจฉัยของจอแสดงผล — ให้ใช้ accessor ipc_ui_platform_diag() ไม่ใช่ตัว struct | |
| cy_stc_scb_i2c_context_t | disp_touch_i2c_controller_context |
| context ของบัส I2C ที่จอแสดงผลกับการสัมผัสใช้ร่วมกัน — ผู้ใช้ไลบรารีเป็นผู้เขียน extern เอง; ใช้ timeout ที่มีขอบเขตเท่านั้น | |
ส่วนข้อมูลวินิจฉัย (diagnostics) ที่ archive เปิดให้เรียกใช้ และ symbol ที่ export ออกมาโดยมีการประกาศอยู่ที่ฝั่งผู้ใช้ไลบรารีเท่านั้น ได้แก่ struct ข้อมูลวินิจฉัยของจอแสดงผลและวินัยการเข้าถึงผ่าน accessor ของมัน, handle ของ GFX task, context ของบัส I2C ที่จอแสดงผลกับการสัมผัสใช้ร่วมกัน และแหล่งค่าเปอร์เซ็นต์เวลาว่างของ GFX ส่วน bento_secure_undeclared.h ที่ถูกสร้างขึ้นอัตโนมัติ และรูปแบบการเขียน extern ด้วยมือที่มาคู่กัน อธิบายไว้ใน ข้อสรุปเรื่อง extern ที่เขียนด้วยมือ
| uint32_t calculate_idle_percentage | ( | void | ) |
แหล่งค่าเปอร์เซ็นต์เวลาว่างของ GFX — ให้ผูกเข้ากับ LV_SYSMON_GET_IDLE
.a คือไฟล์ไลบรารีแบบสแตติก) export ออกมา การเรียกจริงมีเพียงจุดเดียว อยู่ในสตริงข้อมูลวินิจฉัย (diagnostics) ของหน้า Edge AI ที่อยู่ใน archive (page_edge_ai.c:1461) การใช้งานเพียงอย่างเดียวในเทมเพลต — และเป็นตัวอย่างต้นแบบที่ควรยึดเมื่อส่งมอบ — คือการผูกไว้ในไฟล์ตั้งค่าของ LVGL ได้แก่ LV_USE_SYSMON 1, extern ที่มี __ASSEMBLER__ เป็นตัวกัน (guard) และ LV_SYSMON_GET_IDLE ที่นิยามให้ชี้มาที่ฟังก์ชันนี้ เพื่อให้ system monitor ของ LVGL เองอ่านค่าตัวเดียวกันกับที่ ipc_ui_platform_diag() รายงานไว้เป็นเวิร์ดที่ 9
|
extern |
handle ของ GFX task ซึ่ง tesaiot_display_init() เป็นเจ้าของ — ห้ามแตะต้องจากภายนอก
tesaiot_display_init() เป็นผู้สร้างและเป็นเจ้าของ การอ้างถึงทั้ง 2 จุดอยู่ภายในทั้งคู่ (tesaiot_display.c:190 เรียก xTaskNotifyFromISR จาก ISR ของ DC, และเป็นพารามิเตอร์ขาออกของ xTaskCreate ที่ :212) anti-example: ห้ามใช้มันโดยตรง — ห้าม notify ห้าม suspend และห้าม delete GFX task จากภายนอก tesaiot_display.h ประกาศตัวแปรนี้ไว้แล้ว แม้รายการ undeclared ที่ถูกสร้างขึ้นจะระบุตรงกันข้าม ห้ามเพิ่ม extern ที่เขียนด้วยมือซึ่งขัดกับการประกาศนั้น
|
extern |
struct ข้อมูลวินิจฉัยของจอแสดงผล — ให้ใช้ accessor ipc_ui_platform_diag() ไม่ใช่ตัว struct
tesaiot_display.c การเข้าถึงจากภายนอกที่ตั้งใจไว้คือผ่าน accessor (ฟังก์ชันสำหรับเข้าถึงค่า) ipc_ui_platform_diag(uint32_t *out, uint16_t max_words) (tesaiot_display.c:593; ต้องมี max_words >= 10 และคืนค่า 10) — ให้เขียนเอกสารของ accessor ไม่ใช่ของตัว struct บน mtb-mpy ข้อมูล 10 เวิร์ดชุดเดียวกันนี้อ่านได้ด้วย ui._diag() ส่วนบน mtb-only ให้เรียก accessor จากฝั่ง C tesaiot_display.h ประกาศตัวแปรนี้ไว้แล้ว แม้รายการ undeclared ที่ถูกสร้างขึ้นจะระบุตรงกันข้าม
|
extern |
context ของบัส I2C ที่จอแสดงผลกับการสัมผัสใช้ร่วมกัน — ผู้ใช้ไลบรารีเป็นผู้เขียน extern เอง; ใช้ timeout ที่มีขอบเขตเท่านั้น
extern เอง SCB ถูกเริ่มต้นค่าโดยการเปิดใช้งานจอแสดงผล (tesaiot_display.c:203) ผู้ใช้ไลบรารีห้ามเรียก Cy_SCB_I2C_Init กับตัวมัน ให้จับคู่กับ DISPLAY_I2C_CONTROLLER_HW เป็น base เสมอ ห้ามใช้ SCB ตัวอื่น บัสนี้ใช้ร่วมกัน การเรียก PDL ทุกครั้งจึงต้องใช้ timeout ที่มีขอบเขต (2 ms) ห้ามใช้ 0 หรือรอแบบไม่มีที่สิ้นสุด: ธุรกรรมเหล่านี้รันอยู่ใน GFX task ที่ความสำคัญระดับ MAX-1 และครั้งหนึ่งอุปกรณ์ที่ค้างอยู่ระหว่างการยืดสัญญาณนาฬิกา (clock stretching) เคยทำให้ GFX task จอดค้างอยู่บนบัส และทำให้ CM55 task ที่ความสำคัญต่ำกว่าทุกตัวไม่ได้รันเลย การเริ่มต้นค่าการสัมผัสใหม่หลังจาก master อีกตัว (OPTIGA) ปล่อยบัสแล้ว ต้องเลื่อนไปทำใน GFX task ผ่าน flag touch_needs_reinit ที่ถูกระบายออกใน read callback ของ LVGL