16 คะแนน โดย xguru 2021-05-31 | 2 ความคิดเห็น | แชร์ทาง WhatsApp
  • อธิบายเทคโนโลยีและเครื่องมือที่วิศวกรผู้บริหาร Winterbloom บริษัทซินธิไซเซอร์โอเพนซอร์ส ใช้งานอยู่

  • ไม่ไล่ตามความล้ำสมัย แต่ใช้เครื่องมือและเทคโนโลยีที่เข้าใจดีเพื่อบรรลุเป้าหมาย

"Lateral thinking with withered technology"

→ แนวคิดแบบคิดนอกกรอบที่ว่า หากนำเทคโนโลยีที่ไม่ใหม่แล้วมาใช้เพื่อโฟกัสกับความสนุก ก็สามารถสร้างสิ่งใหม่อย่างสิ้นเชิงได้

→ คำพูดของ "Yokoi Gunpei" ผู้สร้างปรัชญาการพัฒนาเทคโนโลยีของ Nintendo ยุคใหม่: ผู้สร้างเครื่องเกมพกพาของ Nintendo (Game Boy) และเกม VR

  • ไมโครคอนโทรลเลอร์: คัดเลือก 2-3 รุ่นที่จะโฟกัสกับผลิตภัณฑ์

→ Microchip SAM D21, D51, D11

→ ทั้งสามรุ่นรองรับ USB, SERCOM ที่ยืดหยุ่น, 12-bit ADC แบบหลายช่อง, ไทเมอร์ขั้นสูง เป็นต้น

→ กำลังพิจารณา RP2040 เพิ่มเติม (เมื่อไม่ต้องการ analog I/O) และ STM32H7 (เมื่อจำเป็นต้องสร้างเสียงภายในเฟิร์มแวร์)

  • การออกแบบฮาร์ดแวร์: ใช้ KiCAD เครื่องมือ EDA แบบโอเพนซอร์ส

→ แชร์ไลบรารีสำหรับ KiCad บน GitHub ที่รวมสัญลักษณ์, footprint และโมเดล 3D ร่วมของชิ้นส่วนที่ใช้งาน

→ เปิดเผยรายการชิ้นส่วนหลักที่ชอบผ่านหน้า Notion (คำอธิบาย, หมายเลขชิ้นส่วน, datasheet, ผู้ผลิต, ลิงก์สั่งซื้อ, การใช้งาน)

  • เฟิร์มแวร์: ภาษา, ไลบรารี, ระบบบิลด์, เฟรมเวิร์กทดสอบ ฯลฯ (ด้านล่างแยกทีละหัวข้อ)

  • ภาษา C, GCC, CMSIS

→ ใช้ภาษา C ที่แม้จะเก่าแต่คุ้นเคย

→ แม้จะมีคอมไพเลอร์เสียเงินอย่าง Keil/IAR แต่เลือกใช้ GCC ARM Embedded Toolchain แบบโอเพนซอร์ส

→ HAL ที่บริษัท Microchip ให้มานั้นจัดการยากเกินไป จึงใช้ไลบรารี CMSIS โดยตรงและเขียน abstraction ขนาดเล็กครอบไว้ด้านบน

CMSIS คือชั้น hardware abstraction layer ที่ ARM จัดหาให้และไม่ผูกกับผู้ผลิตรายใดรายหนึ่ง

  • ไลบรารีเฟิร์มแวร์

→ TinyUSB : ไลบรารี USB ที่ยอดเยี่ยมและขนาดเล็ก

→ Marco Paland's Printf : implementation ของ printf ที่ปรับให้เหมาะกับไมโครคอนโทรลเลอร์

→ libfixmath : ไลบรารีขนาดเล็กสำหรับการคำนวณ fixed-point (มีประโยชน์กับไมโครคอนโทรลเลอร์ที่ไม่มีหน่วย fixed-point)

→ µnit : เฟรมเวิร์กทดสอบที่เล็กมากและใช้งานได้ดี

  • ระบบบิลด์

→ บิลด์ด้วย Python และ Ninja

→ เริ่มจาก Makefile แต่ค่อย ๆ เขียนและดูแลยากขึ้นจึงเปลี่ยนมาใช้แบบนี้

  • เครื่องมือบนฐาน Python

→ รวมจัดการไว้ใน repo ชื่อ wintertools

→ ชุดสคริปต์ที่ช่วยเรื่องบิลด์/ทดสอบที่เกี่ยวข้องกับเฟิร์มแวร์และฮาร์ดแวร์

  • CircuitPython

→ ผลิตภัณฑ์บางตัวไม่ได้ใช้เฟิร์มแวร์แบบคัสตอม แต่ใช้ CircuitPython ที่มักใช้เพื่อการเรียนรู้ไมโครคอนโทรลเลอร์

→ ลูกค้าปรับแต่งได้ง่าย

→ ช่วยให้การพัฒนาเฟิร์มแวร์/ซอฟต์แวร์ง่ายขึ้น

→ มีชุมชนที่ยอดเยี่ยมซึ่งดูแลโดย Adafruit

  • เอกสาร & คู่มือผู้ใช้

→ เขียนด้วย Markdown บิลด์เป็นหน้าเว็บสแตติกด้วย MkDocs และโฮสต์บน GitHub Pages

→ ใช้เฟรมเวิร์ก Bulma CSS

→ เพื่อความเรียบง่ายจึงไม่ใช้ Sass/LESS เป็นต้น

  • JavaScript

→ ตั้งใจหลีกเลี่ยง ecosystem ของ Node.js ที่ซับซ้อนเกินไป

→ ใช้ JavaScript แบบทั่วไป พร้อมโมดูล, คลาส, arrow function, Canvas, WebMIDI, TypedArray เป็นต้น

→ ในอนาคตคาดหวังกับ Deno

2 ความคิดเห็น

 
daumkakao 2023-04-12

เจ๋งมาก..ทำสิ่งนั้นทั้งหมดคนเดียวได้ด้วย..

 
xguru 2021-05-31
  • สแตกสถาปัตยกรรมของเทคสตาร์ตอัปที่มีคนทำงานคนเดียว https://th.news.hada.io/topic?id=4055

แม้บทความและชื่อจะคล้ายกับลิงก์ข้างต้น แต่เพราะเป็นสตาร์ตอัปฮาร์ดแวร์ เรื่องราวเลยแตกต่างกันไปโดยสิ้นเชิง ทำให้อ่านได้อย่างเพลิดเพลิน