Windows CE กับ Developer  

    บทนี้เป็นบทต่อเนื่องจากบทที่แล้ว ในบทนี้เรามาดูกันว่า เราสามารถโปรแกรมเจ้า IPAQ อย่างไรบ้าง (คงต้องย้ำกันก่อนว่า IPAQ เป็นเพียงตัวอย่างเท่านั้น เนื้อหาในบทนี้ประยุกต์ใช้กับอย่างอื่นได้อีกมากมายครับ โดยเฉพาะอย่างยิ่ง Pocket PC)

Embedded OS

    อุปกรณ์ต่างๆ ที่มี CPU ฝังตัวอยู่ ที่ผู้ใช้ไม่ได้มองว่าเป็นคอมพิวเตอร์ เราเรียกอุปกรณ์เหล่านั้นว่า Embedded System เช่นระบบควบคุมความเร็วในรถยนต์ที่เรียกว่า Cruise Control หรือระบบนำร่อง Autopilot ที่มีใช้ในเครื่องบิน หรือถ้าจะเอาใกล้ตัวหน่อยก็พวก ระบบควบคุมที่มีใน โทรทัศน์ แอร์ Microwave เป็นต้น ระบบเหล่านี้มี Microprocessor หรือ Microcontroller ควบคุมทั้งสิ้น

    Embedded System บางตัวมี OS ครับ OS นั้นจึงเรียกว่า Embedded OS  ในโลกนี้มี Embedded OS หลากหลายมาก ส่วนมาก OS เหล่านั้น มีขนาดเล็กมาก เช่นประมาณ 2k ก็หน่วยความจำมันจำกัดมาก ก็เรามีหน่วยความจำ แค่ 4kb หรือเก่งหน่อย ก็ 64kb  ตัว OS จะใหญ่มากก็ไม่ได้

    ทุกอย่างเริ่มเปลี่ยนไป เมื่อไม่กี่ปีนี้ CPU ใหม่ๆ ขนาด 32 bits เกิดขึ้นมาสำหรับงาน Embedded (ปกติแล้ว CPU สำหรับงาน Embedded จะมีขนาดแค่ 8 bits) การอ้างหน่วยความจำก็อ้างได้มากขึ้น จากหน่วย KB กลายเป็น MB หรือ GB ในอนาคตอันใกล้

    เมื่อเป็นเช่นนี้ OS ก็มีการย่อส่วนจาก OS ในเครื่อง PC ที่เราใช้ ที่ดังๆ ก็คือ Microsoft Windows และ Linux พวกนี้เอามาเขียนใหม่ครับ ตัดเอาส่วนไม่ค่อยสำคัญทิ้งไป และเน้นการประหยัดเนื้อที่มากกว่าความเร็ว วันนี้เรามาดู Windows กันครับ

    * OS ย่อส่วน ตัวที่ 3 ก็คือ BeOS ครับ ซึ่งมี Interface คล้ายๆ Windows ซึ่งบริษัท BeOS ถูก 3COM ซื้อไป เพื่อเอาไปทำเป็น PalmOS version 5 เพราะระบบ User Interface ของ PalmOS เดิมนั้นสู้ของทาง Microsoft ไม่ได้

    * เราไม่ค่อยมองว่า Palm หรือ Pocket PC เป็น Embedded System เพราะในแง่ของ Developer แล้ว เรามองว่าเครื่องดังกล่าวนั้นเป็นคอมพิวเตอร์เครื่องหนึ่ง การเขียนโปรแกรมแทบจะไม่แตกต่างจากการเขียนโปรแกรมบน PC เลย ซึ่งเราจะมาดูรายละเอียดกันต่อไป

