การเขียนโปรแกรมความแตกต่างระหว่างไมโครคอนโทรลเลอร์และไมโครโปรเซสเซอร์?


9

ดังนั้นฉันมักจะเห็นหนังสือ / บทช่วยสอนและการอ้างอิงเมื่อมีการเขียนโปรแกรมในการประกอบกับไมโครโปรเซสเซอร์ ..... แล้วฉันเห็นบางคนอ้างว่ามันเป็นไมโครคอนโทรลเลอร์

เช่น Atmel ATtiny2313 .... ฉันเห็นบทเรียนบางอย่างบางคนเรียกว่าไมโครโปรเซสเซอร์บางคนเรียกมันว่าไมโครคอนโทรลเลอร์

มันคืออะไร และการเขียนโปรแกรมพวกเขา (โดยทั่วไป) เหมือนกัน? (ในการชุมนุม)



1
@Kellenjb: คงเป็นไปไม่ได้ถ้ามันไม่ได้ถามถึงความแตกต่างของการเขียนโปรแกรม ฉันคิดว่ามันแตกต่างกันพอที่จะไม่ปิด
BG100

1
@ BG100 คำตอบที่ยอมรับเท่านั้นอธิบายความแตกต่างไม่ใช่ความแตกต่างในการเขียนโปรแกรม
Kortuk

คำตอบ:


14

นี่เป็นคำถามสองข้อในหนึ่งข้อ ...

ประการแรกอะไรคือความแตกต่างระหว่างไมโครคอนโทรลเลอร์และไมโครโปรเซสเซอร์?

ไมโครโปรเซสเซอร์เป็นซีพียูที่ทำตามชุดคำสั่งที่อ่านจากบัสหน่วยความจำภายนอก มันควบคุมอุปกรณ์ต่อพ่วงภายนอก (เช่นหน้าจอคีย์บอร์ดเม้าส์ฮาร์ดไดรฟ์ ฯลฯ ) ผ่านทางบัสสื่อสารภายนอก เมื่อคุณตั้งโปรแกรมไมโครโปรเซสเซอร์โปรแกรมของคุณจะอยู่ภายนอกกับอุปกรณ์ ในคอมพิวเตอร์หน่วยความจำนี้เริ่มต้นจากการบูท BIOS ROM ซึ่งเริ่มอ่านระบบปฏิบัติการจากฮาร์ดไดรฟ์ไปยังหน่วยความจำ RAM แล้วเริ่มดำเนินการต่อจากที่นั่น

ไมโครคอนโทรลเลอร์เป็นเหมือน CPU + หน่วยความจำ all-in-one ที่มีพอร์ตภายนอกบางตัวเพื่อสื่อสารกับโลกภายนอก มันมีอยู่ในตัวเองและไม่ได้ใช้หน่วยความจำภายนอกเพื่อเก็บโปรแกรม (แม้ว่าจำเป็นต้องใช้สามารถอ่านและเขียนข้อมูลการทำงานไปยังหน่วยความจำภายนอก)

ประการที่สองคือการเขียนโปรแกรมไมโครคอนโทรลเลอร์และไมโครโปรเซสเซอร์เหมือนกันหรือไม่?

ในบางวิธีใช่และในบางวิธีไม่

ภาษาแอสเซมบลีเป็นคำกว้างที่อธิบายชุดคำสั่งที่ CPU สามารถเข้าใจได้โดยตรง เมื่อคุณรวบรวมภาษาแอสเซมบลี 'มันไม่ได้รวบรวมอะไรจริงๆมันทั้งหมดจะแปลงเป็นลำดับของไบต์ที่แสดงคำสั่งและปลั๊กในบางตำแหน่งหน่วยความจำญาติ นี่เป็นเรื่องปกติสำหรับทั้งไมโครโปรเซสเซอร์และไมโครคอนโทรลเลอร์

อย่างไรก็ตามซีพียูชนิดต่าง ๆ นั้นเข้าใจคำสั่ง CPU ที่แตกต่างกัน ตัวอย่างเช่นถ้าคุณเขียนโปรแกรมภาษาแอสเซมบลีที่ทำงานร่วมกับไมโครคอนโทรลเลอร์ pic 16F877 มันจะไร้สาระสมบูรณ์ไปยังไมโครโปรเซสเซอร์หรือไมโครคอนโทรลเลอร์อื่น ๆ ที่อยู่นอกไมโครคอนโทรลเลอร์ตระกูล pic 16Fxxx

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


