วันอาทิตย์ที่ 3 พฤษภาคม พ.ศ. 2552

DSP MAN

DSP
ตัวกลางระหว่างภาษาคอมพิวเตอร์กับระบบที่เราจะควบคุมสั่งการ หรือบริหารจัดการ หรือรับข้อมูลมาวิเคราะห์แสดงผล ก็คือ สัญญาณไฟฟ้า บนโลกใบนี้ทุกสิ่งทุกอย่างสื่อสารกันโดยผ่านสัญญาณไฟฟ้า แม้แต่คำพูดของมนุษย์ที่เราติดต่อสื่อสารกันก็เป็นสัญญาณไฟฟ้าชนิดหนึ่ง

เมื่อโปรแกรมเมอร์ต้องมาซ่อมรถเต่า(Beetle),(Expert My Bug)

แมลงปีกแข็งของผมเอง
หลังจากว่าด้วยเรื่องภาษาคอมพิวเตอร์กันแล้ว เราจะเขียนโปรแกรมควบคุมสั่งการ หรือเก็บเกี่ยวอะไรทั้งหลายแหล่เราก็ต้องมารู้จักตัวมันกันเสียก่อน ผมมีแมลงปีกแข็งตัวสีส้มอยู่คันหนึ่ง ตัวเดิม เครื่องเดิม ระบบเดิมทุกอย่าง ทีนี้ถ้าผมใฝ่ฝันอยากจะเนรมิตแมลงปีกแข็งของผมซึ่งตอนนี้มันคานเป็นตัวอยู่ ให้บินได้ กลายเป็นเต่าบิน ผมก็ต้องมาทำความรู้จักให้อย่างลึกซึ้ง รู้ไส้รู้พุง จับมาล้างนอกล้างในให้ได้ ทีนี้ก็ต้องมาดูกันว่าส่วนไหนบ้างที่เราจะนำโปรแกรมคอมพิวเตอร์ของเราไปควบคุมสั่งการกันได้บ้าง
1. เครื่องยนต์
ชิ้นส่วนเครื่องยนต์ เท่าที่ความรู้จะมี
1.1 ระบบหล่อลื่น
รถที่ใช้เครื่องยนต์แบบเก่าระบบหล่อลื่นมีความสำคัญมาก โดยเฉพาะแมลงปีกแข็งของผมเครื่องยนต์ระบายความร้อนด้วยอากาศ ถ้าไม่ใส่ใจดูแลระบบหล่อลื่นจะทำให้เครื่องพังได้ หน้าที่หลักของระบบหล่อลื่นคือป้องกันความฝืดระหว่างหน้าสัมผัสของชิ้นส่วนเครื่องยนต์ที่เคลื่อนที่ไปมาระหว่างกันและกัน ทำได้โดยการส่งให้น้ำมันหล่อลื่นไหลเข้าไปอยู่อย่างเพียงพอระหว่างผิวสัมผัส น้ำมันหล่อลื่นนี้จะทำหน้าที่หล่อเย็นชิ้นส่วนประกอบของเครื่องยนต์ซึ่งไม่สามารถแพร่กระจายความร้อนโดยตรงไปยังระบบหล่อเย็นและกาศภายนอกด้วยพร้อมกันนั้นน้ำมันหล่อลื่นก็ยังทำหน้าที่กันรั่ว (Seal) ระหว่างชิ้นส่วนที่เลื่อนสัมผัสกันด้วยคือระหว่างลูกสูบกับผนังกระบอกสูบ และยังทำความสะอาดภายในเครื่องยนต์โดยการชำระล้างสิ่งสกปรกตกค้างและสิ่งที่เหลือจากการเผาไหม้ในห้องสูบ สารคุ(ณภาพที่เติมลงไปในน้ำมันหล่อลื่นยังเพิ่มความต้านทานต่อการกัดกร่อน ฟิล์มน้ำมันหล่อลื่นยังดูดซับผลจกาการสั่นกระแทกระหว่างชิ้นส่วนอีกด้วย น้ำมันเครื่อง(Engine oil) จึงได้นำมาใช้เป็นน้ำมันหล่อลื่นเครื่องยนต์ในการหล่อลื่น กันรั่ว ทำความสะอาด ป้องกันการกัดกร่อนและลดเสียงดังในเครื่องยนต์
1.2 ระบบหล่อเย็น
1.3 เสื้อสูบ กระบอกสูบและห้องเพลาข้อเหวี่ยง
1.4 ฝาสูบ ท่อร่วมไอเสียและท่อร่วมไอดี
1.5 ลูกสูบและแหวนลูกสูบ
1.6 ก้านสูบ เพลาข้อเหวี่ยงและแบริ่ง
1.7 วาล์วเครื่องยนต์และการขับบังคับลิ้น
1.8 ชิ้นส่วนของเครื่องยนต์เบนซิน 2 จังหวะ
1.9 เครื่องบรรจุสูบเพิ่มหรือซูเปอร์ชาร์จ
2. ระบบเกียร์
3. ระบบเบรค
4. ระบบช่วงล่าง
5. ระบบกันขโมย ภายใน บันเทิง

วันพฤหัสบดีที่ 30 เมษายน พ.ศ. 2552

A System Application with SAM(Simplified Architecture Microprocessor)

A System Application with SAM
In the case of the microprocessor, this is named SAM (Simplified Architecture Microprocessor).
In past Blog the importance of the program in developing microprocessor systems has been emphasized. In the SAM application, the basic procedures involved in writing programs were illustrated. Since developing the program is such a basic requirement in all microcomputer applications, these procedures will be examined in more detail in this Blog, starting with basic concepts of program development.

HOW ARE PROGRAMS DEVELOPED?
Developing a program is just like developing any other type of design in terms of the sequence of tasks that have to be performed. First, the system performance must be completely described before the design effort can begin. The program is to be built from the instructions of a given microprocessor. Therefore, the system performance description must be precise enough so there will be no problem building the component parts with the available instructions. The task of providing such a description is an interactive one which ultimately results in breaking the original system into many elementary functional modules. Each of these elementary functional modules (subprograms) can be converted rather directly into instruction sequences. These subprogram modules can then be interfaced together to form the overall desired system program. The basic procedure is as follows:
1. Write a general description of the desired overall system performance.
2. Identify the overall system inputs, outputs, and general subsystem operations.
3. Describe each subsystem operation, identifying inputs, outputs, and the tasks involved.
4. Continue subdividing system tasks and developing task descriptions until they are defined at the most elementary level.
5. Write the instruction sequences that implement all the elementary subsystem tasks.
6. Combine the individual subsystem task instruction sequences into the desired overall system program.

ภาษาคอมพิวเตอร์

ภาษาคอมพิวเตอร์มีมากมาย แล้วภาษาอะไรที่จะเหมาะกับเราหรืองานของเรา การที่จะทำงานขึ้นมาสักชิ้นควรรู้จักตัวเองก่อนว่าเราต้องการเครื่องมืออะไรในการทำงาน เครื่องมือที่เหมาะกับเราแต่ต้องไปประยุกต์ใช้ให้ได้กับงาน หรือเครื่องมือที่เหมาะกับงานและเราก็ปรับตัวให้เข้ากับเครื่องมือ
งานที่ต้องใช้เกี่ยวกับการใช้ภาษาคอมพิวเตอร์มีอยู่มากมาย งานหนึ่งในนั้นคือการสร้างระบบบริหารจัดการระบบทางทหาร หรือ ระบบอำนวยการรบ หรือ Combat Management System (CMS) การใช้คอมพิวเตอร์ที่ทำหน้าที่ในการควบคุมระบบอิเล็กทรอนิกส์ และเชื่อมต่อกันเป็นระบบเครือข่าย มีข้อมูลวิ่งอยู่ในระบบเครือข่ายเป็นจำนวนมาก ต้องมี Middle ware เพื่อช่วยในการทำให้ข้อมูลเป็นแบบ Data Distribution และใช้ภาษาในการเขียนโปรแกรมคือ ภาษา ADA, C, C++ เหมือนในวงการอุตสาหกรรมที่ใช้ระบบ Distributed Control System (DCS) หลังจากที่เราคุยกันเรื่องใช้เครื่องมืออะไรในการพัฒนาซอฟต์แวร์ แล้ว เราก็ต้องมาคิดกันต่ออีกว่าแล้วเราจะพัฒนาซอฟต์แวร์บนสิ่งแวดล้อมใดๆสิ่งแวดล้อมของระบบคอมพิวเตอร์ที่คิดไว้ก็คือ ระบบปฏิบัติการ(Operating System, OS) ไม่ว่าจะเป็นสิ่งแวดล้อมแบบ Microsoft Windows, UNIX, Linux, Solaris, VxWork ถ้าต้องการให้งานของเราสามารถพัฒนาขึ้นมาครั้งเดียวแล้วใช้ได้ในทุกสภาวะแวดล้อมก็ต้องคำนึงถึงตัวแปรภาษาคอมพิวเตอร์เป็นหลัก แต่ถ้ามั่นใจว่างานของเราทำงานอยู่บนสิ่งแวดล้อมเดียวไม่มีการเปลี่ยนแปลงสิ่งแวดล้อมก็เลือกเครื่องมือที่ดีที่สุดเช่น ภาษา Assembly แล้วแต่จะพิจารณา จึงต้องมีการออกแบบระบบ (System Design) แต่สุดท้ายแล้วก็ขอให้เริ่มจากลงมือทำ ลองมาค่อยๆศึกษาแต่ละภาษาไปพร้อมๆกัน เราเองคงไม่สามารถเก่งไปได้ทุกภาษา ว่าแล้วทำไมนักคิดทั้งหลายแหร่ถึงไม่รวมเอาข้อดีของทุกภาษา แล้วมาพัฒนาใหม่เป็นภาษาเดียว (ไม่แน่ใจว่า C# เป็นอย่างนั้นแล้วหรือยัง ) แต่ในระบบที่เกี่ยวกับ CMS ยังคงเลือกใช้สามภาษานี้อยู่(ADA, C, C++) แต่โดยส่วนตัวแล้วชอบภาษาแอสแซมบลี้เป็นพิเศษ ในบล็อกนี้ขอตั้งกรอบของบทความนี้ไว้ที่ 4 ภาษานี้ก็แล้วกันได้แก่
1. ADA กับ Data Distribution
2. ASSEMBLY สุดที่รัก
3. C ได้ทุกที่
4. C++ กับขอบข่ายงานที่มากมาย


1. ADA กับ Data Distribution
ติดไว้ก่อนยังไม่ได้แปลจากสื่ออินเตอร์เน็ต เคยใช้แต่ของสำเร็จรูปที่มีอยู่ในระบบ มีแหล่งที่หน้าสนใจ 2 แห่ง คือ Prismtech, RTI (Real Time Innovations) ในส่วนของ Prismtech มีสองชิ้นที่หน้าสนในคือ OpenSplice กับ OpenCORBA ประโยนช์ของมันอเนกอนันต์ ถ้ารู้จักนำ Middleware สองตัวนี้มาใช้ในงานควบคุมสั่งการที่มีข้อมูลไหลอยู่ในระบบมากๆ และจะใช้ในการนำข้อมูลแยกเป็นส่วนๆเพื่อวิเคราะห์และประมวลผล ทางด้าน Finance ก็ยังได้ ไว้ผมศึกษาเรื่องนี้ดีแล้วผมจะรองออกแบบพัฒนาให้กับประเทศไว้ใช้เล่นๆสักโปรแกรมนึง

2.ภาษาซีมีอยู่ได้ทุกที่
ประโยคนี้หมายความว่า ในทุกๆที่ ทุกๆระบบ ทุกๆสิ่งแวดล้อมภาษาซีสามารถพัฒนาเขียนโปรแกรมได้หมด เช่น บนคอมพิวเตอร์ที่ใช้ระบบปฏิบัติการต่างๆไม่ว่าจะเป็น DOS, Microsoft Windows, UNIX, Linux, Solaris, OS/2 และในระบบที่ดูไม่เหมือนคอมพิวเตอร์ ใน Single Board Computer, Microcontroller ระบบที่แบบฝังตัว (Embedded System) ระบบแบบ Real Time ที่ใช้ระบบปฏิบัติการแบบ Real Time Operating System (RTOS) ตัวอย่าง RTOS เช่น VxWork, Lynux ระบบ Single Board ที่ใช้ในการประมวลผลสัญญาณดิจิตอล (DSP) บทความนี้เป็นบทความที่เขียนขึ้นโดยคนไทย อยากเห็นคนไทยมีความสนุกในการพัฒนาซอฟต์แวร์ขึ้นมาใช้กันเอง ร่วมไม้ร่วมมือกันพัฒนาสิ่งที่มีมูลค่ามหาศาล โดยที่มีต้นทุนการผลิตที่ต่ำมาก ผู้เขียนชอบการสร้างสรรค์สิ่งต่างๆ ไปเรื่อยๆ สำเร็จบ้าง ไม่สำเร็จบ้าง ไปเห็นชาวต่างชาติเขาทำงานกัน เขาก็ทำเหมือนเรา ไม่ได้หนักไปกว่าเรา แต่เขาแค่แตกต่างกันที่วิธีคิด เราอย่างเอาความคิด หรือการประพฤติปฏิบัติตัวของชาวต่างชาติมาใช้กับชีวิตเรา มันคนละชีวิต มันคนละสิ่งแวดล้อม เราไม่สามารถเอาภาษาคอมพิวเตอร์ที่เขียนบนระบบหนึ่ง ไปใช้ได้โดยตรงกับอีกระบบหนึ่ง ฉันใดก็ฉันนั้น เราเป็นแค่คนกลุ่มน้อยแต่เราก็เลือกทำในสิ่งที่ควรทำ ทำในสิ่งที่ดี ถ้าเราเป็นพุทธศาสนิกชน ทราบว่าพระพุทธองค์ทรงแบ่งบัวออกเป็น ๓ เหล่า ถ้าเราเป็นบัวพ้นน้ำแล้ว เราคงจะไม่มาเวียนว่ายตายเกิดอย่างนี้แล้ว อย่าได้แบ่งอะไรกันในหมู่พวกเรากันเองอีกเลย นอกเรื่องไปหรือเปล่าหว่าเรา มาต่อกันเรื่องภาษาซีกันต่อดีกว่า ผู้เขียนอยากสร้างอะไรสักอย่างที่ทำบนสิ่งแวดล้อมที่เราไม่สามารถสร้างได้เองทั้งหมด ก็เลือกที่มันฟรี หรือถูก หรือที่เจ้าของเขาไม่หวงก็แล้วกัน อะไรที่เขาหวงเราก็อย่าไปเบียดเบียนเขา อะไรที่ไม่ใช่ของเรา ก็ไม่ใช่ของเรา แต่ถ้าอยากได้อะไรที่เป็นของเราก็ร่วมมือกัน ไม่มีอะไรยากเกินความสามารถพวกเราคนไทยได้หรอก ไว้เดี๋ยวศึกษาประวัติศาสตร์ชนชาวไทยให้แม่นก่อนแล้วค่อยมาเขียนว่า ชนชาวไทยไม่ธรรมดาจริงๆไม่งั้นคงไม่อยู่เป็นชาติมาได้ถึงทุกวันนี้ แต่ปัจจุบันนี้และต่อไปในอนาคตไม่รู้ว่าชนชาวไทยจะยังสุดยอดอยู่หรือเปล่า เพราะไม่แน่ใจว่าจะเหลือชนชาวไทยบนโลกใบนี้อีกหรือเปล่า หรือจะเป็นแค่ประวัติศาสตร์โลกก็ไม่รู้ ผมไม่เคยใช้คำว่าชนชาติไทย เพราะผมไปเจอคนไทยที่แลต ลองไหนในโลกผมก็ดีใจว่าได้เจอญาติพี่น้อง ไม่จำเป็นต้องเป็นในแผ่นดินนี้ แต่ในขณะที่คนไทยในแผ่นดินนี้เป็นไรกันอยู่เรา(เหตุการณ์ปัจจุบันปี พ.ศ.๒๕๕๒) เอาเข้าไป พอแล้ว
สิ่งหนึ่งที่เป็นปัจจัยสำคัญกับชีวิตผู้เขียนไปแล้วก็คือรถยนต์จริงๆแล้วยังไม่มี แต่ตอนนี้พอไม่มีมันรู้สึกลำบากพอสมควร และโดยส่วนตัวแล้ว นักพัฒนาซอฟต์แวร์อย่างผมกับการซ่อมรถเป็นยิ่งกว่ายาขม เข้าอู่รถที่ไรพอช่างซ่อมโน้นซ่อมนี่เสร็จแล้ว ก็เจอปัญหากล่อง ECU ตลอด สุดท้ายช่างร้านทั่วไปก็ต้องวิ่งเข้าศูนย์รถยี่ห้อนั้นๆไป ทำให้ผู้เขียนเริ่มสนใจงานเขียนโปรแกรมระบบควบคุมรถยนต์ถึงแม้เราจะยังสร้างไม่ได้อย่างเขา แต่ก็ขอรองศึกษาเล่นๆดูก่อน สไตร์เดิมๆ ทำเล่นให้เป็นจริง ไม่ว่าจะเป็นระบบควบคุมช่วงล่าง ระบบส่งกำลัง ระบบเบรค ระบบไฟฟ้าภายใน มีข้อมูลตัวนึงในอินเตอร์เน็ตเกี่ยวกับรถโฟล์ค คือ Volkswagen RTI’s Real-Time Messaging Middleware for Driver Assistance Application
ภาษาซีที่อยากจะเริ่มขอเริ่มด้วยสิ่งแวดล้อมฟรีๆที่หาได้ทั่วไป หลายมหาลัยก็มีทำแจกให้ใช้ หน่วยงานภาครัฐก็มีทำให้ใช้ หรือ จะโหลดจากอินเตอร์เน็ตก็ไม่ผิด เริ่มบน Linux แล้วกันเรา จะสายพันธุ์ไหนไม่เกี่ยง การที่จะพัฒนาซอฟต์แวร์ให้ใช้ได้บนระบบซึ่งมีความซับซ้อนสูง สิ่งหนึ่งที่จะทำให้เราพัฒนาได้ง่ายขึ้นคือการศึกษาระบบปฏิบัติการให้ได้อย่างถ่องแท้ และสัมพันธ์กับฮาร์ดแวร์ที่เราต้องการจะนำไปใช้งานให้ได้อย่างลงตัว และทำให้ผู้ใช้งานนำไปใช้ได้อย่างง่ายได้ที่สุด โดยซ่อนการทำงานที่ยุ่งยากและสลับซับซ้อนไว้เบื้องหลัง การจะให้ระบบปฏิบัติการทำงานในลักษณะดังกล่าวได้ ผู้ออกแบบระบบเพื่อจะพัฒนาซอฟต์แวร์จะต้องสรรหาวิธีการที่เป็นมาตรฐานในการติดต่อกับคอมพิวเตอร์รวมทั้งการสร้างฟังก์ชั่นที่เป็นมาตรฐานสำหรับติดต่อกับอุปกรณ์หรือส่วนประกอบอื่นในระบบฮาร์ดแวร์ ในแต่ละส่วนมีองค์ประกอบแต่ละอย่างมีส่วนประกอบที่ใช้ควบคุมแตกต่างกัน เช่น อุปกรณ์ในการอินพุท/เอาท์พุทข้อมูลเข้าส่วนประมวลผล ในส่วนประมวลผลก็ยังมีรีจิสเตอร์ไว้คอยเก็บข้อมูลสถานะของอุปกรณ์ ลีนุกซ์จะกำหนดบทบาทของอุปกรณ์แต่ละชนิดโดยใช้ไฟล์ที่เรียกว่า ดีไวซ์ไดรเวอร์ ซึ่งเป็นโปรแกรมไดรเวอร์เหล่านี้จะกำหนดลักษณะการทำงานของส่วนประกอบต่างๆในคอมพิวเตอร์ ดีไวซ์ไดรเวอร์เป็นโมดุลเชื่อมต่อการทำงานระหว่างแอพพลิเคชั่นของผู้ใช้งานและฮาร์ดแวร์ของอุปกรณ์ เราจึงควรออกแบบให้โมดูลมีความยืดหยุ่นไม่จำกัดการใช้งานฮาร์ดแวร์ ปล่อยให้เป็นหน้าที่ของแอพพลิเคชั่นเองว่าจะเลือกใช้งานอย่างไร ดีไวซ์ไดรเวอร์เพียงแต่จัดการรีซอร์สภายในของคอมพิวเตอร์ให้เหมาะสม