Principiante PIC 16F .. differenza nella sintassi del programma quando si usano compilatori diversi


9

Come ho già detto, ho appena iniziato a programmare pic16f877a. Ora posso lavorare con display a 7 segmenti. Al momento sto usando il compilatore ccs. Niente di sbagliato in questo. Ma preferisco essere un programmatore indipendente dal compilatore. Quindi contemporaneamente voglio lavorare in altri compilatori come IAR o Hitechc. Voglio sapere se la "dichiarazione del programma nei compilatori" diversa da ccs sarà diversa? Per favore, guidami su come affrontare questa cosa. Gradirei tutte le forme di suggerimenti. Grazie in anticipo.

Risposte:


9

È fantastico che tu voglia essere indipendente dal compilatore! Sfortunatamente i compilatori hitech e CCS per i PIC di fascia bassa utilizzano molte dichiarazioni preprocessore specifiche del compilatore, routine di accesso ai pin specifiche del compilatore e, nel caso delle routine specifiche del compilatore CCS, per funzioni core di accesso come SPI, I2C, ADC e così via.

Non è possibile scrivere il codice in modo che non sia un compilatore specifico senza molti preprocessori #define, #ifdef, #ifndef e così via per ottenere l'accesso a parti specifiche di ciò che ciascun compilatore ha da offrire. Ciò renderebbe illeggibile il tuo codice.

La cosa migliore che potresti mirare è essere indipendente dall'IDE e usare qualcosa come l'eclissi, quindi almeno stai usando lo stesso IDE. Ciò comporterà la perdita di procedure guidate CCS per l'impostazione delle funzioni principali, ma offrirà una maggiore flessibilità nell'uso dello stesso IDE.

Un'altra cosa da considerare è che sia hitech che CCS non hanno (almeno in passato) un vero linker di compilatore c e hanno richiesto di usare "#include myfile.c" che personalmente disprezzo ... ma questa è un'altra storia.

Non ho commentato il compilatore IAR poiché ho usato solo CCS e hitech. Entrambi hanno funzionato bene, ma non sono mai stato davvero soddisfatto dopo aver migrato dalla piattaforma Motorola (ora freescale) e aver usato il compilatore metroworks che era più avanzato al momento. Il compilatore IAR sembra buono ma non l'ho mai usato.


Se riesci a gestire pic18 o al di sopra, dovresti dare un'occhiata al compilatore c18. Ha una grande quantità di supporto. IAR sta abbandonando il supporto PIC, non venderanno più licenze con manutenzione.
Kortuk,

Ho capito che l'architettura PIC16 / 12/10 non si adatta molto bene al linguaggio C. Pertanto, i compilatori C devono avere alcune strutture insolite e non standard per compensare l'architettura PIC. Il risultato finale è nessuno dei compilatori che interagiscono.
Connor Wolf,

7

Se steste usando parti PIC18, consiglierei il compilatore C18 di Microchip. È molto più vicino a ANSI C rispetto al compilatore CCS. Non sono sicuro del compilatore Hi-Tech poiché non l'ho usato. Come detto in precedenza, se è necessario rendere il codice indipendente dal compilatore, è necessario utilizzare molte direttive pre-compilatore. Consiglierei di dare un'occhiata ad alcuni dei programmi di esempio Microchip che supportano più compilatori per avere un'idea di come è fatto.


c18 per pic18, c30 per pic24 e dspic, c32 per pic32!
Kortuk,

CCS è carino in quanto alcune cose sono più semplici da fare (interruzioni e timer, ad esempio - tutti gli esempi di Microchip hanno scritto ASM per far funzionare le interruzioni proprio in C18), ma è più vicino ad ANSI C.
J. Polfer

È necessaria solo un'istruzione di assemblaggio, ovvero il GOTO utilizzato per impostare il vettore di interrupt in modo che punti alla routine del servizio di interrupt.
mjh2007,

3

Sfortunatamente troverai molto difficile trovare un programma indipendente dal compilatore per un microcontrollore. Esistono diversi problemi, eccone solo due:

  1. Differenze nelle periferiche, denominazione SFR, ecc. (Specialmente rispetto ad altri processori, ma anche con compilatori della stessa famiglia), e;

  2. Funzionalità non standard su alcuni compilatori come l'impostazione di bit singolarmente o strutture diverse per invocare il codice assembly.

La serie 16F è molto limitata in termini di architettura e non è progettata per supportare un compilatore C. Ecco perché non esiste GCC per questo.


3

Dai un'occhiata a SDCC . Supporta molti dei dispositivi PIC16 e PIC18. GCC supporta PIC24 e dsPIC.


ho chiesto delle differenze nelle dichiarazioni durante l'utilizzo di diversi compilatori .. comunque sono venuto a conoscenza di un altro compilatore 'sdcc' .. grazie mille ..
VV Rao

2

Gli aspetti più probabili che dipendono dal compilatore sono:

  • usando bit singoli (specialmente nelle porte IO)
  • dimensioni di numeri interi e carattere con o senza segno
  • puntatori divertenti: C18 differenzia i puntatori rom e ram :(
  • fusibili di configurazione
  • occupato in attesa

Il mio modo preferito di gestirlo è scrivere macro per questi aspetti e fare in modo che il compilatore selezioni la macro corretta in base a macro predefinite specifiche del compilatore. Ho creato una libreria RFM70 e applicazioni di esempio in questo modo che girano su PIC14 (HiTechC), PIC16 (C18) e ARM (GCC).

(aggiornamento) La mia libreria RFM70 è ora completa. Supporta C su PIC 16F (compilatore Hitech), C e C ++ su LPC11114 (Cortex) e LPC2148 (ARM7TDMI) (compilatore GCC) e Arduino (ATMega128, compilatore GCC). Questo viene generato (inclusa la documentazione di doxygen) dalla stessa fonte eseguendo una pre-elaborazione in uno script Python. Il supporto di Jal è in fase di sviluppo, forse seguirà ProtonBasic. http://www.voti.nl/rfm70

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.