PIC 16F เริ่มต้น .. ความแตกต่างของไวยากรณ์ของโปรแกรมเมื่อใช้คอมไพเลอร์ต่างกัน


9

อย่างที่ฉันได้พูดไปฉันเพิ่งเริ่มเขียนโปรแกรม pic16f877a ตอนนี้ฉันสามารถทำงานกับจอแสดงผล 7 ส่วน ในปัจจุบันฉันใช้คอมไพเลอร์ ccs ไม่มีอะไรผิดปกติกับที่ แต่ฉันชอบที่จะเป็นโปรแกรมเมอร์อิสระคอมไพเลอร์ ดังนั้นฉันจึงต้องการทำงานในคอมไพเลอร์อื่นเช่น IAR หรือ Hitechc ฉันต้องการที่จะรู้ว่า "ประกาศคำสั่งโปรแกรมในคอมไพเลอร์" นอกเหนือจาก ccs จะแตกต่างกันอย่างไร โปรดแนะนำฉันเกี่ยวกับวิธีการเข้าถึงสิ่งนี้ ฉันยินดีรับข้อเสนอแนะทุกรูปแบบ ขอบคุณล่วงหน้า.

คำตอบ:


9

ยอดเยี่ยมที่คุณต้องการรวบรวมอิสระ! น่าเสียดายที่คอมไพเลอร์ hitech และ CCS สำหรับ PIC ที่ต่ำสุดใช้จำนวนมากในการประกาศตัวประมวลผลล่วงหน้าเฉพาะคอมไพเลอร์รูทีนการเข้าถึงคอมไพเลอร์เฉพาะพินคอมไพเลอร์และในกรณีของ CCS คอมไพเลอร์รูทีนเฉพาะสำหรับฟังก์ชั่น

ไม่สามารถเขียนโค้ดของคุณให้เป็นแบบไม่คอมไพเลอร์โดยเฉพาะโดยไม่มี preprocessor #define, #ifdef, #ifndef และอื่น ๆ เพื่อเข้าถึงส่วนเฉพาะของสิ่งที่คอมไพเลอร์แต่ละข้อเสนอ นี่จะทำให้โค้ดของคุณอ่านไม่ได้

สิ่งที่ดีที่สุดที่คุณสามารถตั้งเป้าหมายได้คือการเป็นอิสระจาก IDE และใช้บางอย่างเช่น eclipse ดังนั้นอย่างน้อยคุณก็ใช้ IDE เดียวกัน สิ่งนี้จะส่งผลให้สูญเสียตัวช่วยสร้าง CCS สำหรับการตั้งค่าฟังก์ชั่นหลัก แต่จะให้ความยืดหยุ่นในการใช้ IDE เดียวกัน

สิ่งที่ควรพิจารณาอีกประการหนึ่งคือทั้งไฮเทคและซีซีเอสไม่มีตัวเชื่อมโยงคอมไพเลอร์ตัวจริง (และอย่างน้อยในอดีต) และต้องการให้คุณใช้ "#include myfile.c" ซึ่งฉันเองดูถูก ... แต่นั่นเป็นอีกเรื่อง

ฉันไม่ได้แสดงความคิดเห็นในคอมไพเลอร์ IAR เนื่องจากฉันใช้ CCS และไฮเทค ทั้งสองทำงานได้ดี แต่ฉันไม่เคยมีความสุขเลยหลังจากที่ได้ย้ายจากแพลตฟอร์มโมโตโรล่า (ตอนนี้ฟรีสเกล) และใช้คอมไพเลอร์ metroworks ซึ่งสูงขึ้นในเวลานั้น คอมไพเลอร์ IAR นั้นดูดี แต่ฉันไม่เคยใช้มันเลย


หากคุณสามารถจัดการกับการเข้าพักที่ pic18 หรือสูงกว่าคุณควรดูที่คอมไพเลอร์ c18 มีการสนับสนุนจำนวนมาก IAR กำลังยกเลิกการสนับสนุน PIC พวกเขาจะไม่ขายใบอนุญาตพร้อมการบำรุงรักษาอีกต่อไป
Kortuk

ฉันเข้าใจแล้วว่าสถาปัตยกรรม PIC16 / 12/10 นั้นไม่ตรงกับภาษา C มากนัก ดังนั้นคอมไพเลอร์ C จึงต้องมีโครงสร้างที่ผิดปกติและไม่ได้มาตรฐานเพื่อชดเชยกับสถาปัตยกรรม PIC ผลลัพธ์ที่ได้คือคอมไพเลอร์ไม่ทำงานร่วมกัน
Connor Wolf

7

