Programação – Linguagem C : O compilador CCS – Daniel Corteletti

Pág 1 de 4

Manual de uso do compilador PCW
O COMPILADOR Uma versão de demonstração do compilador PCW da CCS software pode ser obtido através do site http://www.ccsinfo.com/demo.shtml, sendo que esta versão está limitada ao tamanho do código gerado (2 Kbytes). INSTALANDO O COMPILADOR Não existem mistérios na instalação do compilador, bastando seguir as orientações do assistente de instalação. EDITANDO UM PROGRAMA Rode o programa pcw.exe (geralmente após a instalação, será criado um atalho na área de trabalho com o título PIC C COMPILER. Também pode ser acessado através da opção INICIAR > PROGRAMA > PICC > PIC C COMPILER. Caso nenhuma das opções seja encontrada, e o compilador esteja realmente instalado, acesse diretamente através do caminho de instalação (geralmente C:\ARQUIVO DE PROGRAMAS\PICC\PCW.EXE) Ao ser executado, o compilador fornecerá uma tela similar a esta. • Observe o campo indicado. Para o microcontrolador da família 16 (como o PIC16F877), deve estar selecionada a opção MICROCHIP 14 BIT. Clique em FILE, NEW para iniciar um novo programa. Você deverá dar um nome ao programa a ser criado. Importante: LEMBRE DE UTILIZAR A EXTENSÃO C. Exemplo : PROGRAMA1.C Observe também a pasta onde você está salvando seu programa. Recomenda-se criar uma pasta para cada programa, uma vez que quando compilado, o programa que inicialmente é dado pelo arquivo C dará origem a outros arquivos (LST, HEX, ERR, etc...), e se todos os seus programas estiverem contidos em uma mesma pasta, poderá haver confusão. Após a criação do arquivo C, digite o programa na área destinada a edição do arquivo. Como sugestão, use o programa a seguir (objetivo do programa : um simples pisca-pisca com o pino RD0 do microcontrolador. Programa exemplo 1 : PROGRAMA1.C
#include <16f877.h> #use delay (clock=20000000) // para clock de 4MHz, mude o valor para 4000000 void main() { while(1) // laço infinito { output_high(pin_d0); // delay_ms(500); // output_low(pin_d0); // delay_ms(500); // } }

liga pino RD0 atraso de 500 ms desliga pino RD0 atraso de 500 ms

Provavelmente o compilador é versão demonstração. não sendo suportados ponteiros para este compilador. surge uma janela de erro com a mensagem “Exception EInOutError .Programação – Linguagem C : O compilador CCS – Daniel Corteletti Pág 2 de 4 Após digitar e salvar o programa. Não é suportado um vetor de short int. O ponto do programa pede um código executável. Há uma dupla ocorrência de um mesmo CASE em uma estrutura SWITCH.C e está procurando o arquivo PROG.. observando a sintaxe das estruturas da linguagem C. Falta uma parte do DEFINE. revise os comandos digitados. observe também se você não está trabalhando com um arquivo que foi removido (disquete ou pendrive que foi removido e o arquivo foi mantido aberto). Se mesmo assim o arquivo HEX não aparecer. o que geralmente ocorre é que você está com o compilador apontado para outro programa. Verifique se não está sendo feita a declaração de uma variável após uma linha de código executável. Depois. verifique que você está procurando-o na pasta correta. Final do período de teste do compilador. MENSAGENS DE ERRO DO COMPILADOR #ENDIF with no corresponding #IF A #DEVICE required before this line A numeric expression must appear here Arrays of bits are not permitted Attempt to create a pointer to a constant Bad expression syntax Baud rate out of range BIT variable not permitted here Cannot change device type this far into the code Character constant constructed incorrectly Constant out of the valid range Define expansion is too large Define syntax error Demo period has expired Divide by zero Duplicate case value Falta uma diretiva IF para um ENDIF Falta a definição do microcontrolador utilizado através da diretiva DEVICE.. inverta a ordem. Nestes casos. Tabelas de constantes são implementadas como funções. Se isso ocorrer. reabra seu arquivo e tente compilá-lo novamente. Verifique o limite de velocidade suportado pela comunicação serial. Erros de compilação: Os principais erros de compilação são causados por erros de digitação ou de sintaxe. Neste caso. será exibida momentaneamente uma tela como a expressa ao lado. Se a compilação ocorrer sem erros. Adquiria uma licença do mesmo. Mensagem de erro genérica para alerta de erro de sintaxe. . você pode estar compilando o arquivo C:\TURMA1\PROG. Algo ocasionou uma divisão por zeros em tempo de compilação. clique no ícone de compilação (ou tecle F9).HEX na pasta C:\TURMA2. corrija-o e repita o processo. Possíveis problemas : 1 – Ao compilar. Não é possível se tartar um SHORT INT com ponteiros. O valor da constante está além da capacidade de seu destino. pontuação e identificadores utilizados. A linha de DEFINE deve ser menor que 255 caracteres. Para corrigi-los.C). Exemplo : Esta mensagem é obtida ao se compilar um arquivo chamado PROGRAMA. verifique se você está compilando o programa certo. Esta diretiva já está declarada nos arquivos de include relativos ao microcontrolador utilizado. que havia sido aberto antes do programa que você quer compilar.1 2 – A compilação não está gerando arquivo HEX. ou existe algum erro de sintaxe associada a esta linha. Caso haja algum erro de compilação. Após uma linha de geração de código não é mais permitida a definição do dispositivo (diretiva DEVICE) Use aspas simples para determiner uma única constante alfanumérica. fixando a declaração de todas as variáveis no início da função. Por exemplo. Em muitos casos. clique em FILE. esta mensagem é gerada por ter sido usada uma extensão inadequada para o nome do arquivo (deveria ser .” Neste caso. CLOSE ALL.

