Você está na página 1de 4

Programao Linguagem C : O compilador CCS Daniel Corteletti

Pg 1 de 4

Manual de uso do compilador PCW


O COMPILADOR Uma verso de demonstrao do compilador PCW da CCS software pode ser obtido atravs do site http://www.ccsinfo.com/demo.shtml, sendo que esta verso est limitada ao tamanho do cdigo gerado (2 Kbytes). INSTALANDO O COMPILADOR No existem mistrios na instalao do compilador, bastando seguir as orientaes do assistente de instalao. EDITANDO UM PROGRAMA Rode o programa pcw.exe (geralmente aps a instalao, ser criado um atalho na rea de trabalho com o ttulo PIC C COMPILER. Tambm pode ser acessado atravs da opo INICIAR > PROGRAMA > PICC > PIC C COMPILER. Caso nenhuma das opes seja encontrada, e o compilador esteja realmente instalado, acesse diretamente atravs do caminho de instalao (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 famlia 16 (como o PIC16F877), deve estar selecionada a opo 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 EXTENSO C. Exemplo : PROGRAMA1.C Observe tambm 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 confuso. Aps a criao do arquivo C, digite o programa na rea destinada a edio do arquivo. Como sugesto, 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) // lao 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

Programao Linguagem C : O compilador CCS Daniel Corteletti

Pg 2 de 4

Aps digitar e salvar o programa, clique no cone de compilao (ou tecle F9). Se a compilao ocorrer sem erros, ser exibida momentaneamente uma tela como a expressa ao lado. Caso haja algum erro de compilao, corrija-o e repita o processo.

Possveis problemas : 1 Ao compilar, surge uma janela de erro com a mensagem Exception EInOutError ... Neste caso, verifique se voc est compilando o programa certo, observe tambm se voc no est trabalhando com um arquivo que foi removido (disquete ou pendrive que foi removido e o arquivo foi mantido aberto). Em muitos casos, esta mensagem gerada por ter sido usada uma extenso inadequada para o nome do arquivo (deveria ser .C). Exemplo : Esta mensagem obtida ao se compilar um arquivo chamado PROGRAMA.1 2 A compilao no est gerando arquivo HEX. Nestes casos, o que geralmente ocorre que voc est com o compilador apontado para outro programa, que havia sido aberto antes do programa que voc quer compilar. Neste caso, clique em FILE, CLOSE ALL. Depois, reabra seu arquivo e tente compil-lo novamente. Se mesmo assim o arquivo HEX no aparecer, verifique que voc est procurando-o na pasta correta. Por exemplo, voc pode estar compilando o arquivo C:\TURMA1\PROG.C e est procurando o arquivo PROG.HEX na pasta C:\TURMA2. Erros de compilao: Os principais erros de compilao so causados por erros de digitao ou de sintaxe. Para corrigi-los, revise os comandos digitados, observando a sintaxe das estruturas da linguagem C, pontuao e identificadores utilizados. 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 definio do microcontrolador utilizado atravs da diretiva DEVICE. Esta diretiva j est declarada nos arquivos de include relativos ao microcontrolador utilizado. O ponto do programa pede um cdigo executvel. Verifique se no est sendo feita a declarao de uma varivel aps uma linha de cdigo executvel. Se isso ocorrer, inverta a ordem, fixando a declarao de todas as variveis no incio da funo. No suportado um vetor de short int. Tabelas de constantes so implementadas como funes, no sendo suportados ponteiros para este compilador. Mensagem de erro genrica para alerta de erro de sintaxe. Verifique o limite de velocidade suportado pela comunicao serial. No possvel se tartar um SHORT INT com ponteiros. Aps uma linha de gerao de cdigo no mais permitida a definio do dispositivo (diretiva DEVICE) Use aspas simples para determiner uma nica constante alfanumrica. O valor da constante est alm da capacidade de seu destino. A linha de DEFINE deve ser menor que 255 caracteres. Falta uma parte do DEFINE, ou existe algum erro de sintaxe associada a esta linha. Final do perodo de teste do compilador. Provavelmente o compilador verso demonstrao. Adquiria uma licena do mesmo. Algo ocasionou uma diviso por zeros em tempo de compilao. H uma dupla ocorrncia de um mesmo CASE em uma estrutura SWITCH.

Programao 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 ; Expect } Expect comma Expect WHILE Expecting : Expecting = Expecting a ( Expecting a , or ) Expecting a , or } Expecting a . Expecting a ; or , Expecting a ; 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

Pg 3 de 4