รู้จัก Windows CE

    เพื่อตอบสนองงานทางด้าน Embedded ทาง Microsoft จึงสร้าง OS ขึ้นมาตัวหนึ่ง ชื่อว่า Windows CE เป็น OS ขนาด 32 bits เป็น OS ที่เขียนขึ้นมาใหม่ครับด้วยภาษา C โดยเอา Technology ของ Windows NT มาใช้ ดังนั้นถ้าบอกว่ามันคือ Windows NT ย่อส่วนก็คงจะไม่ผิดนัก ขนาดของ Windows CE นั้นเมื่อเทียบกับ Windows NT บนเครื่อง PC แล้ว มีขนาดเล็กมาก บนเครื่อง IPAQ  ที่มีหน่วยความจำ 32 mb ก็ยังสามารถใช้ Windows CE 2.0 ได้ แต่ถ้าคิดจะใช้ Windows CE 3.0 คงต้องมีหน่วยความจำ 64mb ตัวของ Windows CE 3.0 น่าจะกินหน่วยความจำใกล้ๆ 32mb ครับ

    ใครสนใจว่า Windows CE ทำอะไรได้บ้าง คงไม่ต้องถึงกับไปลงทุนซื้อ Pocket PC มาลองนะครับ เราสามารถใช้ Emulator ที่ทาง Microsoft เตรียมไว้ให้ จำลองเครื่อง Pocket PC บนเครื่อง PC ของเราได้เลย รายละเอียดของ Emulator จะอยู่ในส่วนต่อๆ ไปของบทนี้ครับ

    Windows CE .NET เป็น Windows CE รุ่นใหม่ อาจจะเรียกว่าเป็น Windows CE version 4 ก็คงไม่ผิดนัก รุ่นนี้ยังไม่ออก ยังเป็น Beta อยู่ มี Emulator ให้ทดลองแล้ว หน้าตาเหมือนกับ Windows 2000 เลยครับ มีการใส่ลูกเล่น เข้าไปอีกมาก ผมว่า IPAQ รุ่นที่ผมมี คงรับไม่ไหว เท่าที่ดูจาก Emulator ทำให้ผมนึกไปว่า เป้าหมายของ Windows CE .NET นอกจาก Pocket PC แล้ว ผมว่า Microsoft ตั้งใจจะให้รองรับ อุปกรณ์ตัวใหม่ ที่ชื่อว่า Tablet PC ซึ่งเป็นคอมพิวเตอร์ขนาดสมุดโน๊ต Interface คงเป็นปากกาเหมือนเดิมครับ

    ใครสนใจ Windows CE หรือ Windows CE .NET แบบเจาะลึกก็สามารถศึกษาได้จาก Source Code ของ ตัว Windows CE เอง ซึ่งทาง Microsoft มีให้ Download ภายใต้เงื่อนไข Shared Source

ในมุมมองของ Developer

