PIC 16F iniciante .. diferença na sintaxe do programa ao usar diferentes compiladores

9

Como mencionei, eu apenas comecei a programar pic16f877a. Agora posso trabalhar com 7 displays de segmento. No momento estou usando o compilador ccs. Nada de errado com isso. Mas eu prefiro ser um programador independente de compilador. Então, eu simultaneamente quero trabalhar em outros compiladores como IAR ou Hitechc. Eu quero saber se a "declaração de declaração do programa nos compiladores" diferente de ccs será diferente? Por favor, me guie como abordar essa coisa. Gostaria de receber todas as formas de sugestões. Desde já, obrigado.

VV Rao
fonte

Respostas:

9

Que ótimo que você quer ser independente do compilador! Infelizmente, os compiladores hitech e CCS para os PICs low-end usam muitas declarações específicas de pré-processador, rotinas de acesso de pinos específicas do compilador e, no caso de rotinas específicas do compilador CCS, para acessar funções principais como SPI, I2C, ADC e assim por diante.

Não é possível escrever seu código para ser não específico do compilador sem muito pré-processador #define, #ifdef, #ifndef e assim por diante para obter acesso a partes específicas do que cada compilador tem a oferecer. Isso tornaria seu código ilegível.

A melhor coisa que você poderia procurar é ser independente do IDE e usar algo como eclipse, portanto, pelo menos, você está usando o mesmo IDE. Isso resultará na perda de assistentes do CCS para a configuração das funções principais, mas proporcionará maior flexibilidade no uso do mesmo IDE.

Outra coisa a considerar é que tanto a Hitech quanto a CCS não têm (pelo menos no passado) um vinculador verdadeiro do compilador c e exigiram que você usasse "#include myfile.c", que eu pessoalmente desprezo ... mas isso é outra história.

Eu não comentei no compilador IAR, pois usei apenas o CCS e a hitech. Ambos funcionaram bem, mas eu nunca fiquei muito feliz depois de migrar da plataforma Motorola (agora em escala livre) e usar o compilador metroworks, que era mais avançado na época. O compilador IAR parece bom, mas nunca o usei.

smashtastic
fonte
Se você conseguir ficar no pic18 ou acima dele, verifique o compilador c18. Tem uma grande quantidade de suporte. O IAR está retirando o suporte ao PIC, eles não venderão mais licenças com manutenção.
Kortuk
Entendi que a arquitetura PIC16 / 12/10 não mapeia muito bem a linguagem C. Portanto, os compiladores C precisam ter estruturas incomuns e fora do padrão para compensar a arquitetura PIC. O resultado final é que nenhum dos compiladores interopera.
Connor Wolf
7

Se você estivesse usando peças PIC18, eu recomendaria o compilador C18 da Microchip. Ele está muito mais próximo do ANSI C do que do compilador CCS. Não tenho certeza sobre o compilador Hi-Tech, pois não o usei. Como foi dito anteriormente, se você realmente precisa criar código independente do compilador, precisará usar muitas diretivas pré-compilador. Eu recomendo dar uma olhada em alguns dos programas de exemplo Microchip que oferecem suporte a vários compiladores para ter uma idéia de como isso é feito.

mjh2007
fonte
c18 para pic18, c30 para pic24 e dspic, c32 para pic32!
Kortuk
O CCS é bom, pois certas coisas são mais simples de fazer (interrupções e temporizadores, por exemplo - todos os exemplos de microchip você escreve ASM para que as interrupções funcionem corretamente em C18), mas é mais próximo de ANSI C.
J. Polfer
Você só precisa de uma instrução de montagem e esse é o GOTO usado para configurar o vetor de interrupção para apontar para a rotina de serviço de interrupção.
#
3

Infelizmente, você achará muito difícil encontrar um programa independente do compilador para um microcontrolador. Existem vários problemas, aqui estão apenas dois:

  1. Diferenças em periféricos, nomes de SFR, etc. (especialmente em relação a outros processadores, mas mesmo com compiladores da mesma família) e;

  2. Recursos não padrão em alguns compiladores, como definir bits individualmente ou estruturas diferentes para chamar o código de montagem.

A série 16F é muito limitada em termos de arquitetura e não é realmente projetada para suportar um compilador C. É por isso que não existe um CCG para isso.

Thomas O
fonte
3

Dê uma olhada no SDCC . Ele suporta muitos dos dispositivos PIC16 e PIC18. O GCC suporta PIC24 e dsPIC.

Toby Jaffey
fonte
i perguntou sobre as diferenças em declarações ao usar diferentes compiladores .. De qualquer forma eu vim a saber sobre 1 mais compilador 'sdcc' .. muito obrigado ..
VV Rao
2

Os aspectos mais prováveis ​​de serem dependentes do compilador são:

  • usando bits únicos (especialmente em portas IO)
  • tamanhos de números inteiros e caracteres sendo assinados ou não assinados
  • ponteiros engraçados: C18 diferencia ponteiros rom e ram :(
  • fusíveis de configuração
  • ocupado esperando

Minha maneira preferida de lidar com isso é escrever macros para esses aspectos e fazer com que o compilador selecione a macro correta com base nas macros predefinidas específicas do compilador. Criei uma biblioteca RFM70 e aplicativos de exemplo dessa maneira que são executados no PIC14 (HiTechC), PIC16 (C18) e ARM (GCC).

(atualização) Minha biblioteca do RFM70 agora está completa. Ele suporta C no PIC 16F (compilador Hitech), C e C ++ no LPC11114 (Cortex) e LPC2148 (ARM7TDMI) (compilador GCC) e Arduino (ATMega128, compilador GCC). Isso é gerado (incluindo documentação doxygen) a partir da mesma fonte, executando algum pré-processamento em um script Python. O suporte da Jal está em desenvolvimento, talvez o ProtonBasic o siga. http://www.voti.nl/rfm70

Wouter van Ooijen
fonte