หากคุณใช้ชิ้นส่วน PIC18 ฉันจะแนะนำ C18 คอมไพเลอร์จาก Microchip มันสอดคล้องกับ ANSI C อย่างใกล้ชิดกว่าคอมไพเลอร์ CCS ฉันไม่แน่ใจเกี่ยวกับคอมไพเลอร์ Hi-Tech เนื่องจากฉันไม่ได้ใช้ ดังที่ได้กล่าวไว้ก่อนหน้านี้หากคุณต้องการสร้างรหัสอิสระของคอมไพเลอร์คุณจะต้องใช้คำสั่ง pre-compiler จำนวนมาก ฉันขอแนะนำให้ดูที่โปรแกรมตัวอย่างของ Microchip ที่สนับสนุนคอมไพเลอร์หลายตัวเพื่อให้เข้าใจว่ามันเสร็จสิ้นแล้ว


c18 สำหรับ pic18, c30 สำหรับ pic24 และ dspic, c32 สำหรับ pic32!
Kortuk

CCS นั้นดีในบางสิ่งที่ง่ายกว่า (เช่นขัดจังหวะและตัวจับเวลา - ตัวอย่าง Microchip ทั้งหมดที่คุณเขียน ASM เพื่อให้
อินเตอร์รัปต์

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

3

น่าเสียดายที่คุณจะพบว่ามันยากมากที่จะหาโปรแกรมอิสระคอมไพเลอร์สำหรับไมโครคอนโทรลเลอร์ มีปัญหาหลายประการต่อไปนี้เป็นเพียงสองข้อ:

  1. ความแตกต่างในอุปกรณ์ต่อพ่วงการตั้งชื่อ SFR ฯลฯ (โดยเฉพาะโปรเซสเซอร์อื่น ๆ แต่ถึงแม้จะมีคอมไพเลอร์จากตระกูลเดียวกัน) และ;

  2. คุณสมบัติที่ไม่ได้มาตรฐานในคอมไพเลอร์บางตัวเช่นการตั้งค่าบิตแยกต่างหากหรือโครงสร้างที่แตกต่างกันสำหรับการเรียกใช้รหัสประกอบ

ซีรี่ส์ 16F มีข้อ จำกัด อย่างมากในด้านสถาปัตยกรรมและไม่ได้ออกแบบมาเพื่อรองรับคอมไพเลอร์ C นั่นคือเหตุผลที่ไม่มี GCC สำหรับมัน


3

ลองดูที่SDCC รองรับอุปกรณ์ PIC16 และ PIC18 จำนวนมาก GCC รองรับ PIC24 และ dsPIC


ฉันถามเกี่ยวกับความแตกต่างในงบในขณะที่ใช้คอมไพเลอร์ที่แตกต่างกัน .. ยังไงก็ตามฉันได้รู้เกี่ยวกับ 1 คอมไพเลอร์ 'sdcc' .. ขอบคุณมาก ..
VV Rao

2

แง่มุมที่เป็นไปได้มากที่สุดที่จะพึ่งพาคอมไพเลอร์คือ:

  • ใช้บิตเดียว (โดยเฉพาะในพอร์ต IO)
  • ขนาดของจำนวนเต็มและอักขระที่กำลังเซ็นชื่อหรือไม่ได้ลงนาม
  • ตัวชี้ตลก: C18 สร้างความแตกต่างให้กับตัวชี้ ROM และ RAM :(
  • ฟิวส์การกำหนดค่า
  • ไม่ว่างที่จะรอ

วิธีที่ฉันชอบในการจัดการสิ่งนี้คือการเขียนมาโครสำหรับประเด็นเหล่านี้และให้คอมไพเลอร์เลือกมาโครที่ถูกต้องตามมาโครที่กำหนดไว้ล่วงหน้าเฉพาะของคอมไพเลอร์ ฉันสร้างไลบรารี RFM70 และแอปพลิเคชันตัวอย่างด้วยวิธีนี้ซึ่งทำงานบน PIC14 (HiTechC), PIC16 (C18) และ ARM (GCC)

(อัปเดต) ห้องสมุด RFM70 ของฉันเสร็จสมบูรณ์แล้ว รองรับ C ใน PIC 16F (คอมไพเลอร์ไฮเทค), C และ C ++ บน LPC11114 (Cortex) และ LPC2148 (ARM7TDMI) (คอมไพเลอร์ GCC) และ Arduino (ATMega128, GCC คอมไพเลอร์) สิ่งนี้ถูกสร้างขึ้น (รวมถึงเอกสาร doxygen) จากแหล่งเดียวกันโดยทำการประมวลผลล่วงหน้าในสคริปต์ Python การสนับสนุนของ Jal อยู่ภายใต้การพัฒนาบางที ProtonBasic จะติดตาม http://www.voti.nl/rfm70

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