การ Develop Software สำหรับ PocketPC

    มาเข้าเรื่องของเราซักที ในมุมมองของ Developer อย่างแรกที่เราถามหานั้นก็คือเครื่องไม้เครื่องไม้เครื่องมือที่ใช้ในการพัฒนา คำถามแรกก็คือ เราสามารถเขียนโปรแกรมจาก Pocket PC ได้โดยตรงหรือไม่ คำตอบก็คือพอได้ครับ แต่ไม่ค่อยมีคนทำกัน ในเครื่องมันมีหน่วยความจำที่จำกัดค่อนข้างมาก และที่สำคัญคือระบบ Input แบบปากกานั้น ไม่สามารถรองรับงานเขียนโปรแกรมได้ดีนัก ต้องเอา keyboard มาต่อ ลองดูที่

   IDE ภาษา C  http://www.orbworks.com/wince

    ทางเลือกที่ 2 คือ พัฒนาบนเครื่อง PC ของเรานั่นแหละครับ เมื่อเขียนโปรแกรมเสร็จแล้ว ก็ทำการสร้าง Package เพื่อเอาไป Install บน IPAQ ซึ่งวิธีนี้ยุ่งยากครับ เพราะถ้าต้องการ Test Program ที ก็ต้อง Uninstall Program เดิม แล้วก็ Install โปรแกรมใหม่เข้าไป แต่วิธีนี้ใช้เมื่อพัฒนาโปรแกรมเสร็จแล้ว ต้องการสร้าง Package เพื่อนำเอาไป install บนเครื่องหลายเครื่อง (เพื่อจำหน่าย)

    จุดอ่อนของ 2 วิธีแรกมีอีกข้อหนึ่งก็คือ การ Debug โปรแกรมยุ่งยากมาก 2 วิธีข้างล่าง Debug โปรแกรมง่ายครับ เหมือนกับที่เราทำได้ใน Visual Studio

    ทางเลือกที่ 3 ก็คือพัฒนาบนเครื่อง PC ของเราเช่นเดียวกัน เมื่อเวลารันโปรแกรม เราก็ส่งโปรแกรมไปที่เครื่อง PocketPC ตามสายสาย Serial หรือ USB ซึ่งไม่ได้ยุ่งยากอย่างที่คิดครับ คือเราไม่ต้องยุ่งกับการ Download ลง PocketPC เพียงแค่เราสั่งรันโปรแกรม เครื่องมือมันจะจัดการทุกอย่างให้เสร็จ เราก็สามารถเห็นผลลัพธ์บน PocketPC ได้ทันที สะดวกดีครับ

    ทางเลือกที่ 4 ก็เหมือนแบบที่ 3 แต่ต่างกันตรงที่ตอนรันโปรแกรมครับ แทนที่มันจะ Download ลงเครื่อง PocketPC มันกลับ Download ไปที่ Emulator เราสามารถเห็นผลลัพธ์ได้บนจอคอมพิวเตอร์ วิธีนี้ข้อดีก็คือทันใจดีครับ การ Download ใส่ Emulator บนเครื่องเดียวกัน เร็วกว่าส่งผ่านสายไปออกเครื่อง Pocket PC และการแสดงผลก็เห็นได้ชัดเจนกว่า Emulator จอใหญ่กว่าของจริงครับ (ผมใช้จอ 17 นิ้ว) แถมยังการรันโปรแกรมบน Emulator นั้นเร็วกว่าของจริงอีกทันใจดีครับ แต่จุดอ่อนก็มีครับ เราไม่สามารถจำลองสภาพการทำงานจริงได้ เช่นมันอาจทำงานเร็วดีบน Emulator แต่บนเครื่องจริงอาจช้ามากจนยอมรับไม่ได้ก็ได้ และ Emulator ก็มีข้อจำกัดที่ไม่สามารถจำลองการทำงาน Pocket PC ได้ 100% เช่น Library บางตัวไม่สามารถทำงานบน Emulator และที่แน่ๆ ถ้าคุณต่ออุปกรณ์เสริม เช่น Bluetooth ตัว Emulator ก็ไม่รับรู้ ต้องกลับไปใช้วิธีที่ 3 ครับ

    เครื่องมือที่ใช้สำหรับทางเลือก 2-4 นั้นมีหลายตัว ตัวที่ดังที่สุด สามารถกลบตัวอื่นได้หมด นั่นก็คือเครื่องมือของ Microsoft ครับ