A diretiva USE com este parâmetro deve ser utilizada somente uma vez. Se o erro persistir. Referência a um termo que não é membro do registro(estrutura) Encontrado um ELSE sem um IF correspondente. ou de um define mal empregado. mas há diferenças nos parâmetros ou tipo de dado de retorno. Verifique o nome e o caminho do arquivo. Endereço de origem inválido.Programação – Linguagem C : O compilador CCS – Daniel Corteletti Duplicate DEFAULT statements Duplicate #define Duplicate function Duplicate Interrupt Procedure Duplicate USE Element is not a member ELSE with no corresponding IF End of file while within define definition End of source file reached without closing comment */ symbol Expect . O certo é #include <nomearq> ou #include “nomearq” Para esta operação não é suportado o uso de ponto flutuante (números com vírgula ou FLOATs). . Verifique a sintaxe do INCLUDE. Não é permitida a inicialização de UNIONS. Verifique se a função não está sendo declarada após o uso (deve ser antes do uso). Expecting a . Verifique a sintaxe do INCLUDE. Expect } Expect comma Expect WHILE Expecting : Expecting = Expecting a ( Expecting a . A expressão é muito complexa para ser traduzida pelo compilador. Se você estiver usando um rótulo. e não foi fechado com um */ Verifique a falta de um ponto e vírgula Verifique a falta de um fechar chaves Verifique a falta de uma vírgula Verifique a falta de um WHILE após o uso de um DO {} Verifique a falta de dois pontos Verifique a falta de um sinal de atribuição Verifique a falta de um abrir parênteses Verifique a falta de uma vírgula ou fechar parênteses Verifique a falta de uma vírgula ou de um fechar chaves Verifique a falta de um ponto Verifique a falta de um ponto e vírgula ou de uma vírgula Verifique a falta de um ponto e vírgula ou de um fechar chaves Verifique a falta de um fechar parênteses Esperando uma declaração. Significa que foi usando um parâmetro inadequado para alguma função embutida do compilador. O compilador encontrou uma função não declarada. provavelmente uma quebra de linha inválida ou algo resultante de um “copiar” e “colar”. Um caractere inválido foi encontrado no arquivo fonte. Esperando uma estrutura (struct) ou união (union) Esperando uma variável Esperando um fechar colchetes Esperando um abrir chaves Esperando um sinal de atribuição Esperando um vetor ou matriz Esperando um identificador Esperando um nome de função Esperando um mneumonico (instrução assembly) Verifique se você não está atribuindo um valor a uma constante. or } Expecting a . Foi atingido algum limite físico do compilador. Não foi encontrada uma biblioteca necessária. Geralmente pode ocorrer por algum erro de pontuação anterior. e a linha que há antes deste rótulo. talvez seja necessário reinstalar o compilador. Uma interrupção está usando muitos níveis da pilha. como INT ou CHAR. se você tem permissão de gravação ou se há espaço suficiente no disco. Uso inapropriado de um identificador. Neste caso. msg:' ' Floating-point numbers not supported for this operation Function definition different from previous definition Function used but not defined Identifier is already used in this scope Illegal C character in input file Improper use of a function identifier Incorrectly constructed label Initialization of unions is not permitted Internal compiler limit reached Interrupt handler uses too much stack Invalid conversion from LONG INT to INT Internal Error . A expressão deve ser uma constante ou uma variável de tipo de dados simples. Verifique a falta de um fechar parênteses. Verifique se os caracteres de programa não estão na mesma linha de uma diretiva de compilação. Esperava por um INT ou um CHAR. Filename must start with " or < Filename must terminate with " or. or . or { Expecting a close paren Expecting a declaration Expecting a structure/union Expecting a variable Expecting a ] Expecting a { Expecting an = Expecting an array Expecting an identifier Expecting function name Expecting an opcode mnemonic Expecting LVALUE such as a variable name or * expression Expecting a basic type Expression must be a constant or simple variable Expression too complex Extra characters on preprocessor command line File cannot be opened File cannot be opened for write Pág 3 de 4 Foi encontrada uma segunda ocorrência da cláusula DEFAULT dentro de um mesmo SWITCH. revise a sintaxe.Contact CCS Invalid parameters to built function Invalid ORG range Invalid Pre-Processor directive Library in USE not found in Aponta uma conversão inválida entre um LONG e um INT Erro gerado por inconsistência interna. or ) Expecting a . ou se o nome da função não está escrito errado. #define duplicado ou já declarado Dupla implementação de uma função Somente uma função pode ser atribuída a cada nível de interrupção. Por algum motivo o compilador não consegue criar os arquivos. É um aviso que você está tentando usar um nome para a função ou variável que já existe ou já foi utilizado neste programa. você deve estar reescrevendo (redefinindo) uma função previamente descrita. Tente fechar todos os arquivos e o compilador e tente novamente. Diretiva inválida. Um comentário foi aberto com a seqüência /*. Expecting a . Verifique (se você estiver trabalhando com disquetes) se a janela de gravação do disco está aberta.

