September 6, 2017
การเขียนโปรแกรม ARM Cortex-M ตอนที่ 4 : เปรียบเทียบความเร็ว
Spread the love
ตอนนี้เราจะมาดูกันว่าบอร์ดแต่ละแบบเร็วช้าต่างกันแค่ไหน วิธีการคือเราจะให้บอร์ดทุกอันทำงานแบบเดียวกันตาม flowchart นี้
สรุปย่อๆ ว่าให้ดูจำนวนเต็มทุกตัวตั้งแต่ 1-10000 ว่าตัวไหนเป็นจำนวนเฉพาะ ถ้าเป็นจำนวนเฉพาะให้เปิด LED ถ้าไม่ใช่ให้ดับ LED เมื่อครบแล้วถือเป็น 1 รอบ ให้บวกตัวนับจำนวนรอบแล้วแสดงผลที่ 7-segment LED
บอร์ดที่นำมาทดสอบมีด้วยกัน 4 ตัว ตามรูป
การทดสอบจะทำทั้งหมด 5 ครั้ง
Boards | Programming Method |
---|---|
Arduino UNO | Arduino IDE - software SPI |
Arduino M0 | Arduino IDE - software SPI |
STM32F103C8 board (blue pill) | Arduino IDE - software SPI |
STM32F103C8 board (blue pill) | HAL driver - Atollic TrueSTUDIO - hardware SPI |
STM32F030F4P6 board | HAL driver - Atollic TrueSTUDIO - hardware SPI |
Code ที่ใช้ทดสอบนี้ใช้ library อยู่ 2 ตัว คือ
- MAX7219/MAX7221 Digital Tube 7-Segment LED Display Arduino Library
https://github.com/ozhantr/DigitLedDisplay/ - Library for driving MAX7219 displays using STM32
https://github.com/petoknm/MAX7219 โดยได้เพิ่ม code สำหรับใช้งาน 7-segment LED เข้าไป
ผลการทดสอบ
สรุป
- บอร์ดที่ใช้ชิป ARM ทุกตัวทำงานเร็วกว่า Arduino UNO อย่างเห็นได้ชัด
- Arduino M0 ทำงานได้ช้ากว่า STM32F0 น่าจะเพราะใช้ Software SPI จาก Arduino IDE
- STM32F103 ที่ใช้ Arduino IDE ทำงานเร็วกว่า STM32F103 ที่ใช้ HAL driver และ hardware SPI ก็น่าจะเพราะว่าได้ตั้งความเร็วของ hardware SPI ไว้ที่ประมาณ 1 MHz ขณะที่การทำ bit bang ตรงๆ นั้นจะสัมพันธ์กับ clock ของตัว MCU ซึ่งส่งผลให้ทำงานได้เร็วกว่า 1 MHz
ตอนอื่นๆ