สิ่งที่ฉันหมายถึงคือใช่แล้ว ASM จะแตกต่างกันสำหรับแต่ละคน ..... แต่คำสั่ง / etc โดยทั่วไปเหมือนกัน (หรือทำแบบเดียวกัน) ระหว่าง MC และ MP ... ฉันหมายถึง MC มี MP ดังนั้นฉันจะถือว่า .. (ลบหน่วยความจำ)

@ เซารอน: ไม่ไม่ได้จริงๆ .. ในขณะที่คำสั่งบางอย่างอาจคล้ายกันระหว่างอุปกรณ์เช่น add, mov, sub, ฯลฯ พวกเขาอาจจะใช้งานที่แตกต่างกันและจะไม่พอร์ตระหว่างอุปกรณ์
BG100

1
คำตอบที่ยอดเยี่ยมและเป็นสิ่งที่อาจช่วยฉันได้เมื่อฉันเริ่มเรียนไมโครโปรเซสเซอร์
pfyon

สิ่งที่ฉันหมายถึงก็คือ ...... เช่นเดียวกับที่ไมโครคอนโทรลเลอร์มีซีพียูอยู่ภายใน ... คำแนะนำการประกอบนั้นมุ่งไปที่ซีพียูจริงมากกว่าองค์ประกอบที่อยู่รอบ ๆ

@ เซารอน: ใช่ถูกต้องแล้ว
BG100

10

ความแตกต่างคือไมโครคอนโทรลเลอร์มีหน่วยความจำบนชิปเช่น Flash EEPROM และ RAM และอุปกรณ์ต่อพ่วงเช่น I / O แบบขนานและอนุกรม ด้วยไมโครโปรเซสเซอร์ตัวแรกนั่นคืออุปกรณ์ภายนอกทั้งหมด แทนที่จะเป็นไมโครโปรเซสเซอร์ของ I / O ก็มีที่อยู่และบัสข้อมูลมาที่ขาของพวกเขา
วิธีที่คุณเขียนรหัสสำหรับเหมือนกัน

เพื่อแสดงให้เห็นถึงจุดนั้น: มีสถาปัตย์ (เช่น ARM) ซึ่ง CPU เดียวกันนี้มีประโยชน์เป็นไมโครคอนโทรลเลอร์ (ที่มีรหัสและหน่วยความจำข้อมูลทั้งหมดบนชิป) เป็นไมโครโปรเซสเซอร์ (รหัสภายนอกและหน่วยความจำข้อมูลทั้งหมด) หรือไฮบริด หน่วยความจำบนชิป แต่สำหรับแอพพลิเคชั่นส่วนใหญ่คุณจะเพิ่มหน่วยความจำภายนอก) CPU เหมือนกันดังนั้นการเขียนโปรแกรม (ตามความหมายของคำสั่ง CPU) เหมือนกัน


โอ้ตกลงที่เหมาะสมมากกว่า แต่ ASM สำหรับแต่ละคนนั้นเหมือนกันใช่ไหม

คุณหมายถึงถ้าฉันเรียนรู้ที่จะเขียนโค้ดสำหรับซีรี่ส์ Cortex M ฉันสามารถโค้ดสำหรับชุด Cortex A ได้หรือไม่?
0xakhil

โดยพื้นฐานแล้วใช่สำหรับคำถามทั้งสองคำสั่ง asm เหมือนกัน (แม้ว่าอาจมีการเปลี่ยนแปลงเล็กน้อยเช่นเดียวกับรุ่น ARM ต่างๆสามารถเพิ่มคำแนะนำเฉพาะ) แต่เมื่อใดก็ตามที่คุณกำลังใช้งานนอก CPU (แคชตัวควบคุมขัดจังหวะอุปกรณ์ต่อพ่วง ฯลฯ ) จะมีความแตกต่างใหญ่
Wouter van Ooijen

8