o compilador impede o uso de recursão para o PIC Verifique se você não está chamando a função de dentro dela mesma. Verifique se você criou a função principal: void main() Significa que existem muitas variáveis para pouca memória RAM. Tipo não definido Tipo de dado inválido para a função.CRG file Must have a #USE DELAY before a #USE RS232 No errors No MAIN() function found Not enough RAM for all variables Number of bits is out of range Out of ROM... que pode causar uma violação de memória. Uma função do tipo VOID não pode retornar um valor. É o caso de uma Macro que usa a si própria. ou você esqueceu de fechar aspas duplas em alguma linha. Uso incorreto da diretiva USE .. Para variáveis do tipo LONG ou INT32. Foi usando a diretiva #IF. Muitos elementos em uma enumeração. Por exemplo. Veja se você está usando o especificador de formato correto. Use tipos de dados mais econômicos. e não para uma variável.. O compilador não permite referenciar vetores. está sendo usado 4 = 5. O programa ficou muito grande para a memória ROM. Reinstale a versão demo ou uma versão legal do mesmo. Índice de algum vetor está fora da faixa Função do LINKER não está habilitada ou é inválida. consulte a tabela. Antes de usar o #USE RS232 você precisa declarar o #USE DELAY (clock=xxxx) onde xxxx é a freqüência do CLOCK em Hz Tudo OK. Matrizes são limitadas a 5 dimensões. GOTO para um rótulo não declarado ou inválido. Significa que o identificador precisa se um ponteiro. Isso pode ser gerado também por uma string muito longa. Para float. (leia a linha acima) No printf devem existir menos especificadores de formado do que as variáveis que devem ser exibidas. Há muitas constantes no programa. Structs ou Unions não podem ser parâmetros. use %lu ou %li. use %u ou %i (%i para valores com sinal). Pág 4 de 4 Printf format (%) invalid Printf variable count (%) does not match actual count Recursion not permitted Recursively defined structures not permitted Reference arrays are not permitted Return not allowed in void function STDOUT not defined (may be missing #RS 232) Stream must be a constant in the valid range String too long Structure field name required Structures and UNIONS cannot be parameters (use * or &) Subscript out of range This linker function is not available in this compiler version. Para usar a saída padrão. Se você estiver usando uma macro. Veja um exemplo na diretiva #use RS232 Veja como foi declarada a stream usada… Uma seqüência de caracteres é muito longa. This type cannot be qualified with this qualifier Too many array subscripts Too many constant structures to fit into available space Too many elements in an ENUM Too many nested #INCLUDEs Too many parameters Too many subscripts Type is not defined Type specification not valid for a function Undefined identifier Undefined label that was used in a GOTO Unknown device type Unknown keyword in #FUSES Unknown linker keyword Unknown type Unprotected call in a #INT_GLOBAL USE parameter invalid USE parameter value is out of range Você deve estar tentando jogar um valor para uma constante. Muitos INCLUDES aninhados (includes dentro de arquivos usados em um include) Muitos parâmetros Muitos indexadores. ou pelo esquecimento de um fechar aspas. ao invés de usar X = 5.. A segment or the program is too large Parameters not permitted Pointers to bits are not permitted Previous identifier must be a pointer Printf format type is invalid Diretivas conflitantes impedem a geração do código HEX. Devido a escassez de recursos de pilha. Lembre que o número de identificação dos bits de um byte varia de 0 a 7.. Veja se você não esqueceu os parênteses na declaração de uma função. e não foi encontrado o #ENDIF Problemas no registro do compilador. você precisa defini-la. Identificador não declarado. Você usou um especificador de formato inválido. para outros tipos ou especificadores. Para uma variável do tipo SHORT ou INT. ou se você não está tentando declarar uma variável do tipo VOID. Falta o nome da estrutura. Não conhece o dispositivo usado pela diretiva DEVICE Não conhece a palavra usada na diretiva FUSES Não conhece a diretiva Tipo de dado não definido Chamada desprotegida em uma interrupção. use %f. Não são permitidos parâmetros Este compilador não permite o uso de apontadores para bits. menos variáveis globais e mais variáveis locais. verifique se não esqueceu de um parâmetro necessário.Programação – Linguagem C : O compilador CCS – Daniel Corteletti Linker option not compatible with prior options LVALUE required Macro identifier requires parameters Macro is defined recursively Missing #ENDIF Missing or invalid .

Sign up to vote on this title
UsefulNot useful