Microsoft Embedded Visual Tools

    ในยุคแรกเมื่อกำเนิด Windows CE ใหม่ๆ ทาง Microsoft เตรียม Tools ให้ Develop โดยการออก SDK ออกมา คุณสามารถใช้ C Compiler เขียนโปรแกรมติดต่อ API ของ Windows CE ซึ่งก็คือ Win32API version หนึ่ง และเมื่อคอมไพล์ ก็ต้องเลือก CPU ที่เหมาะสม

    ในยุคต่อมา Microsoft สร้าง Embedded Visual Tools ซึ่งเป็นตัวเสริมให้กับ Visual Studio สามารถสร้าง Application สำหรับ Windows CE ได้ คุณต้อง Install เครื่องมือตัวนี้เพิ่มเข้าไป มันจะมี Project ชนิดใหม่ เกิดขึ้น คุณก็สามารถ Develop โปรแกรม สำหรับ Windows CE ภายใต้ร่มเงาของ Visual Studio สามารถดึงเอา Visual Tools ของ Visual Studio มาใช้ประโยชน์ได้เต็มที่ คุณสามารถใช้ Visual Basic, Visual C++ ในการพัฒนา Software แต่จุดอ่อนของวิธีดังกล่าวก็คือคุณต้องมี Visual Studio

    ในยุคปัจจุบัน Microsoft สร้าง Embedded Visual Tools ขึ้นมาใหม่ ทำให้มันสามารถทำงานแบบ Standalone ได้ ไม่ต้องพึ่ง Visual Studio อีกต่อไป ในรุ่น Embedded Visual Tools version 3.0 ซึ่งเป็นรุ่นล่าสุดนั้น มี IDE หน้าตาเหมือนกับ Visual Studio 6.0 มี IntelliSense ต่างๆ ทำนองเดียวกัน ภายในมี Embedded Visual Basic 3.0 และ Embedded Visual C++ 3.0 บรรจุอยู่ บรรจุอยู่ใน CD 2 แผ่น ที่สำคัญเหนือสิ่งอื่นใด นั่นคือมันฟรีครับ คุณสามารถ Download ได้จาก Site ของ Microsoft ที่นี่ครับ http://www.microsoft.com/mobile/downloads/emvt30.asp เพราะเรื่องฟรีนี่เอง อาจจะเป็นเหตุผลหลักทำให้ Tools ของบริษัทอื่นไม่มีโอกาสได้แทรกครับ

    ภายใน Embedded Visual Tools มีเครื่องมือจำเป็นในการพัฒนา Application บน PocketPC ทั้งหมดครับ รวมทั้ง Emulator Windows CE ด้วย แต่ก่อนที่คุณจะเริ่มนั้น คุณควรปรับปรุง SDK ของ PocketPC 2002 ให้เป็นรุ่นใหม่ที่สุดก่อน Download ได้ที่นี่ครับ

    แต่ Embedded Visual Tools 3.0 นั้นใช้ได้กับ Windows CE ถึง version 3.0 เท่านั้น ไม่รองรับ Windows CE .NET ถ้าจะพัฒนา Software บน Windows CE.NET ในเวลาที่เขียนบทความนี้ Microsoft ออก Embedded Visual C++ 4.0 มาให้ Developer เท่านั้นครับ Embedded Visual Basic 4.0 ยังไม่ออก

Platform Builder

    ชุดนี้เป็นชุดสมบูรณ์แบบในการพัฒนาด้วย Windows CE ประกอบด้วยแผ่น CD ถึง 14 แผ่น ผมเองก็ไม่เคยใช้ ราคามันแพงครับ ถึง $3000 นัยว่าเป็นเครื่องมือที่ใช้ Customize Windows CE ให้เหมาะกับ อุปกรณ์ใหม่ๆ ที่เราสร้างขึ้น เราสามารถเลือก library หรือ module ต่างๆ ที่ Hardware ของเรารองรับ จากนั้นก็ใช้มัน Build ให้เป็น OS เพื่อเอาไป Install ลงบน Hardware ของเรา แต่ผมคงไม่ค่อยสนเครื่องมือตัวนี้ซักเท่าไหร่ในตอนนี้ เพราะ Windows CE บนเครื่อง IPAQ มันถูก Customize มาแล้วภายใต้ชื่อใหม่ว่า Pocket PC 2002 ผมคงเน้นที่ การพัฒนา Application มากกว่าที่จะพัฒนา OS ครับ (ไม่ใช่อะไรหรอก มือไม่ถึง)

