ไลบรารี่สำหรับ เขียนแบบ Multitasking แบบ TridentTD บนเพรตฟอร์ม Arduino
อาทิ Arduino UNO , Arduino Mega เป็นต้น
- เรียกใช้ไลบรารี่
#include <TridentTD_EasyFreeRTOS_Ardu.h>
- ประกาศตัวแปร task ย่อยๆ และ ฟังกชั่น ที่ task จะเรียกขึ้นทำงาน
TridentOS task1, task2, task3;
void task1_func(void*), task2_func(void*), task3_func(void*);
- รูปแบบมาตรฐาน ฟังก์ชั่น task ย่อยๆ ที่จะถูกเรียกใช้งาน เป็นดังนี้
void task1_func(void*) { // ฟังกชั่นที่ task1 เรียกทำงาน - void ใช้ตัวพิมพ์เล็ก
//----พื้นที่สำหรับประกาศตัวแปรที่ใช้ภายใน task นี้เท่านั้น----
//-----------------------------------------------
VOID SETUP() { // VOID SETUP() ใน task ให้ใช้ตัวพิมพ์ใหญ่
}
VOID LOOP() { // VOID LOOP() ใน task ให้ใช้ตัวพิมพ์ใหญ่
}
}
หมายเหตุ
ภายในฟังกชั่น task ให้ใช้ delay ด้วยคำสั่ง DELAY(..) ตัวพิมพ์ใหญ่เท่านั้น
- หากจะเรียก task ไหนทำงาน เช่น สำหรับ task1 ใช้คำสั่ง
task1.start(task1_func);
- หากจะหยุด task ไหนทำงาน เช่น สำหรับ task1 ใช้คำสั่ง
task1.stop();
- หากจะใช้งานต่อ task ไหนทำงาน เช่น สำหรับ task1 ใช้คำสั่ง
task1.resume();
- สำหรับการแลกเปลี่ยนข้อมูลระหว่าง task ให้ ประกาศตัวแปรไว้ใน
พื้นที่ ประกาศตัวแปรสำหรับแชร์ระหว่าง task (ดูที่ Template)
โดย ให้มีมาตรฐานการตั้งชื่อ ตัวแปรสำหรับแชร์ระหว่าง task ให้ขึ้นต้นนำด้วยตัว x (เอ็กซ์พิมพ์เล็ก)
//------- พื้นที่สำหรับประกาศตัวแปรแชร์ระหว่าง task ---------------
float xDHT_temp, xDHT_humid; // มีตัว x เล็กนำหน้า เพื่อง่ายต่อการสังเกตุ
//---------------------------------------------------------
VDO Tutorial : Multitask-Exchange Variables Example
เนื่องจาก Arduino Uno เป็น MCU ขนาด 8bit มีพื้นที่เม็มโมรี่ในการทำงานที่มีขนาดเล็ก
บางคราวเราจึงมีความจำเป็นต้องมีการปรับจูนพื้นที่เม็มสำหรับ task นึงๆให้เหมาะสม
เพื่อให้หลายๆ task สามารถทำงานร่วมกันได้อย่างมีประสิทธิภาพ
วิธีการปรับจูนพื้นที่เม็มโมมี่ สำหรับ task นึงๆสามารถปรับได้ด้วยคำสั่งดังนี้
task1.start(task1_func, NULL, 64); // ขอใช้พื้นที่ขนาดเพียง 64bytes
TridentTD
29 พฤษภาคม 2561 (ปีแห่งฤดูฝนตกชุก)
วันวิสาขบูชา ขึ้น ๑๕ ค่ำเดือน ๗
แห่งปีอธิกมาส ปีที่มีเดือนแปดสองหน