You are on page 1of 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); // 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