แม้ว่านี่จะมีแนวโน้มที่จะเป็นพื้นที่สีเทาอีกความแตกต่างกันระหว่างไมโครคอนโทรลเลอร์และไมโครโปรเซสเซอร์คือว่าไมโครคอนโทรลเลอร์มักจะใช้ฮาร์วาร์สถาปัตยกรรม (พื้นที่ที่อยู่แยกต่างหากสำหรับรหัสและข้อมูล) ในขณะที่ micrprocessors เกือบทั้งหมดใช้Von Neumann สถาปัตยกรรม (พื้นที่ที่อยู่ร่วมกันเพื่อรหัสและข้อมูล) .

ตัวอย่างของตระกูลไมโครคอนโทรลเลอร์ที่ใช้สถาปัตยกรรมฮาร์วาร์ด ได้แก่ : AVRs, Intel 8051, PICs (ยกเว้น PIC32, ดูด้านล่าง) และ ARM Cortex-M3 ข้อยกเว้นที่น่าสังเกตคือโปรเซสเซอร์ Freescale เช่น HCS08 ซึ่งใช้สถาปัตยกรรม Von Neumann เช่นเดียวกับ Parallax Propeller

สิ่งนี้มีผลต่อการเขียนโปรแกรมในหลายวิธี (ตัวอย่างที่แสดงด้านล่างใช้ C):

อาจมี RAM หลายประเภทแต่ละประเภทมีพื้นที่ที่อยู่ของตนเอง ตัวอย่างเช่น 8051 มีข้อมูลภายนอก (xdata) ซึ่งได้รับการจัดการแยกต่างหากจาก 256 ไบต์แรกของ RAM แม้ว่าทั้งคู่จะมีการใช้งานบนชิปตัวเดียวกัน ดังนั้นเราต้องใช้ qualifier ในการประกาศตัวแปรเช่นunsigned int xdata foo;

หากค่าคงที่ถูกประกาศในหน่วยความจำรหัสอาจจำเป็นต้องคัดลอกไปยัง RAM ก่อนจึงจะสามารถเข้าถึงได้ หรือต้องมีวิธีในการเข้าถึงหน่วยความจำรหัสราวกับว่าเป็นข้อมูล - เช่นตัวระบุรหัสสำหรับ 8051s หรือคุณสมบัติ Program Space Visiblity (PSV) ของ PIC

วิธีการเข้าถึงรหัสและ RAM ที่ไม่ได้มาตรฐานเหล่านี้มีความแตกต่างที่สำคัญ (นอกเหนือจากอุปกรณ์ต่อพ่วง) เมื่อทำการย้ายรหัส C จากตระกูลชิปหนึ่งไปยังอีกรุ่นหนึ่ง