Foi encontrada uma segunda ocorrncia da clusula DEFAULT dentro de um mesmo SWITCH. #define duplicado ou j declarado Dupla implementao de uma funo Somente uma funo pode ser atribuda a cada nvel de interrupo. A diretiva USE com este parmetro deve ser utilizada somente uma vez. Referncia a um termo que no membro do registro(estrutura) Encontrado um ELSE sem um IF correspondente. Verifique a falta de um fechar parnteses, ou de um define mal empregado. Um comentrio foi aberto com a seqncia /*, e no foi fechado com um */ Verifique a falta de um ponto e vrgula Verifique a falta de um fechar chaves Verifique a falta de uma vrgula Verifique a falta de um WHILE aps o uso de um DO {} Verifique a falta de dois pontos Verifique a falta de um sinal de atribuio Verifique a falta de um abrir parnteses Verifique a falta de uma vrgula ou fechar parnteses Verifique a falta de uma vrgula ou de um fechar chaves Verifique a falta de um ponto Verifique a falta de um ponto e vrgula ou de uma vrgula Verifique a falta de um ponto e vrgula ou de um fechar chaves Verifique a falta de um fechar parnteses Esperando uma declarao. Geralmente pode ocorrer por algum erro de pontuao anterior. Esperando uma estrutura (struct) ou unio (union) Esperando uma varivel Esperando um fechar colchetes Esperando um abrir chaves Esperando um sinal de atribuio Esperando um vetor ou matriz Esperando um identificador Esperando um nome de funo Esperando um mneumonico (instruo assembly) Verifique se voc no est atribuindo um valor a uma constante. Esperava por um INT ou um CHAR. A expresso deve ser uma constante ou uma varivel de tipo de dados simples, como INT ou CHAR. A expresso muito complexa para ser traduzida pelo compilador. Verifique se os caracteres de programa no esto na mesma linha de uma diretiva de compilao. Verifique o nome e o caminho do arquivo. Por algum motivo o compilador no consegue criar os arquivos. Verifique (se voc estiver trabalhando com disquetes) se a janela de gravao do disco est aberta, se voc tem permisso de gravao ou se h espao suficiente no disco. Verifique a sintaxe do INCLUDE. Verifique a sintaxe do INCLUDE. O certo #include <nomearq> ou #include nomearq Para esta operao no suportado o uso de ponto flutuante (nmeros com vrgula ou FLOATs). Neste caso, voc deve estar reescrevendo (redefinindo) uma funo previamente descrita, mas h diferenas nos parmetros ou tipo de dado de retorno. O compilador encontrou uma funo no declarada. Verifique se a funo no est sendo declarada aps o uso (deve ser antes do uso), ou se o nome da funo no est escrito errado. um aviso que voc est tentando usar um nome para a funo ou varivel que j existe ou j foi utilizado neste programa. Um caractere invlido foi encontrado no arquivo fonte, provavelmente uma quebra de linha invlida ou algo resultante de um copiar e colar. Uso inapropriado de um identificador. Se voc estiver usando um rtulo, revise a sintaxe, e a linha que h antes deste rtulo. No permitida a inicializao de UNIONS. Foi atingido algum limite fsico do compilador. Uma interrupo est usando muitos nveis da pilha.

Filename must start with " or < Filename must terminate with " or; 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 - Contact CCS Invalid parameters to built function Invalid ORG range Invalid Pre-Processor directive Library in USE not found in

Aponta uma converso invlida entre um LONG e um INT Erro gerado por inconsistncia interna. Tente fechar todos os arquivos e o compilador e tente novamente. Se o erro persistir, talvez seja necessrio reinstalar o compilador. Significa que foi usando um parmetro inadequado para alguma funo embutida do compilador. Endereo de origem invlido. Diretiva invlida. No foi encontrada uma biblioteca necessria.

Programao 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 .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, 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 gerao do cdigo HEX.

Pg 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. 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, e no para uma varivel. Por exemplo, ao invs de usar X = 5; est sendo usado 4 = 5; Se voc estiver usando uma macro, verifique se no esqueceu de um parmetro necessrio. o caso de uma Macro que usa a si prpria. Foi usando a diretiva #IF, e no foi encontrado o #ENDIF Problemas no registro do compilador. Reinstale a verso demo ou uma verso legal do mesmo. Antes de usar o #USE RS232 voc precisa declarar o #USE DELAY (clock=xxxx) onde xxxx a freqncia do CLOCK em Hz Tudo OK. Verifique se voc criou a funo principal: void main() Significa que existem muitas variveis para pouca memria RAM. Use tipos de dados mais econmicos, menos variveis globais e mais variveis locais. Lembre que o nmero de identificao dos bits de um byte varia de 0 a 7. O programa ficou muito grande para a memria ROM. Isso pode ser gerado tambm por uma string muito longa, ou pelo esquecimento de um fechar aspas. No so permitidos parmetros Este compilador no permite o uso de apontadores para bits. Significa que o identificador precisa se um ponteiro. Veja se voc est usando o especificador de formato correto. Para uma varivel do tipo SHORT ou INT, use %u ou %i (%i para valores com sinal). Para variveis do tipo LONG ou INT32, use %lu ou %li. Para float, use %f... para outros tipos ou especificadores, consulte a tabela. Voc usou um especificador de formato invlido. (leia a linha acima) No printf devem existir menos especificadores de formado do que as variveis que devem ser exibidas. Devido a escassez de recursos de pilha, o compilador impede o uso de recurso para o PIC Verifique se voc no est chamando a funo de dentro dela mesma... O compilador no permite referenciar vetores. Uma funo do tipo VOID no pode retornar um valor. Para usar a sada padro, voc precisa defini-la. Veja um exemplo na diretiva #use RS232 Veja como foi declarada a stream usada Uma seqncia de caracteres muito longa, ou voc esqueceu de fechar aspas duplas em alguma linha. Falta o nome da estrutura. Structs ou Unions no podem ser parmetros. ndice de algum vetor est fora da faixa Funo do LINKER no est habilitada ou invlida. Veja se voc no esqueceu os parnteses na declarao de uma funo, ou se voc no est tentando declarar uma varivel do tipo VOID... Matrizes so limitadas a 5 dimenses. H muitas constantes no programa. Muitos elementos em uma enumerao. Muitos INCLUDES aninhados (includes dentro de arquivos usados em um include) Muitos parmetros Muitos indexadores. Tipo no definido Tipo de dado invlido para a funo. Identificador no declarado. GOTO para um rtulo no declarado ou invlido. No conhece o dispositivo usado pela diretiva DEVICE No conhece a palavra usada na diretiva FUSES No conhece a diretiva Tipo de dado no definido Chamada desprotegida em uma interrupo, que pode causar uma violao de memria. Uso incorreto da diretiva USE

Você também pode gostar