.NET Compact Framework

    Web นี้แสดงตัวอย่างเป็น C# โดยตลอด เคยพยายามใช้ VB.Net ก็โดนประท้วง ยิ่งตอนนี้ ถ้าเขียนบทความเรื่องนี้ต่อไปโดยใช้ Microsoft Embedded Visual Tools คงวุ่นวายพอสมควร โชคดีครับที่ Microsoft ออกเครื่องมือให้เราสามารถเขียนโปรแกรมภาษา C# บน Pocket PC ได้

    มี .NET Framework ตัวหนึ่งที่ผมแทบจะไม่เคยพูดถึง ตัวนั้นก็คือ .NET Compact Framework ผมเคยเกริ่นๆ ไว้ว่า .NET Compact Framework คือ .NET Framework รุ่นที่พยายามตัดเอาส่วนที่ไม่สำคัญหรือไม่ได้ใช้ออกไป เพื่อทำให้ขนาดเล็กลง เล็กลงจนขนาดที่สามารถ install ลงบนอุปกรณ์เล็กๆ ที่ไม่ใช่คอมพิวเตอร์ได้ เช่น โทรศัพท์มือถือเป็นต้น มาบทนี้ผมขอขยายความหน่อยก็แล้วกันครับ

    .NET Compact Framework ก็ยังคงเป็น .NET Framework อยู่นั่นแหละ มี Layer ระดับต่างๆ เหมือนกับใน .NET Framework เวลาเราเขียนโปรแกรม โปรแกรมที่เราเขียนถูกคอมไพล์อยู่ในรูปของ MSIL ซึ่ง ใน .NET Compact Framework นั้นก็มี CLR เพื่อเอาไว้แปลโปรแกรมแล้วรันอีกที เหมือนเดิมครับ

    คำถามยอดฮิตก็คงเป็นคำถามเกี่ยวกับความเร็ว ความเร็วอยู่ในเกณฑ์ยอมรับได้ครับ เมื่อเทียบกับ Embedded Visual Basic แล้ว ผมว่าพอๆ กัน แต่อย่าเชื่อผม ต้องทดสอบเองครับ

    การ Install Library ของ .NET Compact Framework ต่างกับ .NET Framework ปกติหน่อยครับ ถ้าเป็น .NET Framework ทุกอย่างจะถูก Install ลงบน Harddisk ของเราทั้งหมดในคราวเดียว แต่เราทำอย่างนั้นกับ .NET Compact Framework ไม่ได้ ถึงแม้ว่าจะถูกตัดเอา Library ออกไปมากแล้วก็ตาม มันก็ยังใหญ่อยู่ ดังนั้น เวลาเรา Install Program ถ้าใช้ Library ตัวไหน มันค่อยเอาไป Install ครับ แบบนี้ประหยัดที่กว่า

    เวลาที่เขียนบทความนี้ .NET Compact Framework ยังอยู่ระดับ Beta 1 ครับ ในรุ่น Beta 1 นี้ .NET Compace Framework สามารถฝังตัวอยู่ใน Pocket PC 2000, Pocket PC 2002 และ Windows CE.NET ครับ ไม่รู้เป็นอย่างไร ผมชอบเขียน อะไรที่เป็น Beta พอรุ่นจริงออกแล้ว ไม่ค่อยชอบเขียนครับ

Smart Device Extensions for Visual Studio.NET

    .NET Compact Framework มันดูลอยๆ การพัฒนา Software บน .NET Compact Framework เราคงไม่เขียนโปรแกรมบนอุปกรณ์โดยตรง เราเขียนบน PC ครับ แล้วค่อยส่งผลลัพธ์ไปเก็บไว้บนอุปกรณ์อีกที่ เครื่องมือที่เรามีอยู่แล้วก็คือ Visual Studio.NET นั่นเอง เราต้องใช้ตัวเสริมที่ชื่อว่า Smart Device Extensions เพื่อให้ Visual Studio.NET รู้จัก .NET Compact Framework และอุปกรณ์ที่เป็นเป้าหมาย เมื่อเรา Install เสร็จสรรพ การพัฒนาโปรแกรม ก็ทำได้ทำนองเดียวกันกับ Embedded Visual Tools จะทำการ Emulator Output บน PC ก็ได้ หรือจะส่งไปรันที่อุปกรณ์เลยก็ได้ สะดวกมากครับ การ Debug โปรแกรมก็สะดวกโดยใช้ VS.NET

    คุณสามารถดูรายละเอียดของ Smart Device Extensions และ .NET Compact Framework ได้ที่นี่ (มีให้ Download ได้ฟรี)

ก้าวต่อไป

    ในบทต่อๆ ไป ผมจะเรียนรู้ในการเขียนโปรแกรมบน PocketPC 2002 ซึ่งตั้งใจว่าจะเขียนยาวๆ หลายๆ ตอน ใครที่ไม่มี Pocket PC ไม่ต้องลงทุนซื้อนะครับ Emulate บนเครื่อง PC เอา คนเป็น Developer อย่างเราคงหนีมันไม่พ้นครับ