คุณไม่สามารถเรียกใช้รหัสจาก RAM ในสถาปัตยกรรมฮาร์วาร์ดที่เข้มงวดดังนั้นจึงไม่สามารถแก้ไขรหัสด้วยตนเองได้ (เว้นแต่คุณจะนับหน่วยความจำโปรแกรมกระพริบอีกครั้งทันที อย่างไรก็ตาม PIC32 มีสถาปัตยกรรมฮาร์วาร์ดที่ได้รับการแก้ไขซึ่งอนุญาตให้เรียกใช้โค้ดใน RAM จริง ๆ แล้ว Parallax Propeller ใช้ประโยชน์จากความสามารถในการแก้ไขโค้ดเพื่อดำเนินการส่งคืนรูทีนย่อยเนื่องจากไม่มีสแต็กของฮาร์ดแวร์


1

โดยทั่วไปแล้วไมโครคอนโทรลเลอร์เป็นโซลูชันชิปตัวเดียวที่ให้ฟังก์ชันการคำนวณและอุปกรณ์ต่อพ่วง

ไมโครโปรเซสเซอร์มอบฟังก์ชันการคำนวณ แต่ไม่ใช่ฟังก์ชันต่อพ่วง

ฟังก์ชั่นอุปกรณ์ต่อพ่วงสามารถทำได้ง่ายเพียงแค่มี I / O ง่าย ๆ หรืออาจรวมถึงตัวนับและตัวจับเวลาที่ซับซ้อนการแสดงผลวิดีโออีเธอร์เน็ตการควบคุมมอเตอร์ตัวแปลงสัญญาณเสียงและวิดีโอและอื่น ๆ

สำหรับสถาปัตยกรรมที่ระบุ (พูดถึงซีพียูที่ใช้ x86 และ MCU) การเข้ารหัส "การคำนวณ" จะเหมือนกัน แต่วิธีที่คุณเข้าถึงฟังก์ชั่นอุปกรณ์ต่อพ่วงจะแตกต่างกันไปดังนั้นคุณจะมีการเข้ารหัสเฉพาะฮาร์ดแวร์ที่แตกต่างกันมากขึ้นอยู่กับวิธีการใช้งานฟังก์ชั่นอุปกรณ์ต่อพ่วงบนฮาร์ดแวร์เป้าหมายของคุณ


1

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

ไมโครคอนโทรลเลอร์บางตัวใช้ชุดคำสั่งเดียวกันกับไมโครโปรเซสเซอร์ที่เป็นที่นิยม ชุดคำสั่ง 68,000 ชุดที่ใช้ในเครื่อง Macintosh, Amiga และ Atari ST ต้นฉบับของคอมพิวเตอร์ส่วนบุคคลนั้นยังถูกใช้ในไมโครคอนโทรลเลอร์บางตัว แม้ว่าชุดคำสั่งที่ใช้โดย Macintosh และบอร์ดควบคุมที่ใช้ 68HC340 จะเหมือนกัน แต่การเขียนโปรแกรมสำหรับสองแพลตฟอร์มนั้นแตกต่างกันมาก บน Macintosh ตามเวลาที่โปรแกรมที่ผู้ใช้จัดหาเริ่มทำงานระบบส่วนใหญ่จะ "ติดตั้ง" แล้ว รหัสที่ต้องการบล็อกหน่วยความจำสามารถโหลดรีจิสเตอร์ด้วยจำนวนที่ต้องการและดำเนินการคำสั่ง "A-trap" ระบบปฏิบัติการ Macintosh จะส่งกลับตัวชี้ไปยังหน่วยความจำบางส่วนที่ไม่ได้รับการจัดสรรก่อนหน้านี้เพื่อวัตถุประสงค์อื่นและทำเครื่องหมายพื้นที่ของหน่วยความจำนั้นเพื่อให้ชนะ ' ไม่ได้รับการจัดสรรอีกครั้งจนกว่าจะได้รับคำแนะนำว่าผู้รับดั้งเดิมไม่ต้องการมันอีกต่อไป ในทางตรงกันข้ามบนกระดานที่มี RAM 68HC340 และ 128K ไม่มีความจำเป็นหรือความสามารถในการ "ถาม" RAM เมื่อโปรแกรมเริ่มทำงานจะ "ได้รับ" 128K สามารถใช้งานได้ตามที่ต้องการ ไม่มีอะไรจะใช้ แต่ในทางกลับกันโปรแกรมของผู้ใช้จะต้องติดตามว่าส่วนใดที่ใช้เพื่อวัตถุประสงค์อะไรเนื่องจากไม่มีสิ่งอื่นใดที่จะติดตามได้

ในขณะที่ความแตกต่างระหว่างไมโครคอมพิวเตอร์กับไมโครคอนโทรลเลอร์และคำถามก็คือเกี่ยวกับไมโครโปรเซสเซอร์การอภิปรายส่วนใหญ่เกี่ยวกับการเขียนโปรแกรมไมโครโปรเซสเซอร์จะกล่าวถึงในบริบทของคอมพิวเตอร์อเนกประสงค์


0

ไมโครโปรเซสเซอร์: โมดูลฮาร์ดแวร์ดิจิตอลที่ดำเนินการตามคำสั่ง โมดูลสามารถเป็นวงจรรวมที่สมบูรณ์

Microcontroller: โมดูลที่สมบูรณ์ที่มีไมโครโปรเซสเซอร์พร้อมหน่วยความจำภายในเพิ่มเติมจากโมดูลอื่น ๆ


ยินดีต้อนรับสู่ EE.SE ไมค์ ใช้ <enter> x 2 เพื่อแบ่งย่อหน้า ฉันแก้ไขให้คุณแล้ว
ทรานซิสเตอร์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.