STEP 2 : How to working on Embedded
ทำงานกับ Embedded board ในทางโปรแกรมยังไงให้ง่ายและมีประสิทธิภาพ
Last updated
ทำงานกับ Embedded board ในทางโปรแกรมยังไงให้ง่ายและมีประสิทธิภาพ
Last updated
Assoc. Prof. Wiroon Sriborrirux, Founder of Advance Innovation Center (AIC) and Bangsaen Design House (BDH), Electrical Engineering Department, Faculty of Engineering, Burapha University
ทำการติดตั้ง Extension remote ssh ด้วย VScode
ทำการกด F1 และเลือกไปที่การเชื่อมต่อ Remote-SSH: Connect to host... จากในรูป
ใส่ชื่อของบอร์ดที่จะทำการเชื่อมต่อด้วยซึ่งจะเป็น root@[IP board] ที่จะเชื่อมต่อไปบอร์ด Ultra96v2
ใส่ password ที่เชื่อมต่อคือ "root"
รอจนเชื่อมต่อเรียบร้อยจะขึ้นสถานะการเชื่อมต่อ SSH สมบูรณ์ที่มุมซ้ายล่าง
ทำการทดลองเปิดไฟล์ File > Open Folder แล้วเข้าไปใน directory ที่ใช้รัน code ครั้งที่แล้ว ppdemo1216
ลองทำการแก้ไข code ดู
ในขั้นตอนนี้เราจะสอนวิธีการทำการ Cross compiled เพื่อทำการ compiled code บนเครื่องคอมพิวเตอร์ของเราไปยังตัวบอร์ดที่จะใช้งาน
การ Cross compiled คือการ Compile ที่สามารถนำไฟล์ Executable ไปรันบนเครื่องเป้าหมายได้นั่นเอง ในที่นี้เราคือบอร์ด Ultra96v2 ที่เราทำการทดสอบกันไปในขั้นตอนก่อนๆ โดยการทำงานของ Cross compile จะใช้ทรัพยากรของบอร์ดบนเครื่องของเรา โดยจะใช้ทั้ง Library, SDK, Firmware เพื่อนำมาใช้ในการ compile code
เมื่อเราต้องการความสะดวกสะบายในการทำงานไม่ต้องโยนไฟล์ไปหลายรอบเพื่อทำการ Compile บนบอร์ดซ้ำๆ
ใช้กับ Micro controller เพราะทรัพยากรบนบอร์ดจะแตกต่างกับเครื่องคอมพิวเตอร์ของเราทั้ง Hardware, Firmware และ Software
เมื่อต้องใช้กับอุปกรณ์ที่ Spec ต่ำ เพื่อลดระยะเวลาในการ Compile code
เมื่อเราต้องการจัดการทรัพยากรการทำงานของเครื่องเรากับเครื่องทดสอบให้ชัดเจน
เปิด Terminal WSL Ubuntu ที่ท่านใช้งานบน VScode ด้วยการกด Ctrl + Shift + `และทำการติดตั้ง Gdown เพื่อใช้ในการโหลดไฟล์จาก Google drive โดยตรง
ทำการสร้างไฟล์ที่จะเรียกการติดตั้ง SDK และ Vitis-AI library ด้วยการสร้าง script
และทำการ Copy ไฟล์ script และนำไปวางใน vim ด้วยการกด Crtl + Shift + V เพื่อวางบนไฟล์ Script
เมื่อต้องการ save ไฟล์ script ให้นิสิตทำการออกและ save ด้วยการกด Esc และพิมว่า :wq! เพื่อการเขียนทับและเซฟไฟล์
ตรวจสอบว่าไฟล์ Script สามารถมีข้อความที่ Copy ไปจากข้อสองสมบูรณ์หรือไม่ด้วยคำสั่ง
ทำการรัน script ที่สร้างเพื่อดาวน์โหลด SDK และติดตั้ง VART library ลงบน SDK
SDK และ VART library ที่ติดตั้งเพื่อใช้ในการ Cross compile ของนิสิตจะอยู่ที่ ~/petalinux_sdk_2021.1
ทำการดาวน์โหลดไฟล์ ppdemo และทำการแตกไฟล์ พร้อมทั้งเปิด VScode
ทำการแก้ไขไฟล์ Source code เพื่อรองรับการทำงานของ การ stream ข้อมูลหรือฟังชัน fstream โดยการคอมเม้น library iostream ในบรรทัดที่ 20 และเพิ่ม library fstream เข้าไปต่อจากที่พึ่งคอมเม้น
7. แก้ไขไฟล์ที่ต้องใช้ในการคอมไพล์ดังนี้
ทำการเปิด build.sh ตามหมายเลข 1
ทำการคอมเม้นบรรทัดที่ 1 ตามหมายเลข 2
ทำการ Copy คำสั่งที่ใช้ในการ Cross compile ด้านล่างลงไปวางตามหมายเลข 3
การทำงานของสคริปต์คอมไพล์จะเห็นว่าบรรทัดที่ 10 และ 12 จากรูป จะแตกต่างจากก build.sh ในการทดลองในพาร์ทแรก(Part 1, Step 3-3) เพราะว่าการคอมไพล์ที่ใช้คำสั่ง g++ นำหน้าจะเป็นการใช้การ Compile โดยการใช้ทรัพยากรบนเครื่องของเราซึ่งครั้งที่แล้วคือใช้ทรัพยากรบนบอร์ด แต่ถ้าเราต้องการทำการ Cross compile บนเครื่องของเราจำเป็นที่จะต้องกำหนดตัวแปร CXX เพื่ออ้างอิงถึงตัวคอมไพลเลอร์ g++ ที่เราจะทำการเรียกใช้ผ่าน SDK ในขั้นตอนถัดไป
ถ้านิสิตต้องการเพิ่ม llibrary ที่จะใช้งาน จะสังเกตได้จากบรรทัดที่ 12 จะเห็นว่าในการคอมไพล์มีสัญลักษณ์ -I เพื่อสื่อถึงการ include ไฟล์ library เหมือนเวลาเราเลือกไลบรารี่ใน Arduino มาใช้งานนั่นเอง ดังนั้นถ้าเราต้องการใช้ library อย่างอืน สามารถเขียนเติมในบรรทัดที่ 12 โดยการเขียน
-l[ชื่อไลบรารี่ที่ใช้]
ทำการ source SDK ของบอร์ด Ultra96v2 เพื่อใช้ทรัพยากรของบอร์ด
ทำการ Cross compiled
เมื่อทำการทดลองนี้จบหาต้องการทำการ Cross compile เพื่อเช็คการทำงานของโปรแกรม จะสามารถทำซ้ำขั้นตอนที่ 8-9 ในขั้นตอนนี้ได้ ไม่ต้องทำการติดตั้งใหม่
โยนไฟล์ไปทดสอบบนบอร์ด Ultra96v2 ผ่านการ secure copy
using namespace
Extern
Struct stat
Read file function void myreadfile(T* dest, int size1, std::string filename); // Read file
Get file length function int getfloatfilelen(const std::string& file);
Display data function void get_display_data(DISPLAY_PARAM&);
Create Matrix for store dataWe can using cv::mat as a class for create the matrix for store the data of point cloud and image cv::mat
In this demo, we need to insert 5 arguments:
executed file (get this file after compile the build.sh)
model 1 : pointpillars_kitti_12000_0_pt
model 2: pointpillars_kitti_12000_1_pt
.bin file is the file of Point cloud
.png file is the file of image.
sample: ./test_bin_pointpillars pointpillars_kitti_12000_0_pt pointpillars_kitti_12000_1_pt sample_pointpillars.bin sample_pointpillars.png