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); // liga pino RD0 delay_ms(500); // atraso de 500 ms output_low(pin_d0); // desliga pino RD0 delay_ms(500); // 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 Falta uma diretiva IF para um ENDIF A #DEVICE required before this line Falta a definio do microcontrolador utilizado atravs da diretiva DEVICE. Esta diretiva j est declarada nos arquivos de include relativos ao microcontrolador utilizado. A numeric expression must appear here 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. Arrays of bits are not permitted No suportado um vetor de short int. Attempt to create a pointer to a constant Tabelas de constantes so implementadas como funes, no sendo suportados ponteiros para este compilador. Bad expression syntax Mensagem de erro genrica para alerta de erro de sintaxe. Baud rate out of range Verifique o limite de velocidade suportado pela comunicao serial. BIT variable not permitted here No possvel se tartar um SHORT INT com ponteiros. Cannot change device type this far into the code Aps uma linha de gerao de cdigo no mais permitida a definio do dispositivo (diretiva DEVICE) Character constant constructed incorrectly Use aspas simples para determiner uma nica constante alfanumrica. Constant out of the valid range O valor da constante est alm da capacidade de seu destino. Define expansion is too large A linha de DEFINE deve ser menor que 255 caracteres. Define syntax error Falta uma parte do DEFINE, ou existe algum erro de sintaxe associada a esta linha. Demo period has expired Final do perodo de teste do compilador. Provavelmente o compilador verso demonstrao. Adquiria uma licena do mesmo. Divide by zero Algo ocasionou uma diviso por zeros em tempo de compilao. Duplicate case value H uma dupla ocorrncia de um mesmo CASE em uma estrutura SWITCH. Programao Linguagem C : O compilador CCS Daniel Corteletti Pg 3 de 4 Duplicate DEFAULT statements Foi encontrada uma segunda ocorrncia da clusula DEFAULT dentro de um mesmo SWITCH. Duplicate #define #define duplicado ou j declarado Duplicate function Dupla implementao de uma funo Duplicate Interrupt Procedure Somente uma funo pode ser atribuda a cada nvel de interrupo. Duplicate USE A diretiva USE com este parmetro deve ser utilizada somente uma vez. Element is not a member Referncia a um termo que no membro do registro(estrutura) ELSE with no corresponding IF Encontrado um ELSE sem um IF correspondente. End of file while within define definition Verifique a falta de um fechar parnteses, ou de um define mal empregado. End of source file reached without closing comment */ symbol Um comentrio foi aberto com a seqncia /*, e no foi fechado com um */ Expect ; Verifique a falta de um ponto e vrgula Expect } Verifique a falta de um fechar chaves Expect comma Verifique a falta de uma vrgula Expect WHILE Verifique a falta de um WHILE aps o uso de um DO {} Expecting : Verifique a falta de dois pontos Expecting = Verifique a falta de um sinal de atribuio Expecting a ( Verifique a falta de um abrir parnteses Expecting a , or ) Verifique a falta de uma vrgula ou fechar parnteses Expecting a , or } Verifique a falta de uma vrgula ou de um fechar chaves Expecting a . Verifique a falta de um ponto Expecting a ; or , Verifique a falta de um ponto e vrgula ou de uma vrgula Expecting a ; or { Verifique a falta de um ponto e vrgula ou de um fechar chaves Expecting a close paren Verifique a falta de um fechar parnteses Expecting a declaration Esperando uma declarao. Geralmente pode ocorrer por algum erro de pontuao anterior. Expecting a structure/union Esperando uma estrutura (struct) ou unio (union) Expecting a variable Esperando uma varivel Expecting a ] Esperando um fechar colchetes Expecting a { Esperando um abrir chaves Expecting an = Esperando um sinal de atribuio Expecting an array Esperando um vetor ou matriz Expecting an identifier Esperando um identificador Expecting function name Esperando um nome de funo Expecting an opcode mnemonic Esperando um mneumonico (instruo assembly) Expecting LVALUE such as a variable name or * expression Verifique se voc no est atribuindo um valor a uma constante. Expecting a basic type Esperava por um INT ou um CHAR. Expression must be a constant or simple variable A expresso deve ser uma constante ou uma varivel de tipo de dados simples, como INT ou CHAR. Expression too complex A expresso muito complexa para ser traduzida pelo compilador. Extra characters on preprocessor command line Verifique se os caracteres de programa no esto na mesma linha de uma diretiva de compilao. File cannot be opened Verifique o nome e o caminho do arquivo. File cannot be opened for write 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. Filename must start with " or < Verifique a sintaxe do INCLUDE. Filename must terminate with " or; msg:' ' Verifique a sintaxe do INCLUDE. O certo #include <nomearq> ou #include nomearq Floating-point numbers not supported for this operation Para esta operao no suportado o uso de ponto flutuante (nmeros com vrgula ou FLOATs). Function definition different from previous definition Neste caso, voc deve estar reescrevendo (redefinindo) uma funo previamente descrita, mas h diferenas nos parmetros ou tipo de dado de retorno. Function used but not defined 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. Identifier is already used in this scope um aviso que voc est tentando usar um nome para a funo ou varivel que j existe ou j foi utilizado neste programa. Illegal C character in input file Um caractere invlido foi encontrado no arquivo fonte, provavelmente uma quebra de linha invlida ou algo resultante de um copiar e colar. Improper use of a function identifier Uso inapropriado de um identificador. Incorrectly constructed label Se voc estiver usando um rtulo, revise a sintaxe, e a linha que h antes deste rtulo. Initialization of unions is not permitted No permitida a inicializao de UNIONS. Internal compiler limit reached Foi atingido algum limite fsico do compilador. Interrupt handler uses too much stack
Uma interrupo est usando muitos nveis da pilha.
Invalid conversion from LONG INT to INT Aponta uma converso invlida entre um LONG e um INT Internal Error - Contact CCS 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. Invalid parameters to built in function Significa que foi usando um parmetro inadequado para alguma funo embutida do compilador. Invalid ORG range Endereo de origem invlido. Invalid Pre-Processor directive Diretiva invlida. Library in USE not found No foi encontrada uma biblioteca necessria. Programao Linguagem C : O compilador CCS Daniel Corteletti Pg 4 de 4 Linker option not compatible with prior options Diretivas conflitantes impedem a gerao do cdigo HEX. LVALUE required 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; Macro identifier requires parameters Se voc estiver usando uma macro, verifique se no esqueceu de um parmetro necessrio. Macro is defined recursively o caso de uma Macro que usa a si prpria. Missing #ENDIF Foi usando a diretiva #IF, e no foi encontrado o #ENDIF Missing or invalid .CRG file Problemas no registro do compilador. Reinstale a verso demo ou uma verso legal do mesmo. Must have a #USE DELAY before a #USE RS232 Antes de usar o #USE RS232 voc precisa declarar o #USE DELAY (clock=xxxx) onde xxxx a freqncia do CLOCK em Hz No errors Tudo OK. No MAIN() function found Verifique se voc criou a funo principal: void main() Not enough RAM for all variables Significa que existem muitas variveis para pouca memria RAM. Use tipos de dados mais econmicos, menos variveis globais e mais variveis locais. Number of bits is out of range Lembre que o nmero de identificao dos bits de um byte varia de 0 a 7. Out of ROM, A segment or the program is too large 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. Parameters not permitted No so permitidos parmetros Pointers to bits are not permitted Este compilador no permite o uso de apontadores para bits. Previous identifier must be a pointer Significa que o identificador precisa se um ponteiro. Printf format type is invalid 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. Printf format (%) invalid Voc usou um especificador de formato invlido. (leia a linha acima) Printf variable count (%) does not match actual count No printf devem existir menos especificadores de formado do que as variveis que devem ser exibidas. Recursion not permitted Recursively defined structures not permitted 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... Reference arrays are not permitted O compilador no permite referenciar vetores. Return not allowed in void function Uma funo do tipo VOID no pode retornar um valor. STDOUT not defined (may be missing #RS 232) Para usar a sada padro, voc precisa defini-la. Veja um exemplo na diretiva #use RS232 Stream must be a constant in the valid range Veja como foi declarada a stream usada String too long Uma seqncia de caracteres muito longa, ou voc esqueceu de fechar aspas duplas em alguma linha. Structure field name required Falta o nome da estrutura. Structures and UNIONS cannot be parameters (use * or &) Structs ou Unions no podem ser parmetros. Subscript out of range ndice de algum vetor est fora da faixa This linker function is not available in this compiler version. Funo do LINKER no est habilitada ou invlida. This type cannot be qualified with this qualifier Veja se voc no esqueceu os parnteses na declarao de uma funo, ou se voc no est tentando declarar uma varivel do tipo VOID... Too many array subscripts Matrizes so limitadas a 5 dimenses. Too many constant structures to fit into available space H muitas constantes no programa. Too many elements in an ENUM Muitos elementos em uma enumerao. Too many nested #INCLUDEs Muitos INCLUDES aninhados (includes dentro de arquivos usados em um include) Too many parameters Muitos parmetros Too many subscripts Muitos indexadores. Type is not defined Tipo no definido Type specification not valid for a function Tipo de dado invlido para a funo. Undefined identifier Identificador no declarado. Undefined label that was used in a GOTO GOTO para um rtulo no declarado ou invlido. Unknown device type No conhece o dispositivo usado pela diretiva DEVICE Unknown keyword in #FUSES No conhece a palavra usada na diretiva FUSES Unknown linker keyword No conhece a diretiva Unknown type Tipo de dado no definido Unprotected call in a #INT_GLOBAL Chamada desprotegida em uma interrupo, que pode causar uma violao de memria. USE parameter invalid USE parameter value is out of range Uso incorreto da diretiva USE