Es un curso taller que explica paso a paso la programacion de microcontroladores PIC con el compilador MIKRO C utilizando el PIC 16F877 .Descripción completa
Manual Denwa Pro EspañolDescripción completa
Manual del usuario del software Guitar Pro 5 Guitar Pro 5 software´s User ManualDescripción completa
Using the Renko Maker Pro system for Forex Trading with Metatrader 4.Descrição completa
manual pro tunrDescripción completa
Esse ~e um Manual do Unity Pro feito pelo professor Gabriel Vinicios Silva Maganha.
para poder configurar la radio portatil motorolaDescripción completa
sistemas
Manual de Staad Pro Con Pro SteelDescripción completa
Manual que explica el funcionamiento del módulo ProScreener de la aplicación bursátil ProRealTime.Descripción completa
GoodFull description
vortexFull description
www.mecatronicadegaragem.blogspot.com
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Abril de 2009.
nota Reader's
AVISO LEGAL:
Observação do leitor
mikroC PRO para PIC e este manual são de propriedade da mikroElektronika e estão protegidos pela lei de direitos autorais e tratados internacionais de direitos autorais. Portanto, você deve tratar deste manual como qualquer outro material protegido por direitos autorais (por exemplo, um livro). O manual eo compilador não pode ser copiado, parcial ou totalmente sem autorização escrita da mikroEelktronika. A PDF edição do manual pode ser impresso para uso privado ou local, mas não para distribuição. Modificando o manual ou o compilador é estritamente proibida.
Windows é uma marca registada da A Microsoft Corp Todas as outras trocas e / ou marcas de serviços são de propriedade de seus respectivos proprietários.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
Tabela de Conteúdo CAPÍTULO 1
Introdução
CAPÍTULO 2
mikroC PRO para PIC Meio Ambiente
CAPÍTULO 3
MikroICD (In Circuit Debugger)
CAPÍTULO 4
mikroC PRO para PIC Especificidades
CAPÍTULO 5
PIC Especificidades
CAPÍTULO 6
mikroC PRO para PIC Referência da Linguagem
CAPÍTULO 7
mikroC PRO para PIC Bibliotecas
www.mecatronicadegaragem.blogspot.com Tabela de Conteúdos
Mikroelektronika - Soluções de software e hardware para EMBEDDED MUNDO
www.mecatronicadegaragem.blogspot.com
CAPÍTULO
1
Introdução ao mikroC PRO para PIC A mikroC PRO para PIC é uma poderosa ferramenta de desenvolvimento de recursos sofisticados para a PIC microcontroladores. Ele é projetado para fornecer ao programador a mais fácil posvel solução para desenvolvimento de aplicações para sistemas embarcados, sem compromisção de desempenho ou controle.
1
CAPÍTULO 1
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Introdução
mikroC PRO para PIC IDE
PIC e C se encaixam bem: PIC é o mais popular chip de 8 bits do mundo, usado em uma ampla variedade de aplicações, e C, premiado por sua eficiência, é o natural escolha para o desenvolvimento de sistemas embarcados. mikroC PRO para PIC proporciona um bem-sucedido correspondência com IDE altamente avançado, compilador ANSI compatível, amplo conjunto de hardware bibliotecas, documentação completa, e abundância de exemplos prontos para correr.
Características mikroC PRO para PIC permite que você rapidamente desenvolver e implantar aplicativos complexos:
Escreva seu código-fonte C usando o built-in editor de código (Code e Parâmetro Assistentes, código dobrando, Sintaxe Destacando, Auto Correct, Máscaras de Código, e muito mais.) Use incluídos mikroC PRO para PIC bibliotecas para acelerar drasticamente o desenvolvimento desenvolvimento: a aquisição de dados, memória, displays, conversões de comunicação, etc Monitore sua estrutura de programa, variáveis e funções do Code Explorer. Gere comentou, montagem legível, e compa-padrão HEX vel com todos os programadores. Use o mikroICD integrado (In-Circuit Debugger) em tempo real ferramenta de depuração para
2
www.mecatronicadegaragem.blogspot.com Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 1
Introdução
acompanhar a execução do programa no nível de hardware. fluxo de inspecionar o programa e depurar lógica executável com o software integrado Simulator. Obtenha relatórios detalhados e gráficos: mapa de memória RAM e ROM, as estatísticas de código, a montagem anúncio, chamando a árvore, e muito mais. mikroC PRO para PIC fornece inúmeros exemplos de expandir, desenvolver e utilizar como a construção de tijolos em seus projetos. Copie-as por completo, se acharem necessário- é por isso que Foram incluídos os com o compilador.
Por onde começar No caso que você é um iniciante em programação de microcontroladores PIC, leia cuidado plenamente o PIC capítulo Específicos. Poderia dar-lhe algumas indicações úteis sobre PIC restrições, a portabilidade do código, e boas práticas de programação. Se você é experiente em programação C, provavelmente você vai querer consultar mikroC PRO para PIC Especificidades primeiro. Por questões de idioma, você pode sempre se referem ao o global Language Reference. Uma lista completa de bibliotecas é incluído disponível em mikroC PRO PIC para Bibliotecas. Se você não é muito experiente em programação C, não entre em pânico! mikroC PRO para PIC fornece inúmeros exemplos tornando mais fácil para você ir rapidamente. Nós sug rem que você primeiro consultar projetos e arquivos de origem e, em seguida iniciar a navegação na exemplos que você é o mais interessado em M ik r o el e k tr o n ik a S of t w a r e s e s ol u ç õ e
www.mecatronicadegaragem.blogspot.com
s de hardware para Embedded World
3
CAPÍTULO 1
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Introdução
Mikroelektronika DECLARAÇÃO DE LICENÇA E ASSOCIADOS GARANTIA LIMITADA IMPORTANTE - LEIA ATENTAMENTE Esta licença declaração e garantia limitada constitui um contrato legal ("Licença Contrato ") entre você (como pessoa física ou jurídica) e mikroElektronika ("mikroElektronika Associates") para produtos de software ("Software"), identificado acima, incluindo qualquer software, mídia e acompanhamento on-line ou impresso docuimplementação. AO INSTALAR, COPIAR OU USAR O SOFTWARE, VOCÊ CONCORDA PARA SER OBRIGADO POR TODOS OS TERMOS E CONDIÇÕES DA LICENÇA ACORDO. Após a aceitação dos termos e condições do Contrato de Licença, mikroElektronika Associates lhe concede o direito de usar o software de uma forma prevista abaixo. Este Software é propriedade da mikroElektronika Associates e está protegido por cópia direito certo e tratado internacional de direitos autorais. Portanto, você deve tratar este software como qualquer outro material protegido por copyright (por exemplo, um livro). Você pode transferir o Software e documentação em uma base permanente prestado. Você não retenha nenhuma cópia eo recebedor concordar com os termos do Contrato de Licença. Exceto como previsto do Contrato de Licença, você não poderá transferir, alugar, arrendar, emprestar, copiar, modificar, traduzir, sublicenciar, compartilhar o tempo ou transmitir eletronicamente ou receber Software, mídia ou documentação. Você reconhece que o Software no forma de código-fonte é um segredo comercial do mikroElektronika Associates e, portanto, você concorda em não modificar o Software ou a tentativa de fazer engenharia reversa, descompilar, ou desmontar, exceto e somente na medida em que tal atividade seja expressamente permitida pela legislação aplicável não obstante esta limitação. Se você tiver adquirido uma versão de atualização do software, que constitui um único produto com o software mikroElektronika Associates que você atualizou. Você pode usar a versão de atualização do Software apenas de acordo com Contrato de Licença.
4
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 1
Introdução
GARANTIA LIMITADA Respeitosamente excetuando os Redistribuíveis, que são fornecidos "Como estão", sem guerra rantia de nenhum tipo, garante que o Software mikroElektronika Associates, uma vez actualied e usados corretamente, irá executar substancialmente de acordo com o acomção, documentação e software de mídia estará livre de defeitos de materiais e obra, por um período de 90 (noventa) dias a contar da data de recebimento. Qualquer implícita garantias de Software são limitadas a 90 (noventa) dias. mikroElektronika Associates ' e seus fornecedores inteira responsabilidade, e seu exclusivo recurso deverá ser, no mikroElektronika Associates ' opção, (a) a devolução do preço pago, ou (b) a reparação ou substituição do software que não atende mikroElektronika Associates ' Garantia Limitada e que seja devolvido a mikroElektronika Associates com uma cópia do recibo. Não devolva o produto até se ter "Sócios" Mikroelektronika PRIMEIRA e obteve um RETURN Número da autorização. Este Garantia limitada é nula se a falha do Software resultou de um acidente, abuso ou má utilização. Qualquer substituição de Software será garantido para o resto do período da garantia original ou 30 (trinta) dias, o que for maior. AO MÁXIMO PERMITIDO POR LEI, Mikroelektronika ASSOCIADOS E SEUS FORNECEDORES REJEITAM TODAS OUTRAS GARANTIAS E CONDIÇÕES, EXPRESSA OU IMPLÍCITA, INCLUÍDO, MAS NÃO SE LIMITANDO ÀS GARANTIAS DE COMERCIALIZAÇÃO, ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA, E NÃO-VIOLAÇÃO, NO QUE DIZ RESPEITO AO SOFTWARE E PRESTAÇÃO OU FALTA DE PRESTAÇÃO DE SERVIÇOS DE APOIO. EM HIPÓTESE ALGUMA A Mikroelektronika ASSOCIADOS OU SEUS FORNECEDORES SER RESPONSÁVEL POR QUAISQUER DANOS, INCIDENTAIS OU CONSEQÜENCIAIS DANOS (INCLUINDO, SEM LIMITAÇÃO, DANOS POR PERDA DE LUCROS E INFORMAÇÃO DE NEGÓCIOS, NEGÓCIOS INTERRUPÇÃO OU QUALQUER OUTRA PERDA PECUNIÁRIA) DECORRENTES DO USO OU IMPOSSIBILIDADE DE UTILIZAÇÃO DO SOFTWARE OU PRESTAÇÃO DE OU NÃO PRESTAÇÃO DE SERVIÇOS DE APOIO, MESMO ASSOCIATES Mikroelektronika FOI AVISADO DA POSSIBILIDADE DE TAIS DANOS. EM QUALQUER CASO, ASSOCIATES Mikroelektronika ' TODA RESPONSABILIDADE EM QUALQUER PRESTAÇÃO DE LICENÇA SERÁ LIMITADA AO VALOR PAGO POR VOCÊ SOFTWARE FORNECIDO, entretanto, se você entrou A Associates Mikroelektronika CONTRATO DE SERVIÇOS DE APOIO, ASSOCIATES Mikroelektronika ' TODA A RESPONSABILIDADE SOBRE Serviços de apoio serão regidos pelos termos DESSA ACORDO. Mikroelektronika - Soluções de software e hardware para o mundo embutido
5
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 1
mikroC PRO para PIC
Introdução ATIVIDADES DE ALTO RISCO
O software é não tolerantes a falhas e não foi projetado, fabricado ou destinado ao uso ou revenda como on-line de equipamentos de controle em ambientes perigosos que exijam prova de falhas desempenho, tais como na operação de instalações nucleares, navegação de aeronaves ou comunicação sistemas de controle de tráfego aéreo, máquinas de suporte à vida, ou armas sistemas, em que a falha do Software possa levar diretamente à morte, ferimentos pessoais, ou danos físicos ou ambientais graves ("Atividades de Alto Risco"). mikroElektronika Associados e seus fornecedores se isentam especificamente qualquer guerra, expressas ou implícitas, rantia de adequação para Atividades de Alto Risco.
DISPOSIÇÕES GERAIS
Essa declaração só pode ser modificado por escrito e assinado por você e uma autorização oficialcer de mikroElektronika Associates. Se qualquer disposição desta declaração é considerada nula ou inexeqüível, o restante permanecerá válido e exeqüível de acordo com a sua termos. Se qualquer medida prevista é determinada como tendo falhado a sua finalidade essencial, todas as limitações de responsabilidade e exclusões dos danos previstos no GARANTIAS Limitedty permanecerá em vigor. Esta afirmação lhe dá direitos legais específicos, você pode ter outros, que variam, de país para país. mikroElektronika Associates reserva todos os direitos não especificamente concedida nesta declaração. mikroElektronika Visegradska 1A, 11000 Belgrade, A Europa. Telefone: + 381 11 36 28 830 Fax: +381 11 36 28 831 Web: www.mikroe.com E-mail: [email protected]
6
Mikroelektroni ka - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 1
Introdução
SUPORTE TÉCNICO No caso de você encontrar qualquer problema, você é bem-vindo ao nosso fórum de suporte em www.mikroe.com/forum/. Aqui, você também pode encontrar informações úteis, dicas de hardware, prática e trechos de código. Seus comentários e sugestões sobre o futuro desenvolvimento do mikroC PRO para PIC são sempre apreciado - sinta-se livre para deixar uma nota ou dois na nossa lista de desejos. Em nossa Base de Conhecimento www.mikroe.com/en/kb/ você pode encontrar as respostas a Frequentemente Perguntas e soluções para problemas conhecidos. Se você não consegue encontrar o solução para o problema na Base de Conhecimento em seguida, informar ao Posto de Apoio www.mikroe.com/en/support/. Desta forma, podemos gravar e rastrear bugs mais eficiente, o que é do nosso interesse mútuo. Nós respondemos a todos os relatórios de bugs e quesção de forma adequada, cada vez melhor o nosso suporte técnico. M ik r o el e k tr o n ik a S ol u ç õ e s d e s of t w a r e e h a r d w a r e p a r
a o mundo embutido
www.mecatronicadegaragem.blogspot.com
7
CAPÍTULO 1
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Introdução COMO SE INSCREVER
A versão mais recente do mikroC PRO para PIC está sempre disponível para download em nosso site. É um software totalmente funcional bibliotecas, exemplos e compreajuda abrangente incluído.
A única limitação da versão grátis é que ela não pode gerar a saída hexadecimal mais de 2 KB. Embora possa parecer restritivo, essa margem permite-lhe desenvolver práticas, aplicações de trabalho, sem pensar em limitar a demo. Se você pretende desenvolver realmente projetos complexos na mikroC PRO para PIC, então você deve considerar a possibilidade de adquirir a chave de licença.
Quem recebe a chave de licença Os compradores do mikroC PRO para PIC têm direito a chave de licença. Depois de ter completaram o procedimento de pagamento, você tem a opção de registar o seu mikroC PRO. Desta forma você pode gerar saída hexadecimal sem quaisquer limitações.
Como obter a chave de licença Depois de ter concluído o procedimento de pagamento, inicie o programa. Selecione Ajuda > Como Registrar a partir do menu drop-down ou clique no ícone Como Registrar. Preencha o formulário de inscrição (figura abaixo), selecione o seu distribuidor, e clique no botão Enviar.
8
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 1
Introdução
Isto irá iniciar o seu cliente de e-mail com a mensagem pronta para ser enviada. Reveja as inforinformação que você entrou, e adicione o comentário se achar necessário. Por favor, não modificar a linha de assunto. Ao receber e verificar o seu pedido, nós enviaremos a chave de licença para o e-mail endereço especificado no formulário.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
9
CAPÍTULO 1
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Introdução Depois de receber a chave de licença
A chave de licença vem como um pequeno arquivo autoextracting - apenas iniciá-lo em qualquer lugar sua computador para ativar sua cópia do compilador e remover o limite de demonstração. Você não precisa reiniciar seu computador ou instalar qualquer componente adicional. Além disso, não há necessidade de executar o mikroC PRO para PIC no momento da ativação. Notas: A chave de licença é válida até que você formatar o disco rígido. No caso de precisar de esteira do disco rígido, você deve solicitar uma nova chave de ativação. Por favor, mantenha o programa de ativação em um lugar seguro. Toda vez que você atualizar o compilador você deve começar este programa novamente para reativar a licença.
10
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO
2
mikroC PRO para PIC Meio Ambiente O mikroC PRO para PIC é um ambiente amigável e intuitivo.
11
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente Resumo IDE
O editor de código reguláveis Sintaxe Destacando, Código de dobradura, Código Adjunto, Assistente parâmetros, Auto Corrigir erros de digitação comuns e Tem Código placas (Auto Complete). O Code Explorer está à sua disposição para facilitar o gerenciamento do projeto. O Gerente de Projeto alows gerenciamento de projetos múltiplos configurações do projeto geral podem ser feitas na janela de configurações do projeto gerente de Biblioteca permite bibliotecas manuseio simples de ser usado em um projeto A janela de erro mostra todos os erros detectados durante a compilação e vinculação. A fonte de nível de software simulador permite depurar passo lógico executável-aetapa, observando o fluxo do programa. O assistente para Novo projeto é uma maneira rápida, confiável e fácil maneira de criar um projeto. Arquivos de ajuda são de sintaxe e sensível ao contexto. Como em qualquer aplicação de Windows modernos, você pode personalizar o layout da mikroC PRO para PIC para atender às suas necessidades. Corretor ortográfico identificadores sublinha que são desconhecidos para o projeto. Desta forma, ele ajuda o programador a detectar potenciais problemas cedo, muito antes do proj A ECT é compilado. Corretor ortográfico pode ser desativado, escolhendo a opção na janela de Preferências (F12).
12
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
MENU PRINCIPAL OPÇÕES As opções disponíveis do menu principal são:
Tópicos relacionados: Os atalhos de teclado
Mikroelektronika - Soluções de software e hardware para o mundo embutido
13
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente FILE OPÇÕES
O menu File é o principal ponto de entrada para a manipulação com os arquivos de origem.
Arquivo
Descrição Abra uma nova janela do editor. Abra o arquivo de origem para edição ou arquivo de i i li ã Reabrir ficheiro utilizado recentemente. Salve as alterações para o editor ativo. Salve o arquivo fonte ativa com os diferentes nome ou alterar o tipo de arquivo. Feche o arquivo fonte ativa. Visualização de Impressão. Sair IDE.
Tópicos relacionados: Os atalhos de teclado, Arquivo Barra, Fonte Gestão de Ficheiros
14
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
Opções do menu Editar
Descrição Editar Desfazer última alteração. Refazer a última alteração. Recortar o texto selecionado para o clipboard. Copiar o texto selecionado para o clipboard. Colar o texto da prancheta. Deletar texto selecionado. Selecione todo o texto no editor ativo. Localizar texto em editor ativo. Localizar próxima ocorrência de texto no editor ativo. Localizar a ocorrência anterior do texto no editor ativo. Substitua o texto no editor ativo. Localizar texto em arquivo corrente, em todos os arquivos abertos, ou em arquivos da pasta desejada. Saltar para a linha desejada no editor ativo. Advanced Código opções do Editor Mikroelektronika - Soluções de software e hardware para o mundo embutido
15
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente Avançado »
Descrição Código de comentário selecionados ou colocados com linhah h Descomente código selecionado oul remover única linha ái h h l Recuo código selecionado. Outdent código selecionado. Alterações selecionada caso de texto em i ú l Alterações selecionada caso o texto em iú l Alterações selecionada caso de texto para titl
Pesquisar Texto Caixa de diálogo para procurar o documento para o texto especificado. A busca é porformado na direção especificada. Se a string não for encontrada uma mensagem é exibida.
16
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
Substituir texto
Caixa de diálogo para a busca de uma seqüência de texto em arquivo e substituindo-a por outra cadeia de texto.
Localizar em arquivos Caixa de diálogo para a busca de uma seqüência de texto no arquivo atual, todos os arquivos abertos, ou em arquivos em um disco.
A string a ser procurada é especificado no texto para encontrar campo. Se a pesquisa em diretórios opção é selecionado, os arquivos para busca estão especificados na máscara de arquivos e campos de Caminho. Mi kr oel ekt ro nik aSol uç õe s de sof tw are e har dw are par ao mu nd o em but
ido
www.mecatronicadegaragem.blogspot.com
17
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente Ir para a linha
Caixa de diálogo que permite ao usuário especificar o número da linha na que o cursor deve ser posicionado.
opção de expressões regulares Ao marcar esta caixa, você será capaz de avançar em sua pesquisa, por meio de regular expressões.
Tópicos relacionados: Os atalhos de teclado, Barra de Edição, Edição Avançada Barra de ferramentas
18
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
Menu Opções de visualização
Arquivo
Descrição Mostrar barras de ferramentas / Hide. Mostrar / Esconder as janelas de depuração. Show / Hide Lista de rotina em editor ativo. Show / Hide janela Project Settings. Show / Hide Código do Windows Explorer. Show / Hide janela Project Manager. Show / Hide Library Manager. Mostrar / ocultar janela de favoritos. Show / Hide Erro janela Mensagens. Mostrar / ocultar janela do Editor de Macro. Mostrar a janela da Lista de Janelas.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
19
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente BARRAS Arquivo da Barra de Ferramentas
Arquivo Toolbar é uma barra de ferramentas padrão, com as seguintes opções: Ícone
Descrição Abre uma nova janela do editor. Abra o arquivo de origem para edição ou arquivo de imagem para i li ã Salve as alterações para a janela ativa. Salvar alterações em todas as janelas abertas. Feche o editor atual. Feche todas as editores. Visualização de Impressão.
Edit Toolbar
Edit Toolbar é uma barra de ferramentas padrão, com as seguintes opções: Ícone Descrição Desfazer última alteração. Refazer a última alteração. Recortar o texto selecionado para o clipboard. Copiar o texto selecionado para o clipboard. Colar o texto da prancheta.
20
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
Edição Avançada Barra
Advanced Edit Toolbar vem com as seguintes opções: Ícone
Descrição Comentar o código selecionado ou colocar comentário de linha única, se não hDescomente h código l selecionado ã ou remover o comentário de linha única, se houver h l Selecione o texto de partida para acabar com delimitador delimitador. Ir para acabar com delimitador. Vá para a linha. Recuo selecionados linhas de código. Outdent selecionados linhas de código. Gerar o código HTML apropriado para publicar código fonte de corrente em
Localizar / Substituir Barra
Localizar / Substituir Toolbar é uma barra de ferramentas padrão, com as seguintes opções: Ícone Descrição Localizar texto na atual editor. Localizar a próxima ocorrência. Encontrar ocorrência anterior. Substitua texto. Localizar texto em arquivos.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
21
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente Projeto Barra Projeto Barra vem com as seguintes opções: Ícone
Descrição Novo projeto Projeto Open Save Project Fechar projeto atual. Editar configurações do projeto. Adicionar projecto existente ao projeto do grupo. Remover projeto existente do grupo do projeto. Add File To Project Remover o arquivo de projeto
Construir Toolbar Construir Toolbar vem com as seguintes opções: Ícone
Descrição Criar o projeto atual. Construir todos os projetos abertos. Construir e projeto de programa ativo. Iniciar programador e carga arquivo HEX atual. Abrir código assembly no editor. Abra lisitng arquivo no editor. Ver estatísticas para o projeto atual.
22
Mikroelektronika - Software e Soluções de hardware para Embedded World
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
Depurador Depurador Toolbar vem com as seguintes opções: Ícone
Descrição Iniciar Software Simulator ou mikroICD (In-Circuit Debugger). Executar / Pausar depurador. Parar depurador. Step Into. Passe por cima. Saia. Executar até o cursor. Alternar ponto de interrupção. breakpoints Toggle. Limpar os pontos de interrupção. Exibir janela de observação Exibir janela cronômetro
Estilos de Barra
Estilos da barra de ferramentas permite que você facilmente personalizar o seu espaço de trabalho.
Mikroelektronika - Softwares e soluções de hardware para Embedded World
23
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente Barra de Ferramentas
Barra de Ferramentas vem com seguintes opções padrão: Ícone
A barra de ferramentas podem ser facilmente personalizados, adicionando novas ferramentas em Opções (F12) janela. Tópicos relacionados: Os atalhos de teclado, integrada Ferramentas, depurador do Windows
24
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
PROJETO MENU OPÇÕES
Mikroelektronika - Soluções de software e hardware para o mundo embutido
25
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente Projeto
Descrição Criar o projeto ativo. Construir todos os projetos. Construir e programa de projeto ativo. Exibir Assembléia. Editar caminhos de pesquisa. Pasta do Projeto Limpeza Adicionar arquivo ao projeto. Remover arquivo de projeto. Projetos de importação de versões anteriores do ik C Abra o Assistente de Novo projeto Abrir projeto já existente. Salvar atual projeto. Editar as configurações do projeto Abra grupo de projeto. Fechar grupo de projeto. Salve o arquivo de projeto ativo com o nome dif t Aberto recentemente utilizadas projeto. Fechar projeto ativo.
Tópicos relacionados: Os atalhos de teclado, o Projeto Barra, criando novos Projeto, Projeto Manager, as configurações do projeto
26
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
MENU OPÇÕES RUN
Executar
Descrição Iniciar Software Simulator ou mikroICD (InCircuit Debugger). Parar depurador. Pausa Debugger. Step Into. Step Over. Step Out. Ir para interrupção em projeto atual. Alternar ponto de interrupção. Breakpoints. Breakpoints Clear. Mostrar / Esconder Janela de Inspeção Show / Hide Window Cronómetro Alternar entre Pascal fonte e desmonassembléia.
Tópicos relacionados: Os atalhos de teclado, barra de ferramentas Debug Mikroelektronika - Software e hardware SOLUÇÕES PARA mundo embutido
27
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente Menu Ferramentas Opções
Ferramentas
Descrição Executar mikroElektronika Programador Executar Terminal USART Execute o Editor do EEPROM Executar tabela ASCII Executar Converter display de 7 Gerar o código HTML apropriado para publicação ódi f Lcd caráter b personalizado. Executar Execute o editor bitmap GLCD. Executar HID Terminal. Executar terminal de comunicação UDP. Executar mikroBootloader. Abra a janela Opções.
Tópicos relacionados: Os atalhos de teclado, Barra de Ferramentas
28
Mikroelektronika - SOLUÇÕES EM SOFTWARE E HARDWARE Para embutidos mundo
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
HELP OPÇÕES
Ajuda
Descrição Abrir arquivo de ajuda. Open Document migração de código. Verifique se a versão do compilador novo tá di í l Open Forum de Suporte mikroElektronika em d d Abra mikroElektronika Página da Web em um Informações sobre como se inscrever Abra a janela Sobre.
Tópicos relacionados: Os atalhos de teclado
Mikroelektronika - Soluções de software e hardware para o mundo embutido
29
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC
Meio Ambiente ATALHOS DE TECLADO
Abaixo está uma lista completa de atalhos de teclado disponíveis no mikroC PRO para PIC IDE. IDE Atalhos
Ctrl + Shift + S
Salvar tudo
F1
Ajuda
Ctrl + V
Colar
Ctrl + N
Nova Unidade
Ctrl + X
Corte
Ctrl + O
Abrir
Ctrl + Y
Excluir linha inteira
Ctrl + Shift + Projeto Open O Ctrl + Shift + Novo projeto N Ctrl + K Encerrar o projeto
Ctrl + Z
Desfazer
Ctrl + Shift + Z
Refazer
Ctrl + F4
Ctrl + Espaço
Código Assistente
Ctr + Shift + Edit Project E Ctrl + F9 Construir
Ctrl + Shift + S Ctrl + D
Parâmetros de Assistente
Shift + F9
Build All
Ctrl + E
Pesquisa incremental
Ctrl + F11
Construir e programar
Ctrl + L
Lista de rotina
Shift + F4
Ver Breakpoints
Ctrl + G
linha Goto
Ctrl + Shift + Limpar os pontos de F5 i t me ã F11 Start Programador
Ctrl + J
Inserir Código Modelo
Ctrl + Shift +.
Comentar Código
Ctrl + Shift + Gerente de Projetos F1 F12 Opções
Ctrl + Shift +,
Descomente Código
Ctrl + número
marcador Goto
Alt + X
Ctrl + Shift + ú + Shift + I Ctrl
marcador definido
Fechar Unidade
Fechar mikroC PRO para PIC Editor Atalhos Basic
30
Editor Atalhos avançada
Encontrar declaração
Recuo seleção
F3
Localizar, Localizar próxima
Ctrl + Shift + U
Unindent selecção
Shift + F3
Procurar o Anterior
TAB
Recuo seleção
Alt + F3
Pesquisa Grep, em arquivos
Shift + TAB
seleção Unindent
Ctrl + A
Selecionar Tudo
Alt + Seleção
Selecionar colunas
Ctrl + C
Cópia
Selecionar colunas
Ctrl + F
Pesquisar
Ctrl + Alt + S l ã Ctrl + Alt + L
Ctrl + R
Substituir
Ctrl + P
Imprimir
Ctrl + Alt + U
Ctrl + S
Salvar unidade
Ctrl + Alt + T
Converter a seleção para minúsculas Converter a seleção para maiúsculas Converter em titlecase
Mikroelektronika - Softwares e soluções de hardware para Embedded World
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
mikroICD Debugger e Software Simulador de Atalhos F2
Ir para interrupção
F4
Executar até o cursor
F5
Alternar ponto de interrupção
F6
Execute o depurador Pausa /
F7
Etapa em
F8
Passe por cima
F9
Depurar
Ctrl + F2
Parar Debugger
Ctrl + F5
Add to watch list
Ctrl + F8
Saia
Alt + D
DESMONTAGEM Vista
Shift + F5
Abrir a janela Watch
Ctrl + Shift + A Show Advanced Breakpoints
Mikroelektronika - Soluções de software e hardware para o mundo embutido
31
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente IDE GERAL A mikroC PRO para PIC é um ambiente amigável e intuitivo:
O editor de código reguláveis Sintaxe Destacar, código dobrando, Código Adjunto, Assistente parâmetros, Auto Corrigir erros de digitação comuns e Tem Código placas (Auto Complete). O Code Explorer está à sua disposição para facilitar o gerenciamento do projeto. O Gerente de Projeto alows gerenciamento de projetos múltiplos configurações do projeto geral podem ser feitas na janela de configurações do projeto gerente de Biblioteca permite bibliotecas manuseio simples de ser usado em um projeto A janela de erro mostra todos os erros detectados durante a compilação e vinculação. A fonte de nível de software simulador permite depurar passo lógico executável-aetapa, observando o fluxo do programa. O assistente para Novo projeto é uma maneira rápida, confiável e fácil maneira de criar um projeto. Arquivos de ajuda são de sintaxe e sensível ao contexto. Como em qualquer aplicação de Windows modernos, você pode personalizar o layout do mikroC PRO para PIC para atender às suas necessidades. sublinha Spell Checker identificadores que são desconhecidos para o projeto. Desta forma, ele ajuda o programador a detectar potenciais problemas cedo, muito antes do proA ECT é compilado. Corretor ortográfico pode ser desativado, escolhendo a opção na Diálogo Preferências (F12).
32
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
PERSONALIZAÇÃO LAYOUT IDE Docking Windows Você pode aumentar a visualização e edição espaço para o código, dependendo de como você organizar as janelas no IDE. Passo 1: Clique na janela que você deseja encaixar, dar-lhe o foco.
Passo 2: Arraste a janela de ferramentas do seu local atual. Um losango guia é exibida. As quatro setas do ponto de diamante para os quatro cantos do IDE.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
33
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente
Passo 3: Mova o ponteiro sobre a parte correspondente do losango guia. Um contorno da janela aparece na a área designada.
Passo 4: Para encaixar a janela na posição indicada, solte o botão do mouse. Dica: Para mover uma janela acoplável sem rotura no lugar, pressione CTRL enquanto arrastando-o.
Salvar Layout Depois de ter um layout de janela que você gosta, você pode salvar o layout, digitando o nome para o layout e pressionando o ícone Save Layout
.
Para definir o layout, selecione o layout desejado na lista suspensa Layout e clique em Definir o ícone Layout
.
Para remover o layout a partir da lista drop-down, selecione o layout desejado na lista e clique no botão Excluir Icon Layout .
34
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
Auto Ocultar Auto Esconder "permite ver mais do seu código de uma vez por minimizando ferramenta ganhadows ao longo das bordas do IDE quando não estiver em uso. Clique na janela que deseja manter visível a dar-lhe o foco. Clique no ícone de alfinete na barra de título da janela. .
Quando uma janela auto-ocultos perde o foco, ele automaticamente slides de volta ao seu guia na a borda da IDE. Enquanto uma janela é auto-oculto, seu nome eo ícone são visíveis em uma guia na borda do IDE. Para exibir um auto-ocultos janela, mova o pontoer sobre a guia. A janela desliza para trás para ver e está pronto para uso.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
35
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente Editor avançado de código
O editor de código é um editor de texto avançado moda para satisfazer as necessidades dos profissionais. Geral edição do código é o mesmo que trabalhar com qualquer editor de texto padrão, incluindo familiar Copiar, Colar e Desfazer ações, comum para o ambiente Windows.
Editor de recursos avançados Ajustável Realce de Sintaxe Código Assistente Código Folding Parâmetro Assistente Modelos de Código (Auto Complete) Correção automática de erros de digitação comuns Verificador Ortográfico Marcadores e Goto Line Comente / Descomente Você pode configurar o destaque da sintaxe, modelos de código e Auto Correto Editor de diálogo Configurações. Para acessar as configurações, clique em Ferramentas > Opções da menu drop-down, clique no botão Mostrar Ícone Opções ou a tecla F12 imprensa.
36
Mikroelektronika - Soluções de software e hardware para EMBEDDED MUNDO
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
Código Assistente Se você digitar as primeiras letras de uma palavra e pressione Ctrl + Espaço, todas válidas identifiers coincidindo com as letras que você digitou será solicitado em um painel flutuante (veja a imagem abaixo). Agora você pode continuar digitando para estreitar a escolha, ou você pode selecionar um da lista usando as setas do teclado e Enter.
Código Folding dobramento de código é IDE recurso que permite aos usuários ocultar ou exibir secções de um arquivo de origem. Desta forma é mais fácil de gerenciar grandes regiões de código dentro uma janela, enquanto a visualização apenas as subsecções do código que são relevantes durante uma sessão de edição especial. Ao digitar, o símbolo de dobragem de código (- e +) aparecerá automaticamente. Use a dobração de símbolos para ocultar / mostrar as subseções código.
Se você colocar o cursor do mouse sobre a dica da caixa, o texto recolhido será mostrado na uma caixa de dica de estilo.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
37
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente
Parâmetro Assistente O Assistente de parâmetro será invocado automaticamente quando você abre parênteses "(" ou pressione Shift + Ctrl + Espaço. Se o nome de uma função válida precede o parentese, em seguida, os parâmetros esperados serão exibidos em um painel flutuante. Como você digite o parâmetro real, o próximo parâmetro esperado ficará em negrito.
Modelos de Código (Auto Complete)
Você pode inserir o modelo de código, digitando o nome do modelo (por exemplo, whiles), em seguida, pressione Ctrl + J eo editor de código irá gerar automaticamente um código.
Você pode adicionar seu modelos próprios para a lista. Selecione Ferramentas > Opções no menu drop-down menu, ou clique no botão Mostrar Ícone Opções e selecione a guia Auto Completar. Aqui você pode digitar o apropriado palavra-chave, descrição e código do seu template. macros Autocomplete pode sistema e recuperar informações sobre o projeto: - % DATE% - Data atual do sistema - %% TIME - Hora atual do sistema - %% DISPOSITIVO - Nome do dispositivo (MCU), conforme especificado nas configurações do - projeto - %% DEVICE_CLOCK - Relógio, conforme especificado no projeto definições %% COMPILER - Compilador versão atual
38
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC
Meio Ambiente
Essas macros podem ser usados no código do modelo, ver modelo ptemplate fornecido com mikroC PRO para PIC instalação.
Correção automática O recurso Auto Correct corrige erros comuns de digitação. Para acessar a lista de recerros reconhecida, selecione Ferramentas > Opções a partir de No menu drop-down, ou clique no botão Mostrar Ícone Opções
e selecione a guia Autocorreção. Você também pode adicionar os seus próprios
preferências para a lista.
Além disso, o editor de código tem um recurso para comentar ou descomente o código selecionado pelo simplo de um clique do mouse, utilizando o ícone
e Icon Descomente
a partir de
comentar Barra de ferramentas de código.
Verificador Ortográfico O verificador ortográfico sublinha desconhecido objetos no código, para que eles possam ser facilmente notado e corrigido antes de compilar o seu projeto. Selecione Ferramentas > Opções a partir do menu drop-down, ou clique no ícone Mostrar opções e, em seguida, selecione a aba Verificador Ortográfico.
Bookmarks Bookmarks tornar a navegação através de um código grande mais fácil. Para definir um marcador, utilize Ctrl + Shift + número. Para saltar para um marcador, utilize Ctrl + número.
Goto Line A opção Goto Line torna a navegação através de um código grande mais fácil. Use a curto corte Ctrl + G para ativar essa opção.
Comentário / Descomente Além disso, o editor de código tem um recurso para comentar ou descomentar selecionado código simples clique de um mouse, utilizando o ícone comentar
e inco-
mento Icon do Código de Barra. www.mecatronicadegaragem.blogspot.com
Mikroelektronika - Soluções de software e hardware para o mundo embutido
39
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente Explorador de código
O Code Explorer dá visão clara de cada item declaradas dentro do código fonte. Você pode saltar a uma declaração de qualquer item pelo botão direito dele. Além disso, além da lista de objetos definidos e declarados, código de explorer exibe mensagem de erro sobre a primeira e sua localização no código.
As seguintes opções estão disponíveis no Gerenciador de Código: Ícone Descrição Expandir / Recolher todos os nós da árvore. Localize declaração no código.
40
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
LISTA DE ROTINA lista de rotina diplays lista de rotinas, e permite que as rotinas de filtragem por nome. Rotina janela da lista pode ser acessada pressionando Ctrl + L. Você pode saltar para uma rotina desejado, clicando duas vezes nele.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
41
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente GERENTE DE PROJETOS
Project Manager for IDE recurso que permite aos usuários gerenciar múltiplos projetos. Vários projetos que juntos formam grupo de projeto pode ser aberto ao mesmo tempo. Apenas um deles pode estar ativo no momento. Definição do projeto em ativos modalidade é realizada por duplo clique sobre o projeto desejado no Project Manager.
Na sequência opções estão disponíveis no Project Manager:
42
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
Ícone
Descrição Salvar projeto do Grupo. Abra grupo de projeto. Feche o projeto ativo. Fechar grupo de projeto. Adicione projeto para o grupo de projeto. Retire do projeto grupo de projeto. Adicionar arquivo ao projeto ativo. Remover arquivos selecionados a partir do projeto. Construir o projeto ativo. programador executar mikroElektronika do Flash.
Para obter detalhes sobre como adicionar e remover arquivos projeto consulte Adicionar / Remover arquivos de Projeto. Tópicos relacionados: Configurações do projeto, o Project Menu de Opções, Opções do menu File, Project Toolbar, barra de ferramentas Build, Adicionar / Remover arquivos do Project
Mikroelektronika - SOFTWARE HARDWARE E SOLUÇÕES PARA mundo embutido
43
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente PROJETO DE JANELA DE CONFIGURAÇÃO
As seguintes opções estão disponíveis nas configurações do projeto Janela: Dispositivo - selecionar o dispositivo apropriado na lista de dispositivos drop-down. Oscilador - digite o valor da freqüência do oscilador. Construir / Debugger Tipo - escolha depurador tipo.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
Gerenciador de bibliotecas Library Manager permite que as bibliotecas manuseio simples sendo usado em um projeto. Biblioteca janela do Gerenciador de listas de todas as bibliotecas (extencion. MCL), que são instantaneamente armazenados no Usa pasta do compilador. A biblioteca desejável é adicionado ao projeto, selecionando seleção caixa ao lado do nome da biblioteca. Para ter todas as funções de biblioteca acessível, basta pressionar o botão Confira todas as e todas as bibliotecas serão selecionadas. No caso de nenhuma biblioteca é necessária em um projeto, pressione o botão Limpar tudo e todas as bibliotecas serão apurados a partir do projeto. Somente as bibliotecas selecionadas serão ligadas.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
45
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente Ícone
Descrição Atualizar Biblioteca de verificação de arquivos em "Usos" pasta. Útil quando novos bibli di bibliotecas i d i d Útil quando i " Reconstruir todas as disponíveis. fontes" da biblioteca estão disponíveis e id d d f t Inclui todas as bibliotecas disponíveis no projeto atual. Nenhuma biblioteca da lista serão incluídos no projeto atual. Restauração da biblioteca para o estado apenas antes de salvar último
j t tópicos relacionados: mikroC PRO para PIC Bibliotecas, Criação de um novo Biblioteca
46
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
ERRO JANELA No caso em que foram encontrados erros durante a compilação, o compilador vai relatá-los e não irá gerar um arquivo hex. A janela de erro será solicitado na parte inferior da Na janela principal por padrão. A janela de erro está localizado no separador Mensagem, e mostra a localização eo tipo de erros, o compilador encontrou. O compilador também relata advertências, mas estas não afetam a saída, os erros só pode interefere com a geração de hex.
Dê um duplo clique na linha da mensagem na janela de erro para destacar a linha onde o erro foi encontrado. Temas relacionados: Mensagens de erro
Mikroelektronika - Soluções de software e hardware para o mundo embutido
47
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente ESTATÍSTICAS
Após a compilação com sucesso, você poderá analisar estatísticas de seu código. Clique no Estatístitiques Icon .
Uso o Windows Memory Fornece uma visão geral de RAM e ROM uso nas diversas formas.
Uso de memória RAM Exibe uso da memória RAM de uma forma torta-like.
48
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
RAM locais utilizados Exibe usados locais de memória RAM e seus nomes.
SFR Locais Exibe uma lista de utilizados SFR locais.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
49
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente Uso de memória ROM ROM Exibe o uso do espaço de memória em forma de pizza-like.
Memória ROM Constantes Exibe constantes memória ROM e seus endereços.
50
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
Função ordenados por nome Classifica e exibe funções por seus endereços, nomes simbólicos, e único nomes assembler.
Funções ordenados por tamanho Classifica e exibe funções, pela sua dimensão, na ordem ascendente.
Mikroelektronika - Software e Soluções de hardware para Embedded World
51
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente Funções Ordenado por Endereços
Classifica e mostra por suas funções endereços, em ordem crescente.
Funções Ordenado por Nome do Quadro Classifica e exibe funções por seus nomes em um formato gráfico semelhante.
52
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
Funções Ordenado por Gráfico Tamanho Classifica e exibe funções por seus tamanhos em um formato gráfico semelhante.
Funções ordenadas por endereço Gráfico Classifica e exibe funções por seus endereços em um formato gráfico semelhante.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
53
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente Função Árvore Exibe Função Árvore com os dados relevantes para cada função.
Memória Resumo Apresenta resumo de memória RAM e memória ROM de forma torta-like.
54
Mikroelektronika - Softwares e soluções de hardware para Embedded World
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
Editor de Macros A macro é uma série de teclas que foram "gravadas" na ordem executada. Uma macro permite "gravar" uma série de teclas e depois em 'playback', ou repetir, as teclas gravadas.
A Macro oferece os seguintes comandos: Ícone
Descrição teclas "gravação" começa para posterior reprodução. Pára keystrokesthat captura começou quando o Start com Recordigmando foi selecionado. Permite uma macro que foi gravada para ser repetidos. Novo macro. Excluir macro.
Tópicos Relacionados: Avançado editor de código, modelos de código
Mikroelektronika - Soluções de software e hardware para o mundo embutido
55
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente Ferramentas integradas USART Terminal
A mikroC PRO para PIC inclui o terminal de comunicação USART para RS232 de comunicação. Você pode iniciar a partir do menu drop-down Ferramentas > Termi-USART nal ou clicando no ícone Terminal USART
56
da barra de ferramentas.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
EEPROM Editor O Editor é usado EEPROM para manipulação de memória EEPROM MCU. Você pode lançá-lo a partir do menu drop-down Ferramentas > EEPROM Editor. Quando Utilize este definição EEPROM está marcada compilador gerará Intel hex project_name.ihex que contém dados a partir do editor EEPROM. Quando você executa programador de software mikroElektronika mikroC PRO para PIC IDE - project_name.hex arquivo será carregado automaticamente durante a IHEX arquivo deve ser carregado manualmente.
Mikroelektronika - SOFTWARE HARDWARE E SOLUÇÕES PARA mundo embutido
57
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente ASCII Gráfico
A tabela ASCII é uma ferramenta útil, particularmente útil quando se trabalha com display LCD. Você pode iniciá-lo a partir do menu drop-down Ferramentas > tabela ASCII ou clicando no Ver Icon tabela ASCII
58
da barra de ferramentas.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
Sete Converter Segmento Os sete segmentos Converter é um painel visual conveniente que retorna / valor decimal hexadecimal para qualquer combinação viável que você gostaria de exibir em 7seg. Clique sobre as peças, de 7 de imagem do segmento para obter o valor solicitado na caixas de edição. Você pode iniciar a partir do menu drop-down Ferramentas > 7 Segmento Converter ou por clicando no ícone Sete Segmento Converter
da barra de ferramentas.
LCD caractere personalizado mikroC PRO para PIC inclui o Custom Lcd caracteres. A saída é mikroC PRO para PIC código compatível. Você pode iniciar a partir do menu drop-down Ferramentas > Cus LCD Tom de caracteres.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
59
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente LCD Gráfico Editor de Bitmap
A mikroC PRO para PIC inclui o gráfico LCD Bitmap Editor. A saída é o mikroC PRO para PIC código compatível. Você pode iniciar a partir do menu drop-down Ferramentas > GLCD Editor de Bitmap.
60
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
HID Terminal A mikroC PRO para PIC inclui o terminal de comunicação para HID USB comucação. Você pode iniciar a partir do menu drop-down Ferramentas > HID Terminal.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
61
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente UDP Terminal
A mikroC PRO para PIC inclui o Terminal UDP. Você pode iniciá-lo na menu drop-down Ferramentas > UDP Terminal.
62
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
mikroBootloader
(De AN732 Microchip documento) A família de PIC16F87X microcontroladores tem a habilidade de escrever à sua memória próprio programa. Este recurso permite um arranque de pequenas programa gerenciador de receber e gravar um novo firmware na memória. Na sua mais simples formulário, o gestor de arranque começa o código de usuário em execução, salvo se considerar que o novo firmware deve ser baixado. Se houver um novo firmware a ser baixado, ele recebe os dados e grava-lo em memória do programa. Há muitas variações e FEA-suplementar estruturas que podem ser adicionadas para melhorar a confiabilidade e simplificar a utilização do gerenciador de inicialização. Nota: mikroBootloader só pode ser usado com microcontroladores PIC que piscam apoio escrever.
Como usar mikroBootloader? 1. Coloque o PIC com o arquivo hexadecimal apropriado usando a programação convencional técnicas (por exemplo, para usar PIC16F877A p16f877a.hex). 2. mikroBootloader Iniciar a partir do menu drop-down Ferramentas > Bootoader. 3. Clique em Configuração da Porta e selecione a porta COM que será utilizada. Certifique-se que BAUD é definida para 9600 Kpbs. 4. Clique em Abrir Arquivo e selecione o arquivo HEX que você gostaria de carregar. 5. Desde o bootcode no PIC só dá o computador 4-5 segundos para se conectar, você deve redefinir o PIC e em seguida clique no Connect botão dentro de 4-5 segundos. 6. A última linha na janela de histórico, em seguida, deve agora ler "Connected". 7. Para iniciar o upload, basta clicar sobre o Iniciar Bootloader botão. 8. Seu programa será gravado no flash PIC. Bootloader irá reportar um erro que pode ocorrer. 9. Redefinir o PIC e começar a executar.
Mi kr oel ekt ro nik aSo ftw are e Sol uç õe s de har dw are par a
Embedded World
www.mecatronicadegaragem.blogspot.com
63
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente Características
O código de inicialização do computador dá 5 segundos para ficar ligado a ele. Se não, ele começa a execução do existentes de código de usuário. Se houver um novo código para ser baixado, o código de inicialização recebe e grava os dados em memória do programa. As características mais comuns do gerenciador de inicialização pode ter estão listados abaixo: Código no local Reset. Código em qualquer lugar em uma pequena área de memória. Verifica se o usuário quer novo código a ser carregado. Inicia a execução do código do usuário se nenhum novo código está a ser carregada. Recebe o código de novo usuário através de um canal de comunicação se o código está a ser carregado. Programas do novo código em memória.
Integrando Código de Utilizador e Código de inicialização
O código de inicialização quase sempre usa o local Reset e alguns programas adicionais memória. É um simples pedaço de código que não precisa usar interrupções e, portanto, o código de utilizador pode usar o normal interrupção vetor em 0x0004. O código de inicialização deve evitar o uso do vetor de interrupção, por isso deve ter um ramo do programa no endereço intervalo 0x0000 a 0x0003. O código de inicialização deve ser programado na memória usando técnicas de programação convencionais, e os bits de configuração deve ser proprogramado no momento. O código de inicialização é possível acessar os bits de configuração, desde que não são mapeados no espaço de memória do programa.
64
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
OPÇÕES menu Opções é composta por três guias: Code Editor, Ferramentas e as configurações de saída.
editor de código O editor de código é um editor de texto avançado moda para satisfazer as necessidades dos profissionais.
Ferramentas A mikroC PRO para PIC inclui a guia Ferramentas, que permite o uso de atalhos para programas externos, como a calculadora ou Bloco de Notas. Você pode configurar até 10 atalhos diferentes, Tool0 edição - Tool9.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
65
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC
Meio Ambiente As configurações de saída
Ao modificar configurações de saída, o usuário pode configurar o conteúdo dos arquivos de saída. Você pode habilitar ou geração, por exemplo, desabilitar a ASM e arquivo da lista. Além disso, o usuário pode escolher o nível de otimização, e configurações específicas do compilador, que incluem a sensibilidade caso, vínculo dinâmico para literais de seqüência de configuração (descrita em mikroC PRO para PIC específicos). Construir todos os arquivos de biblioteca que permite ao utilizador usar a biblioteca compilado (*. mcl) em qualquer PIC MCU (quando esta opção estiver marcada), ou para um selecionado PIC MCU (quando esta opção for deixada desmarcado). Para obter mais informações sobre a criação de novas bibliotecas, consulte Criando Nova Biblioteca.
66
Mikroelektroni ka - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
Expressões Regulares Introdução As expressões regulares são um método amplamente utilizado de especificar padrões de texto para pesquisar. metacaracteres especiais permitem que você especificar, por exemplo, que a partistring lar que você está procurando, ocorre no início ou final de uma linha, ou que contém n recorrência de um determinado personagem.
Simples partidas
Qualquer caractere único partidas em si, a menos que seja um metacaractere com uma especial significado descrito abaixo. Uma série de caracteres que corresponde uma série de caracteres na seqüência alvo, então o padrão "Curta" corresponderia "Curta" no alvo string. Você pode fazer personagens que normalmente funcionam como metacaracteres ou fuga seqüências devem ser interpretadas, precedendo-as com uma barra invertida "\". Por exemplo, metacaractere "^" início da seqüência de partidas, mas "\" ^ jogos caráter "^", e "\ \" jogos "\", etc Exemplos: não assinado seqüência de partidas 'unsigned' \ ^ Unsigned '^ Unsigned' string jogos
Seqüências de escape Caracteres podem ser especificados usando uma seqüências de escape: "\ N" corresponde a uma nova linha, "\ T" uma guia, etc Em termos mais gerais, \ Xnn, onde nn é uma seqüência de dígitos hexadecimais, coincide com o caractere cujo valor ASCII é nn. Se você precisa de um código de caracteres de largura (Unicode), você pode usar '\ X {} nnnn', onde 'Nnnn'
- Um ou mais dígitos hexadecimais. \ Xnn - Char com o código hexadecimal nn \ X {nnnn) - char com o código hexadecimal nnnn (Um byte para texto simples e dois bytes para
Unicode) \ T - Guia (HT / TAB), mesmo que \ X09 \ N - Nova linha (NL), mesmo que \ X0a \ R - Car.return (CR), mesmo que \ X0d \ F - Form feed (FF), mesmo que \ X0c \ A - Alarme (campainha) (BEL), mesmo que \ X07 \ E - Escape (ESC), mesmo que \ X1b Mi kr oel ekt
www.mecatronicadegaragem.blogspot.com
ronika - Soluções de software e hardware para o mundo embutido
67
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente Exemplos:
unsigned \ x20int jogos 'Unsigned int' (Note o espaço no meio) \ Tunsigned jogos 'Unsigned' (Predecessed por guia)
Classes de caracteres Você pode especificar uma classe de caracteres, colocando uma lista de caracteres em [], Que será corresponde a nenhum dos personagens da lista. Se a primeira caractere após o "[" é "^", o classe corresponde a qualquer caractere que não está na lista. Exemplos: Contagem "Countbr Contagem "Countar
[aeiou] r encontra strings "Countar ',' contador ', etc, mas não ',' countcr, etc [^ aeiou] r encontra strings "Countbr ',' countcr, etc, mas não ',' contador ', etc
Dentro de uma lista, o "-" caractere é usado para especificar um intervalo, para que a-z representa todos os caracteres entre "A" e "Z", inclusive.
Se você quiser "-" se a ser um membro de uma classe, colocá-lo no início ou no final da lista, ou precedem com uma barra invertida. Se você quiser ']', você pode colocá-lo no início da lista ou precedê-lo com uma barra invertida. Exemplos: [Az] jogos 'A', 'z' e '-' [Az] jogos 'A', 'z' e '-' [A \-z] jogos 'A', 'z' e '-' [A-z] corresponde a todos os 26 pequenos caracteres 'A' para 'Z' [\ N \ x0d] corresponde a qualquer das # 10, # 11, # 12, # 13. [\ D-t] corresponde a qualquer dígito, '-' ou 'T'. []-A] corresponde a qualquer caractere de ']'..' Um '.
Metacaracteres Os metacaracteres são caracteres especiais que são a essência da expressão regularsões. Existem diferentes tipos de metacaracteres, descrito abaixo.
68
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
Metacaracteres - separadores Line ^ - Início da linha $ - Fim da linha \ A - Início do texto \ Z - Final do texto . - qualquer caractere na linha Exemplos: ^ PORTA - seqüência de partidas » PORTA $ - seqüência de partidas » PORTA ^ $ - seqüência de partidas PORT.r - seqüências de jogos como
PORTA » só se for na início da linha PORTA » só se for no final de linha » PORTA » só se for a cadeia apenas em linha 'Porta', 'PORTB', 'PORT1' e assim por diante
A "^" metacaractere por defeito só é garantido para coincidir com início da entrada string / texto, e os "$" metacaractere apenas no final. Embedded separadores de linha não vai ser acompanhado por ^ " ou "$". Você pode, entretanto, o desejo de tratar uma string como um buffer de multi-linha, de modo que a "^" vai jogo após qualquer separador de linha dentro da cadeia, e "$" corresponderá antes de qualquer linha separador. As expressões regulares trabalha com separadores de linha, tal como recomendado na http://www.unicode.org/unicode/reports/tr18 /
Metacaracteres - classes pré-definidas \ W - Uma caracteres alfanuméricos (incluindo "_") \ W - Um personagem nonalphanumeric \ D - Um personagem numéricos \ D - Um caráter não-numéricos \ S - Todo o espaço (o mesmo que [\ T \ n \ r \ f]) \ S - Um espaço não Você pode usar \ W, \ D e \ S dentro de classes de personagens personalizadas.
Exemplo: routi \ de - Seqüências de jogos como "Routi1e ',' routi6e ' e assim por diante, mas não "Routime ',' rotina ' e assim por diante.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
69
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente Metacaracteres - Os limites de palavra
Um limite de palavra ("B \") é um ponto entre dois personagens que tem um código alfanumérico caráter ("W \") de um lado, e um personagem nonalphanumeric ("W \") em os outros lateral (em qualquer ordem), contando os personagens imaginários fora o começo eo fim da cadeia como um correspondente "W \". \ B - Corresponder a um limite de palavra) \ B - Correspondem a um não (limite de palavra)
Metacaracteres - Iterators
Qualquer item de uma expressão regular pode ser seguido por um outro tipo de metacharactros - iteradores. Usando este metacaracteres, você pode especificar o número de ocorrências de personagem anterior, metacaractere ou subexpressão. * - Zero ou mais ("gananciosos"), semelhante a {0,} + - Uma ou mais ("gananciosos"), semelhante a {1} ? - Zero ou um ("gananciosos"), semelhante a {0,1} {N} - Exatamente n vezes ("avarento") {N,} - Às vezes, pelo menos n ("avarento") {N, m} - Pelo menos n mas não mais do que m vezes ("avarento") *? - Zero ou mais ("non-greedy"), semelhante a {0,}? +? - Uma ou mais ("non-greedy"), semelhante a {1}? ? - Zero ou um ("non-greedy"), semelhante a {0,1}? {N}? - Exatamente n vezes ("non-greedy") {N,}? - Às vezes, pelo menos n ("non-greedy") {M, n}? - Pelo menos n mas não mais do que m vezes ("non-greedy") Assim, os dígitos em chaves do forma, {M, n}, especificar o número mínimo de vezes para combinar com o item n eo máximo m. A forma {N} é equivalente a {N, n} e corresponde exatamente n tempos. A forma {N,} fósforos ou mais vezes. Não há limite ao tamanho da n ou m, mas grande número será mastigar mais memória e retardar execução. Assim, os dígitos em chaves do formulário, {N, m}, especificar o número mínimo de vezes para combinar com o item n eo máximo m. A forma {N} é equivalente a {N, n} e corresponde exatamente n tempos. A forma {N,} fósforos ou mais vezes. Não há limite ao tamanho da n ou m, mas um grande número vai mastigar mais memória e retardar execução.
Se uma chaveta ocorre em qualquer outro contexto, ela é tratada como uma personagem regular.
70
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
Exemplos: r Contagem .* ß- seqüências de partidas como 'Contra' countelkjdflkj9r, e "Countr ' contagem. + r - seqüências de jogos como 'Contra' countelkjdflkj9r, mas não "Countr ' contagem.? r - seqüências de jogos como "Countar ',' contador ' e "Countr ' mas não "Countelkj9r ' r {2} counte - seqüência de partidas "Counteer ' counte {2} r - seqüências de jogos como "Counteer ',' counteeer ',' counteeer ' etc r {2,3} counte - seqüências de jogos como "Counteer, ou "Counteeer ' mas não "Counteeeer '
Uma pequena explanação sobre a "ganância". "Greedy" leva o maior número possível ", não gananciosos " toma o mínimo possível. Por exemplo, '+ B' e '* B' aplicada à corda "Abbbbc ' retorno "Bbbb", 'B +? retorna 'B', 'B *? retorna uma string vazia, 'B {2,3}? retorna 'BB', 'B {2,3}' retorna 'BBB'.
Metacaracteres - Alternativas Você pode especificar uma série de alternativas para um padrão de uso "|" separá-los, de modo que bat | | pouco bot irá corresponder a qualquer dos "Bit", "Bat", ou "Bot" na seqüência alvo como seria "B (i | a | o) t)". A primeira alternativa inclui tudo, desde a última pat
delimitador tern ("(", "[" Ou o início do padrão) até o primeiro "|", E a última alternativa contém tudo, desde a última "|" para o próximo padrão delimiter. Por este motivo, é comum a prática de incluir alternativas entre parênteses, a minimizar a confusão sobre onde começam e terminam. Alternativas são julgados a partir da esquerda para a direita, para a primeira alternativa encontrada para que o expressão inteira partidas, é aquele que é escolhido. Isto significa que as alternativas não são necessariamente gananciosos. Por exemplo: quando a correspondência rou | goleada contra "Routine ", apenas o "Rou" parte irá corresponder, como é que a primeira alternativa julgado, e com sucesso corresponde a seqüência alvo (isto pode não parecer importante, mas é imimportante quando você está capturando texto correspondente usando parênteses). Também lembro que "|" é interpretado como um literal entre colchetes, por isso, se você escrever [Bit | morcego | bot]
você é realmente apenas a correspondência [Biao |].
oelektronika - Soluções de software e hardware para o mundo embutido
71
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente Metacaracteres - Subexpressões
O bracketing construir ( ... ) também pode ser usado para definir regular subexpressões. Subexpressões estão contados com base na esquerda para a direita do seu openção entre parênteses. subexpressão Primeiro tem o número '1 '.
Exemplos: (Int) {8,10} seqüências de jogos que contenham 8, 9 ou 10 instâncias do 'int' routi ([0-9] | a +) e "Routi0e 'corresponde a' routi1e ',' rotina ',' routinne,
"Routinnne 'etc
Metacaracteres - Referências Anteriores
Metacaracteres \ 1 através \ 9 são interpretadas como referências anteriores. \ PREVI-partidas previamente combinados subexpressão #.
Exemplos: (.) \ 1 + 'Aaaa' partidas 'cc'. (. +) \ 'Abab "1 + jogos e '123123' (['"]?)( \ D +) \ 1 jogos "13" (Entre aspas), ou '4 ' (Entre aspas simples) ou 77 (Sem aspas) etc
72
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
mikroC PRO para PIC OPÇÕES DE LINHA DE COMANDO Uso: mikroCPIC1618.exe [- [- ]] [ [- ] [] ]] INFILE pode ser de *. C, *. mcl e *. Pld tipo. Os seguintes parâmetros e pouco mais (ver manual) são válidos: - P: MCU para que a compilação será feito. - PARA: Definir oscilador [em MHz]. - SP: Adicionar o diretório para a lista de caminho de pesquisa. - SE: Adicionar o diretório para o # include lista de pesquisa. - N: Os arquivos de saída gerados a caminho do arquivo especificado por filename. - B: Salvar arquivos binários compilados (*. mcl) para 'diretório'. - O: opções de saída diversas. - DBG: Gerar informações de depuração. - L: Verificar e reconstruir novas bibliotecas. - D: Criar todos os arquivos como bibliotecas. - Y: Dynamic link para strings literais. - C: Ligue maiúsculas e minúsculas. - UCD: CID tipo de compilação. Exemplo: mikroCPIC1618.exe-MSF-DBG-p16F887-ES-C-O11111114-fo8 N "C: \ Lcd \ Lcd.mcppi" SP "C: \ Program Files \ Mikroelektronika \ mikroC PRO para PIC \ Defs \ "-SP" C: \ Program Files \ Mikroelektronika \ mikroC PRO para PIC \ usa \ P16 \ "SP" C: \ Lcd \ "Lcd.c" __Lib_Math.mcl " "__Lib_MathDouble.mcl" __Lib_System.mcl "__Lib_Delays.mcl" "__Lib_LcdConsts.mcl" __Lib_Lcd.mcl "
Parâmetros utilizados no exemplo: - MSF: Short Message Format, usado para fins internos de IDE. - DBG: Gerar informações de depuração. - p16F887: MCU 16F887 selecionado. - C: Ligue maiúsculas e minúsculas. - O11111114: Várias opções de saída. - fo10: Defina a frequência do oscilador [em MHz]. - N "C: \ Lcd \ Lcd.mcppi" SP "C: \ Program Files \ Mikroelektronika \ mikroC PRO para PIC \ defs \ ": os arquivos de saída gerados a caminho do arquivo especificado por filename. - -SP "C: \ Program Files \ Mikroelektronika \ mikroC PRO para PIC \ defs \ "adicionar o diretório para a lista de caminho de pesquisa. - SP "C: \ Program Files \ Mikroelektronika \ mikroC PRO para PIC \ usa \":
Adicione o diretório para a lista de caminho de pesquisa. - -SP "C: \ Lcd \" adicionar o diretório para a lista de caminho de pesquisa. - "Lcd.c" __Lib_Math.mcl "__Lib_MathDouble.mcl" "__Lib_System.mcl" __Lib_Delays.mcl "__Lib_LcdConsts.mcl" "__Lib_Lcd.mcl": Especifique arquivos de entrada. Mikroelektronika - Soluções de software e hardware para o mundo embutido
73
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente PROJETOS
A mikroC PRO para PIC organiza as aplicações em projetos, que consiste de um único arquivo de projeto (extensão . Mcppi) e um ou mais arquivos fonte (extensão). mikroC PRO para PIC IDE permite gerenciar múltiplos projetos (consulte Project Manager). Os arquivos de origem podem ser compilados somente se forem parte de um projeto. O arquivo de projeto contém as seguintes informações: - nome do projeto e uma descrição opcional, - dispositivo de destino, - bandeiras dispositivo (config palavra), - relógio do dispositivo, - lista dos arquivos do projeto de origem com os caminhos, - arquivos de cabeçalho (*. h), - arquivos binários (*. mcl) - arquivos de imagem, - outros arquivos. Note-se que o projeto não incluir arquivos da mesma forma como pré-processamento que, consulte Adicionar / Remover arquivos do projeto.
Novo projeto A maneira mais fácil de criar um projeto é por meio do assistente para Novo projeto, gotamenu para baixo Projeto > Novo projeto ou clicando no ícone Novo projeto a partir de Projeto barra de ferramentas.
74
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
Assistente de Novas Etapas do Projeto Comece a criar seu novo projeto, clicando no botão Next:
Primeiro Passo - Selecione o dispositivo da lista de dispositivos de drop-down.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
75
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente Passo dois - Digite o valor da freqüência do oscilador.
Passo três - Especifique o local onde o projeto será salvo.
76
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
Passo Quatro - Acrescentar ao arquivo de projeto projeto se eles estão disponíveis neste momento. Você pode sempre adicionar arquivos de projeto mais tarde o uso do Project Manager.
Passo Cinco - Clique no botão Concluir para criar seu novo projeto.
Tópicos relacionados: Gerente de Projetos, Project Configurações Mikroelektronika - Soluções de software e hardware para o mundo embutido
77
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente PROJETOS
A mikroC PRO para PIC organiza as aplicações em projetos, consistindo de um único arquivo de projeto (extensão . Mcppi) e um ou mais arquivos fonte (extensão). mikroC PRO para PIC IDE permite gerenciar múltiplos projetos (consulte Project Manager). Os arquivos de origem podem ser compilados somente se forem parte de um projeto. O arquivo de projeto contém as seguintes informações: - nome do projeto e uma descrição opcional, - dispositivo de destino, - bandeiras dispositivo (config palavra), - relógio do dispositivo, - lista dos arquivos do projeto de origem com os caminhos, - arquivos de cabeçalho (*. h), - arquivos binários (*. mcl) - arquivos de imagem, - outros arquivos. Note que o projeto não inclui arquivos da mesma forma como pré-processamento faz, consulte Adicionar / Remover arquivos do projeto.
Novo projeto A maneira mais fácil para criar um projeto é por meio do assistente para Novo projeto, gotamenu para baixo Projeto > Novo projeto ou clicando no ícone de New Project Projeto barra de ferramentas.
78
Mikroelektronika - Software e hardware SOLUÇÕES PARA mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
Assistente de Novas Etapas do Projeto Comece a criar seu novo projeto, clicando no botão Next:
Primeiro Passo - Selecione o dispositivo da lista de dispositivos drop-down.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
79
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente Passo dois - Digite o valor da freqüência do oscilador.
Passo três - Especifique o local onde o projeto será salvo.
80
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
Passo Quatro - Acrescentar ao arquivo de projeto projeto se eles estão disponíveis neste momento. Você pode sempre adicionar arquivos de projeto mais tarde o uso do Project Manager.
Passo Cinco - Clique no botão Concluir para criar seu novo projeto:
Mikroelektronika - Soluções de software e hardware para o mundo embutido
81
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente PERSONALIZAÇÃO PROJETOS Edit Project
Você pode alterar as configurações básicas do projeto na janela de configurações do projeto. Você pode chip de mudar, e freqüência de oscilação. Qualquer mudança na configuração do projeto Janela afeta atualmente projeto ativo, então no caso de mais de um projeto estiver aberto, você têm de assegurar que exatamente o projeto desejado é definido como um activo no projecto Manager. Além disso, você pode alterar os bits de configuração do chip selecionado no Edit Projeto janela.
Gerenciando Grupo de Projecto mikroC PRO para PIC IDE covenient fornece a opção que permite vários projetos ser abertas simultaneamente. Se você tem vários projetos sendo conectado em alguns Assim, você pode criar um grupo de projetos. O grupo do projecto pode ser salva, clicando no ícone Save Project Group da a janela do Project Manager. O grupo do projecto pode ser reabriu clicando no
Open Project Icon Group. Todos os dados relevantes sobre o grupo do projeto são armazenadas em o arquivo de grupo de projeto (extensão . Mpgroup)
Adicionar / Remover arquivos do Project O projeto pode conter os seguintes tipos de arquivo:
- arquivos de origem - . H arquivos de cabeçalho - . Mcl binária arquivos - PLD nível de projeto define os arquivos - arquivos de imagem - . Hexadecimal, . Asm e . Lst arquivos, consulte os arquivos de saída. Esses arquivos não podem ser adicionados ou retirados do projeto. - Outros arquivos
82
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
A lista de arquivos fonte relevante é armazenado no arquivo de projeto (extensão . Mcppi). Para adicionar o arquivo de origem para o projeto, clique em Adicionar Arquivo à Project Icon. Cada adicionou arquivo de origem deve ser independente, isto é, deve ter todas as definições necessárias após pré-processamento. Para remover o arquivo (s) do projeto, clique no botão Remover Arquivo do Project Icon.
Nível do projeto define: Projeto Nível Define (. PLD) arquivos também podem ser adicionados ao projeto. Projeto define nível arquivos permitem que você tenha define que são visíveis em todos os arquivos de origem no projeto. Um arquivo deve conter uma definição de cada linha da seguinte forma: [= []] [= []]
Define um símbolo macro nomeada. Para especificar um valor, use = Valor. Se = Valor é omitido, 1 será adotado. Não digitar caracteres espaço em branco imediatamente antes da "=". Se um caractere de espaço em branco é inserido imediatamente após a "=", A macro é definido como zero token. Esta opção pode ser especificada repetidamente. Cada aparecimento de símbolo será substituído pelo valor antes da compilação. Existem dois níveis de projeto pré-define. Veja em nível de projeto predefinido define Nota: Para inclusão dos arquivos de cabeçalho (extensão . H), use o direção pré-processador tiva # Include. Veja arquivo de inclusão para mais informações. Tópicos relacionados: Gerente de Projetos, Project Settings, Edit Project
www.mecatronicadegaragem.blogspot.com Mikroelektronika - Soluções de software e hardware para o mundo embutido
83
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC
Meio Ambiente Arquivos de origem
Arquivos de origem contendo o código C deve ter a extensão. A lista de arquivos de origem relevantes para a aplicação é armazenado no arquivo de projeto com extensão mcppi., juntamente com
outras informações de projeto. Você pode compilar arquivos de origem somente se eles são parte do projeto. Use a diretiva de pré-processamento # Include para incluir arquivos de cabeçalho com a extensão . H. Não confie na pré-processador para incluir outros arquivos de origem de cabeçalhosconsulte Adicionar / Remover arquivos do projeto para obter mais informações.
Gerenciando arquivos de origem Criar novo arquivo de origem Para criar um novo arquivo de origem, faça o seguinte: 1. Selecione Arquivo > Nova Unidade a partir do menu drop-down, ou pressione Ctrl + N, ou clique no Novo Ícone do
Arquivo da Barra de Ferramentas.
arquivo
2. Uma nova guia será aberta. Este é um arquivo de origem novo. Selecione Arquivo > Guardar da drop-down menu, ou pressione Ctrl + S, ou clique no botão Save a partir do arquivo File Icon Barra de ferramentas e nomeá-lo como quiser. Se você usar o novo assistente de projeto, um arquivo de origem vazio, o nome do projeto com extensão, será criado automaticamente. A mikroC PRO para PIC não requer que você ter um arquivo de origem o mesmo nome que o projeto, é só uma questão de conveniência.
Abrindo um arquivo existente 1. Selecione Arquivo > Abrir a partir do menu drop-down, ou imprensa Ctrl + S, ou clique no botão Abrir File Icon Arquivo da Barra de Ferramentas. Em Abrir caixa de diálogo Procurar para o local do arquivo que deseja abrir, selecione-o e clique no botão Abrir. 2. Os selecionados arquivo é exibido em sua própria guia. Se o arquivo selecionado já está aberto, a sua guia Editor atual ficará ativo.
www.mecatronicadegaragem.blogspot.com
Imprimindo um arquivo aberto
1. Certifique-se que a janela que contém o arquivo que você deseja imprimir está ativo. 2. Selecione Arquivo > Imprimir da drop-down menu, ou pressione Ctrl + P. 3. Na janela de visualização de impressão, definir um layout desejado no documento e clique no botão OK. O arquivo será impresso na impressora selecionada.
84
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
Salvando arquivo 1. Certifique-se que a janela que contém o arquivo que você deseja salvar está ativo. 2. Selecione Arquivo > Guardar a partir do menu drop-down, ou pressione Ctrl + S, ou clique no botão Salvar File Icon
Arquivo da Barra de Ferramentas.
Salvando arquivo com um nome diferente 1. Certifique-se que o janela contendo o arquivo que você deseja salvar está ativo. 2. Selecione Arquivo > Salvar como a partir do menu drop-down. O diálogo Novo nome do arquivo ser exibido. 3. Na caixa de diálogo, navegue até a pasta onde você deseja salvar o arquivo. 4. No campo Nome do arquivo, modificar o nome do arquivo que você deseja salvar. 5. Clique no botão Salvar.
A fechar o ficheiro 1. Certifique-se que a guia que contém o arquivo que você deseja fechar é a aba ativa. 2. Selecione Arquivo > Fechar a partir do menu drop-down, ou para a direita, clique na guia do arquivo que que deseja fechar e selecione Fechar opção no menu de contexto. 3. Se o arquivo foi alterado desde que foi salvo pela última vez, você será solicitado a salvar suas alterações. Tópicos Relacionados: Menu Arquivo, Arquivo Barra, Gerente de Projetos, Project Settings,
Mikroelektronika - Soluções de software e hardware para o mundo embutido
85
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente CLEAN Pasta do projeto
Este menu dá-lhe a opção de escolher quais arquivos do seu projeto atual que você quer para excluir. Os arquivos marcados em negrito podem ser facilmente recriadas através da construção de um projeto. Outros arquivos devem ser marcada para exclusão apenas com um grande cuidado, porque IDE não pode recuperá-los.
Temas relacionados: Personalizando Projetos
86
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
COMPILAÇÃO Quando você criou o projeto e escrito o código fonte, é tempo para compilar ele. Selecione Projeto > Construir a partir do menu drop-down, ou clique no
a partir de
ícone Build Barra de ferramentas de projeto. Se mais mais do que um projeto está aberto, você pode compilar todos abertos projetos selecionando Projeto > Build All a partir do menu drop-down, ou clique no botão Construir Todos Icon
do Projeto Toolbar.
barra de progresso será exibida para informá-lo sobre o status de compilação. Se não houver alguns erros, você será notificado na janela de erro. Se não forem encontrados erros, o mikroC PRO para PIC irá gerar arquivos de saída.
Arquivos de saída Após a compilação bem-sucedida, o mikroC PRO para PIC irá gerar arquivos de saída em o projeto pasta (pasta que contém o arquivo de projeto . Mcppi). Arquivos de saída são resumidos na tabela abaixo:
Assembléia Ver Depois de compilar o programa no mikroC PRO para PIC, você pode clicar no botão Exibir Assembléia ícone ou selecione Projeto > Exibir Assembléia a partir do menu drop-down para analisar o código assembly gerado (. asm arquivo) em uma janela nova aba. Assembléia é legível com nomes simbólicos.
Tópicos relacionados: Menu Project, Project Barra de ferramentas, janela de erro, Gerente de Projeto, ProConfigurações ject Mi
www.mecatronicadegaragem.blogspot.com
kroelektronika - Soluções de software e hardware para o mundo embutido
87
Formato Intel HEX Binária
Descrição
Tipo de A i
hex Intel registros estilo. Use esse arquivo para o . Hexa programa PIC MCU mikro Compilado Biblioteca. distribuição binária do aplicativo que pode ser incluída em outros projetos.
. Mcl
. Lst Lista de Arquivos Resumo dos PIC colocação de memória: a instrução d i dlegíveis com i nomes ó lsimbólicos, Homem montagem . Asm Montador de extraídos a partir da lista de arquivos. i
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente MENSAGENS DE ERRO Mensagens de erro do compilador: - Erro de sintaxe: Esperado [% S] mas [% S] encontrados - Elemento de matriz não pode ser função - A função não pode matriz de retorno - Classe de armazenamento inconsistentes - Tipo inconsistentes - [% S] tag redefiniu [% S] - Ilegal typecast [% S] [% s] - "% S" identificador não é válido - Declaração inválido - A expressão constante necessária - Erro interno [% S] - Há muitos parâmetros reais - Não parâmetros suficientes. - Expressão inválida - Identificador esperado, mas [% S] encontrados - Operador [% S] não é aplicável a estes operandos [% S] - Atribuir a não lvalue [% S] - Não é possível lançar [% S] para [% S] - Não é possível atribuir [% S] para [% S] - Lvalue necessária - Ponteiro necessária - O argumento é fora do alcance - Identificador não declarado [% S] na expressão - Too inicializadores muitos - Não é possível estabelecer essa taxa de transmissão no [% S] MHz de clock - Estouro de pilha - Operador inválido [% S] - Esperado variável, mas constante [% S] encontrados - Possibilidade constante, mas [% S] encontrados - [% S] não pode ser usado fora de um loop - Tipo desconhecido [% S] - Variável [% S] é redeclarado - Identificador não declarado [% S] - Limite a produção aumentou 2K palavras - [% S] já foi declarado [% S] - Tipo incompatível: esperado [% S], mas [% S] encontrados - Arquivo [% S] não encontrado [% S] - Não há espaço em memória RAM suficiente para todas as variáveis - Não há espaço suficiente ROM - Tipo inválido em Array - Divisão por zero - Tipos incompatíveis: [% S] [% s] - Excesso de caracteres
88
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
- Montador de instruções [% S] não foi encontrado - Nome do projeto deve ser especificado - Opção de linha de comando desconhecido: [% S] - Extensão de ficheiro em falta: [% S] - Ruim para o argumento: [% S] - Preprocessor encerrado com código de erro [% S] - Endereço Bad absoluta [% S] - Recursão ou cross-convocação de [% S] - Reentrância não é permitido: função [% s] chamado a partir de dois segmentos - Nenhum arquivo especificado Parâmetro - dispositivo ausente (por exemplo, P16F ...) - Seqüência de parâmetro inválido - Nome do projeto deve ser definido - Especificador necessário - [% S] não encontrado [% S] - Índice fora dos limites - Dimensão da matriz deve ser maior que 0 - Expressão Const esperado - Const inteiro esperado - Recursão em definição - Array corrompido - Argumentos não pode ser do tipo void - Argumentos não pode ter specificator memória explícita - Classe de armazenamento Bad - Ponteiro para a função exigida - Função necessária - Conversão ilegal ponteiro para casal - Tipo Integer necessário - Os membros não podem ter especificador de memória - Os membros não pode ser do tipo bit ou sbit - Too inicializadores muitos - Too inicializadores muitos subaggregate - Já usado [% S] - Ilegal expressão com o vazio - O endereço deve ser maior que 0 - [% S] Identificador redefiniu - Anulação do usuário - Expressão deve ser maior que 0 - Declarator inválido esperado "(" ou identificador - Nome typdef redefinidos: [% S] - Declarator erro - Lista qualificador Specifer / esperado - [% S] já utilizado - ILevel só pode ser utilizada com as rotinas de interrupção de serviço -; Esperado, mas [% S] encontrados Mikroelektronika - Soluções de software e hardware para o mundo embutido
89
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente - Expectativa "{" - [% S] Identificador redefiniu - "(" esperado, mas [% S] encontrados - ")" esperado, mas [% S] encontrados - "Case" fora do switch - "" esperado, mas [% S] encontrados - "Default" rótulo de alternar - Expressão do switch deve avaliar o tipo integral - Enquanto esperava, mas [% S] encontrados - Funções void não pode retornar valores - "Continue" fora do circuito - Código Inacessível - Etiqueta redefiniu - Tipo de vazio na expressão - Too muitos chars - tipo não resolvida - Matrizes de objetos contendo matrizes de tamanho zero são ilegais - Invalid enumerador - ILevel só pode ser utilizada com as rotinas de interrupção de serviço - Valor iLevel deve ser integral constante - Fora da faixa iLevel "0 .. 4" - "}" esperado [% S] encontrados - ")" esperado, mas [% S] encontrados - "Quebrar" fora do laço ou switch - Esvazie char - A inexistência de campo [% S] - Ilegal representação char: [% S] - Inicializador de erro de sintaxe: array multidimensional faltando subscrito - Too inicializadores muitos subaggregate - Pelo menos um caminho de pesquisa deve ser especificado - Não existe memória RAM suficiente para a pilha de chamadas - Demo Limite - Parâmetro [% S] não deve ser do tipo bit ou sbit - A função não deve ter valor de retorno do tipo bit ou sbit
90
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
Mensagens de advertência do compilador: - Ruim ou falta de parâmetro FOSC. 8MHz valor padrão usado - caminho de pesquisa especificado não existe: [% S] - Especificados inclua o caminho não existe: [% S] - O resultado não é definido em função: [% S] - Inicialização de objeto externo [% S] - conversão ponteiro Suspicious - A conversão implícita do ponteiro para int - linha pragma Desconhecido ignorado: [% S] - A conversão implícita de int para ptr - Gerado taxa de transmissão é [% S] bps (= erro [% S] por cento) - modelo de memória Desconhecido [% S], o modelo usado em vez de memória pequeno - bit IRP deve ser definida manualmente para acesso indirecto a [% S] variável - Variável [% S] tenha sido declarada, mas não utilizado " - Ilegal tipo de arquivo: [% S]
Mensagens de erro vinculador: - Redefinição das [% S] já definido no [% S] - principal função não é definida - rotina do sistema não é encontrado para inicialização de: [% S] - definição agregada Bad [% S] - Não Resolvidos extern [% S] - Bad função absoluta endereço [% S] - RAM insuficiente [% S]
Mikroelektronika - Soluções de software e hardware para o mundo embutido
91
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 2
mikroC PRO para PIC
Meio Ambiente Visão geral do software simulador
A fonte de nível de software Simulator é um componente integrante do mikroC PRO para PIC ambiente. Ele é projetado para simular operações do PIC e MCUs auxiliar os usuários na depuração de código C escrito para esses dispositivos. Após a conclusão de escrever o seu programa, escolha Lançamento tipo de compilação no projeto janela de configurações:
Depois de ter compilado com sucesso o seu projeto, você pode executar o Software Simulator selecionando Executar > Iniciar o depurador a partir do menu drop-down, ou clicando em o ícone Iniciar o depurador
a partir da barra de ferramentas do depurador. Iniciando o Sim Software
ulador torna mais opções disponíveis: Step Into, Step Over, Step Out, Run to Cursor, etc linha que está a ser executada é a cor em destaque (azul por padrão). Nota: O Simulador de Software simula o fluxo do programa e execução de instruções de linhas de produção, mas não pode inteiramente PIC emular o comportamento do dispositivo, ou seja, não atualização temporizadores, sinalizadores de interrupção, etc
92
Mikroelektroni ka - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
Breakpoints Janela
A janela de Breakpoints gerencia a lista de atualmente definido pontos de interrupção no projeto. Doubleclicking o ponto de interrupção pretendido causará cursor para navegar para o corresponding local no código-fonte.
Janela de Inspeção O Software Simulador de ver da janela é o principal software janela Simulator que lhe permite monitorar itens de programa ao simular o seu programa. Para mostrar a Janela de Inspeção, selecione Ver > Debug Windows > Assista no menu drop-down menu. O relógio apresenta janela de variáveis e registradores do MCU, juntamente com seus endereços e valores. Há duas maneiras de adicionar variáveis / registar-se para a lista de observação: pelo seu verdadeiro nome (nome da variável no código "C"). Basta selecionar desejado variable/regIster de Selecione variável da lista menu drop-down e clique no botão Adicionar . pelo seu nome de identificação (Nome da variável de montagem). Simplesmente digite o nome do ID que variável / registo que pretende exibir em Pesquisar na variável assemby nome caixa e clique no botão Adicionar
.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
93
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente
As variáveis também podem ser retirados a janela Watch, basta selecionar a variável que você deseja remover e clique no botão Remover. Adicionar Tudo Button Botão Remover tudo
agrega todas as variáveis. remove todas as variáveis.
Você também pode expandir / recolher variáveis complexas, ou seja, variáveis de tipo struct, cordas ... Os valores são atualizados à medida que avançar a simulação. itens alterados recentemente são de cor vermelha.
Duplo clicando em uma variável ou clicando no botão Propriedades abre Edit Value janela na qual você pode atribuir um novo valor para o selecionado variável / register. Além disso, você pode escolher o formato da variável / register representação entre decimal, hexadecimal, float, binária ou de caracteres. Todas as representações, exceto float são assinados por padrão. Para a representação assinada clique na caixa de seleção ao lado o Assinado etiqueta.
94
Mikroelektronika - Software e hardware SOLUÇÕES PARA mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
O valor de um item também pode ser alterada pelo campo item clicando duas vezes o valor e digitar o novo valor diretamente. .
Exibir janela RAM Depurador Ver RAM janela está disponível a partir do menu drop-down, Ver > Depurar Windows > Ver RAM. A Janela de RAM Vista exibe o mapa de memória RAM PIC, com mudou recentemente itens de cor vermelha.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
95
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente Cronômetro Janela
O Software Simulador de Cronômetro janela está disponível a partir do menu drop-down, Ver > Debug Windows > Cronômetro.
A janela exibe um cronômetro contagem atual de ciclos de tempo desde a última Soft ação Simulator ware. Cronômetro mede o tempo de execução (número de ciclos) partir do momento em Software Simulator já começou e pode ser redefinido a qualquer momento. Delta representa o número de ciclos entre as linhas de ação onde o Software Simulador começou e terminou. Nota: O usuário pode alterar o relógio na janela cronômetro, que será recalculadoOs valores finais para a última frequência especificada. Mudando o relógio no cronômetro Janela não afeta as configurações de projeto real - apenas fornece uma simulação.
96
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
SIMULADOR DE OPÇÕES DE SOFTWARE Nome
Descrição
Função Key
Início Depurador
Simulador de Software Iniciar.
[F9]
Executar / Pausar Parar d
Executar ou pausar Software Simulator.
[F6]
Depurador
Stop Simulador de Software.
Alternar ponto de interrupção na posição do cursor atual posição. Para visualizar todos os pontos de Breakpoints interrupção, selecione Executar > Veja os pontos de interrupção no menu d d todas as instruções entre os actuais Corra para cur- Executar sor instrução e posição do cursor. Toggle
Step Into
Step Over Step Out
Execute o atual C (simples ou multi-ciclo) instrução, e então pare. Se a instrução é um rouchamada nicotina, entra na rotina e parar na primeira iExecute t ã o atuali C t (simples à h d ou multi-ciclo) instrução, e então pare. Executar todas as demais instruções do rotina atual, o retorno e depois parar.
Barra de
[Ctrl + F2]
[F5]
[F4]
[F7]
[F8] [Ctrl + F8]
Tópicos Relacionados: Executar Menu Debug Barra
Mikroelektronika - Soluções de software e hardware para o mundo embutido
97
CAPÍTULO 2
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Meio Ambiente CRIANDO NOVOS BIBLIOTECA
mikroC PRO para PIC permite que você crie suas próprias bibliotecas. A fim de criar um biblioteca em mikroC PRO para PIC siga os passos abaixo: 1. Criar um novo arquivo de origem C, consulte Gerenciando arquivos de origem 2. Salve o arquivo em uma das subpastas da pasta do compilador Usos: Letra_da_unidade: PIC \ usa \ P16 Letra_da_unidade: PIC \ usa \ P18
\ Program Files \ Mikroelektronika \ mikroC PRO para \ \ Program Files \ Mikroelektronika \ mikroC PRO para \
Se você estiver criando biblioteca para família de microcontroladores PIC16 o arquivo deve ser salvo na pasta P16. Se você está criando biblioteca para a família PIC18 MCUs o arquivo deve ser salvo em fodler P18. Se você estiver criando biblioteca para famílias PIC16 e PIC18 MCUs o arquivo deve ser salvo em ambas as pastas. 3. Escreva um código para a sua biblioteca e salvá-lo.
4. Adicionar __Lib_Example arquivo em algum projeto, consulte Project Manager. Recompile o projeto. Se você quiser usar esta biblioteca para todos os MCUs, então você deve ir para Ferramentas > Opções > Saída configurações e verificar Construir todos os arquivos como a biblioteca caixa. Isto irá construir bibliotecas em uma forma comum que irá funcionar com todos os MCUs. Se isso caixa não estiver marcada, então biblioteca será construída para MCU selecionado. Tenha em mente que o compilador apresentará um erro se uma biblioteca construída de MCU específico é utilizadas para outra. 5. Compilado arquivo __Lib_Example.mcl deve aparecem em ... \ mikroC PRO para PIC \ usa \ pasta. 6. Abra o arquivo de definição para o MCU que você deseja usar. Este arquivo é colocado na pasta compilador Defs: Letra_da_unidade: \ Program Files \ Mikroelektronika \ mikroC PRO para PIC \ Defs \
e é chamado MCU_NAME.mlk, por exemplo 16F887.mlk 7. Adicione o segmento de código a seguir nó da definição arquivo (arquivo de definição está no formato XML): Example_Library Alias> __Lib_Example File> REGULAR Tipo>
98
www.mecatronicadegaragem.blogspot.com Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 2
Meio Ambiente
LIB>
8. Adicionar Biblioteca para mlk arquivo para cada MCU que você deseja usar com sua biblioteca. 9. Clique no botão Atualizar no Gerenciador de bibliotecas 10. Example_Library deve aparecer na janela do gerenciador de biblioteca.
Biblioteca de várias versões
Biblioteca Alias representa o nome original que está vinculada a Biblioteca correspondente . Mcl arquivo. Por exemplo biblioteca UART para 16F887 é diferente da UART biblioteca para 18F4520 MCU. Assim, duas diferentes versões UART Biblioteca foram feitas, consulte mlk arquivos para estes dois MCUs. Note-se que estas duas bibliotecas têm a mesma Biblioteca Alias (UART) em ambos os mlk arquivos. Esta abordagem permite que você tenha uma representação idêntica de UART biblioteca para os MCUs em Library Manager. Tópicos relacionados: Library Manager, Gerente de Projetos, Gerenciamento de arquivos de origem
Mikroelektronika - Soluções de software e hardware para o mundo embutido
99
CAPÍTULO 2
Meio Ambiente
100
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO
3
MIKROICD (IN-CIRCUIT Depurador) mikroICD é um instrumento extremamente eficaz para depuração em Tempo-Real em nível de hardware. CID depurador permite que você execute um mikroC PRO para PIC programa em um host PIC valores das variáveis do microcontrolador e ver, Registros de Função Especial (SFR), notary e EEPROM conforme o programa está sendo executado.
101
CAPÍTULO 3
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
mikroICD Passo n º 1
Se você tiver de hardware e software adequados para o uso mikroICD, então, a comclusão de escrever seu programa, você terá que escolher CID Debug tipo de compilação.
Passo n º 2 Você pode executar o mikroICD selecionando Executar > Depurar a partir do menu drop-down, ou clicando em Debug Icon . Iniciando o depurador faz mais opções disponíveis: Step Into, Step Over, Run to Cursor, etc linha que está a ser executada é a cores de alta iluminados (azul por padrão). Há também a notificação sobre a execução do programa e pode ser encontrada em Janela de Inspeção (barra de status amarela). Note que algumas funções recebem tempo para executar, de modo execução do programa é indicado no Janela de Inspeção.
102
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Mikroelektronika - Soluções de software e hardware para o mundo embutido
CAPÍTULO 3
mikroICD
103
CAPÍTULO 3
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
mikroICD mikroICD Debugger Options Nome
Função chave
Depurar
Depurador Iniciar.
[F9]
Executar / Pausar d
Executar ou pausar Debugger.
[F6]
Toggle
do cursorção. Para visualizar todos os pontos de interrupção, selecione Executar> Ver os pontos de interrupção no menu d d todas as instruções entre a corrente Executar
Breakpoints
Executar até o cursor Step Into
Step Over
104
Descrição
Alternar ponto de interrupção na posição atual
instrução e posição do cursor. Execute o atual C (simples ou multi-ciclo) instrução, e então pare. Se a instrução é uma rotina chamada, introduza a rotina e parar na primeira insção seguinte a chamada. Execute o atual C (simples ou multi-ciclo) instrução, e então pare. Se a instrução é um rouchamada tine, ignorá-lo e parar na primeira instrução ó PICh Flush d atual. Todas as variáveis RAM
RAM Flush
valores será alterado de acordo com os valores de
Desmontagem Ver
Alternar entre a desmontagem ea fonte de C vista.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
[F5]
[F4]
[F7]
[F8]
N/A
[Alt + D]
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 3
mikroICD
Exemplos mikroICD Debugger Aqui está um passo a passo Exemplo Debugger mikroICD. Passo n º 1 Primeiro você tem que escrever um programa. Nós iremos mostrar como funciona mikroICD usando este exemplo: / / Conexões do módulo do LCD LCD_RS sbit na RB4_bit; LCD_EN sbit na RB5_bit; LCD_D4 sbit na RB0_bit; LCD_D5 sbit na RB1_bit; LCD_D6 sbit na RB2_bit; sbit LCD_D7 na RB3_bit; LCD_RS_Direction sbit na TRISB4_bit; LCD_EN_Direction sbit na TRISB5_bit; LCD_D4_Direction sbit na TRISB0_bit; sbit LCD_D5_Direction na TRISB1_bit; LCD_D6_Direction sbit na TRISB2_bit; LCD_D7_Direction sbit na TRISB3_bit; / / Fim conexões do módulo do LCD char texto [17] = "mikroElektronika"; i char; void main () { PORTB = 0; TRISB = 0; ANSEL = 0; ANSELH = 0; Lcd_Init (); Lcd_Cmd (_LCD_CLEAR); Lcd_Cmd (_LCD_CURSOR_OFF); for (i = 1; i <17; i + +) { Lcd_Chr (1, i, o texto [i-1]); } }
Mikroelektronika - Soluções de software e hardware para o mundo embutido
105
CAPÍTULO 3
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
mikroICD Passo n º 2
Após a compilação bem-sucedida e pressione programação PIC F9 para iniciar mikroICD. Após mikroICD inicialização linha ativa azul deve aparecer:
Passo n º 3 Vamos depurar linha por linha do programa. Pressionando F8 estamos executando código linha por linha. É recomendável que o usuário não usa Step Into [F7] e Step Over [F8] mais Atrasos rotinas e rotinas contendo os atrasos. Ao invés disso use Run para o cursor [F4] e funções Breakpoints. Todas as alterações são lidos a partir PIC e carregado na Janela de Inspeção. Note-se que PORTB, TRISB, Ansel e ANSELH mudou seus valores. 255-0.
106
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 3
mikroICD
Passo n º 4 Step Into [F7] e Step Over [F8] são mikroICD funções depurador são usados no modo de pisar. Há também em Tempo Real modo suportado pelo mikroICD. Funções que são usados em Tempo-Real modo são Run / Pause Debugger [F6] e correr para o cursor [F4]. Pressionando F4 vai para a linha selecionada pelo usuário. Utilizador apenas tem que seleccionar a linha com cursor e pressione F4, eo código será executado até que a linha selecionada é atingida.
Passo n º 5 Run (Pausa) Debugger [F6] e Breakpoints Toggle [F5] são mikroICD funções depurador que são usados no modo em Tempo Real. Pressionando F5 marcas da linha selecionada pelo usuário para a interrupção. F6 executa o código até o ponto de interrupção é atingido. Depois de alcançar ponto de interrupção depurador pára. Aqui no nosso exemplo, vamos usar pontos de interrupção para a escrita "mikroElektronika" no LCD char char. Ponto de interrupção é definido no Lcd_Chr eo programa irá parar cada vez que essa função seja alcançado. Depois de alcançar ponto de interrupção que deve pressionar F6 novamente para continuar a execução do programa.
Mikro elektr onika Soluç ões de softw are e hardw are para o mund o
embutido
www.mecatronicadegaragem.blogspot.com
107
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 3
mikroC PRO para PIC
mikroICD
Breakpoints foi separada em dois grupos. Há hardware e software pontos de quebra. rápida interrupção de hardware são colocados em PIC e eles fornecem depuração. Número de pontos de interrupção de hardware é limitado (1 para P16 e 1 ou 3 para o P18). Se todos brekpoints hardware são usados, os pontos de interrupção em seguida, que serão utilizados são softwares ponto de interrupção. Os pontos de interrupção são colocados dentro mikroICD, e eles simulam hardbreakpoints ware. interrupção de software é muito mais lento do que hardware breakpontos. Esta diferença entre as diferenças de hardware e software não são visíveis mikroICD em software, mas os seus horários diferentes são bastante notável, por isso é importante saber que há dois tipos de pontos de interrupção.
108
Mikroelektroni ka - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 3
mikroICD
mikroICD (In-Circuit Debugger) Visão Breakpoints Janela A janela de Breakpoints gerencia a lista de pontos de interrupção definidos atualmente no projeto. Doubleclicking o ponto de interrupção pretendido causará cursor para navegar para o corresponding local no código-fonte.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
109
CAPÍTULO 3
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
mikroICD Janela de Inspeção
Depurador de ver da janela é a janela principal do depurador que permite monitor itens do programa, enquanto executar o programa. Para mostrar a janela de inspeção, selecione Ver > Debug Windows > Janela de Inspeção a partir do menu drop-down. O relógio apresenta janela de variáveis e registradores do PIC, com os respectivos endereços e valores. Os valores são atualizados à medida que avançar a simulação. Use o drop-down menu para adicionar e remover os itens que você deseja monitorar. Recentemente mudou itens são de cor vermelha.
110
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 3
mikroICD
Duplo clicar em um item abre a Edit Value janela na qual você pode atribuir um novo valor para a variável selecionada / register. Além disso, você pode mudar a visão em hexadecimal, binário, char, ou decimal para o item selecionado.
EEPROM Janela de Inspeção mikroICD EEPROM Watch Janela está disponível a partir do menu drop-down, Ver > Debug Windows > Ver EEPROM. O EEPROM janela Watch mostra os valores atuais inscritos na PIC interna Memória EEPROM. Existem dois botões de ação relativa EEPROM Watch ganhaDow - Escreve EEPROM e Leia EEPROM. Escreve EEPROM grava dados de EEPROM janela Watch em memória EEPROM interna do PIC. Leia EEPROM lê dados de PIC de memória EEPROM interna e carrega-lo na janela de EEPROM.
Mikroelektronika - SOFTWARE HARDWARE E SOLUÇÕES PARA mundo embutido
111
CAPÍTULO 3
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
mikroICD Código Janela de Inspeção
mikroICD Código Janela de Inspeção está disponível no menu drop-down menu, Ver > Debug Windows > Exibir Código.
O Código de janela de inspeção de código mostra (código hexadecimal) escrito em PIC. Não há ação botão sobre Código janela Watch - Código de leitura. Código de leitura lê o código de PIC e carrega-lo em View Code Window. Além disso, você pode definir um escopo de endereço no qual o código hexadecimal será lido.
112
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 3
mikroICD
Ver Memória RAM Depurador Ver RAM janela está disponível a partir do menu drop-down, Ver > Depurar Windows > Ver RAM. A RAM Windows Vista exibe o mapa de memória RAM PIC, com mudou recentemente itens de cor vermelha.
Erros comuns Tentando PIC mikroICD programa enquanto estiver ativa. Tentando depurar Lançamento construir versão Type do programa. Tentando depurar o código do programa que mudou não foi compilado e pro gramada em PIC. Tentando selecionar linha que é vazia de Run para o cursor [F4] e Breakpoints Toggle [F5] funções. Tentando depurar PIC com mikroICD enquanto Watch Dog Timer está habilitado. Tentando depurar PIC com mikroICD enquanto Power Up Timer é habilitado. Não é possível forçar o Código de Proteção ao tentar depurar PIC com mikroICD. Tentando depurar PIC com mikroICD com resistores pull-up definido como ON RB6 e RB7. Para corrigir mikroICD depuração não usa pull-ups.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
113
CAPÍTULO 3
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
mikroICD MIKROICD ADVANCED BREAKPOINTS
mikroICD prevê a possibilidade de utilizar os pontos de interrupção avançada. Avançado Breakpoints podem ser usados com PIC18 MCUs e PIC18FJ. Para habilitar avançada Breakpoints definir a opção Advanced Breakpoints dentro da janela Watch:
Para configurar o Advanced Breakpoints, iniciar mikroICD [F9] e selecione Ver > Depurar Windows > Advanced Breakpoints opção no menu drop-down ou utilize [Ctrl + Shift + A] atalho.
Nota: Quando Advanced Breakpoints são habilitados mikroICD opera em Tempo-Real modo, por isso vai apoiar apenas no seguinte conjunto de comandos: Iniciar o depurador [F9], Execute o depurador Pausa / [F6] e Parar Debugger [Ctrl + F2]. Uma vez que o avançado Ponto de interrupção é atingido, o recurso Advanced Breakpoints podem ser desativadas e mikroICD depuração pode ser continuado com conjunto completo de comandos. Se for necessário, Advanced Breakepoints pode ser reativado sem reiniciar mikroICD. Nota: Número de pontos de interrupção avançada é igual ao número de Hardware-break pontos e que depende de MCU utilizado.
114
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 3
mikroICD
Programa de Ruptura de Memória Memória do Programa Break é usado para definir o ponto de interrupção Avançado para específico endereço na memória do programa. Por causa do PIC pipelining exe programa mecanismo de cução pode parar de instruções de um ou dois após o endereço inserido no Endereço de campo. Valor inscrito no Endereço campo deve ser em formato hexagonal. Nota: Quebra de memória do programa pode usar a opção Passcount. O programa de execução irá parar quando o endereço do programa especificado é atingido durante o tempo N-ésima onde N é o número de inscritos no Passcount de campo. Quando alguns avançada Breakpoint interrompe a execução do programa, para todos os contadores passcount avançada Breakpoints será apagado.
Programa de Ruptura de Memória Memória do Programa Break é usado para definir o ponto de interrupção avançada para o específico endereço na memória do programa. Por causa do PIC pipelining exe programa mecanismo de cução pode parar um ou duas instruções após o endereço digitado no endereço de campo. O valor informado no campo de endereço deve ser em formato hexagonal. Nota: Quebra de memória do programa pode usar a opção Passcount. O programa de execução irá parar quando o endereço do programa é especificado chegou o tempo N-ésima onde N é o número de inscritos no Passcount de campo. Quando alguns avançada Breakpoint interrompe a execução do programa, para todos os contadores passcount avançada Breakpoints será apagado.
Arquivo Registre-Break Arquivo Registre-Break pode ser usado para interromper a execução de código quando acesso leitura / gravação para o local específico da memória de dados ocorre. Se Acesso de leitura é selecionado, o Arquivo Registre Igualdade opção pode ser usada para definir o valor correspondente. O programa de execução será interrompido quando o valor lido a partir da localização de memória de dados especificado é igual ao número escrito no Valor de campo. Os valores inscritos no Endereço e Valor campos devem ser em formato hexagonal. Nota: Arquivo Registre-Break também pode usar a opção Passcount da mesma forma como Memória do Programa Break.
www.mecatronicadegaragem.blogspot.com
Mikroelektronika - Soluções de software e hardware para o mundo embutido
115
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 3
mikroC PRO para PIC
mikroICD Emulador de Recursos Evento Breakpoints
Ruptura em Underflow / Stack Overflow: não implementado. Ruptura em Watchdog Timer: não implementado. Ruptura no sono: pausa na instrução SLEEP. instrução SLEEP não será executados. Se você optar por continuar a depuração mikroICD [F6] em seguida, o prógrama de execução terá início a partir da primeira instrução após a instrução SLEEP. Cronômetro Cronômetro usa Breakpoint # 2 e Breakpoint # 3 Como ponto de partida e as condições Stopções. Para usar o cronômetro define estes dois pontos de interrupção e verificar o Habilitar Cronômetro checkbox. opções de cronômetro: Parado na condição de início
Parado em Iniciar Condição (Breakpoint # 2): quando marcada, a execução do programa vai parar na Breakpoint # 2. Caso contrário, Breakpoint # 2 será usado somente para iniciar o cronómetro. Parado em Parar Condição (Breakpoint # 3): quando marcada, a execução do programa vai parar na Breakpoint # 3. Caso contrário, Breakpoint # 3 será usado somente para parar o cronômetro. Reset Cronómetro na Run: quando marcada, o cronômetro será apagada antes continuando a execução do programa e à contagem próximo vai começar do zero. Outrossábio, a contagem próximo terá início a partir do valor anterior Cronómetro
116
Mikroelektroni ka - Softwares e soluções de hardware para Embedded World
www.mecatronicadegaragem.blogspot.com
www.mecatronicadegaragem.blogspot.com
CAPÍTULO
4
mikroC PRO para PIC Especificidades Os tópicos a seguir abordam as especificidades da mikroC PRO compilador para PIC: - Questões ANSI Standard - Globals e constantes predefinidas - Acessando bits individuais - Interrompe - PIC Ponteiros Directivas Linker - Built-in Rotinas - Otimização de Código - Memória especificadores de tipo
117
CAPÍTULO 4
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Especificidade s Problemas ANSI Standard Divergência em relação ao padrão ANSI C - Tentativa declarações não são suportados.
Idioma Exstensions C mikroC PRO para PIC tem conjunto adicional de palavras-chave que não pertencem ao o ANSI Palavras-chave linguagem padrão C: - código - dados - rx - em - sbit - bit - sfr Tópicos relacionados: Palavras-chave, PIC específicas
Globals e constantes predefinidas Para facilitar a programação dos PIC MCUs conformes, o mikroC PRO para PIC implementos uma série de variáveis globais e constantes predefinidas. Todos os PIC Registos SFR e seus pedaços estão implicitamente declarados como variáveis globais. Estes identificadores possuem uma ligação externa, e são visíveis na projeto inteiro. Ao criar um projeto, o mikroC PRO para PIC incluirá uma adequada (*) arquivo da pasta defs, contendo declarações de disponíveis Registos SFR e constantes. Para um conjunto completo de variáveis globais e constantes predefinidas, procure "Defs" na mikroC PRO para PIC pasta de instalação, ou sonda o Assistente de código para letras específicas (Ctrl + Espaço no editor de código).
118
-
E E SOLUÇÕES PARA PARA MUNDIAL
Mikroelektronika - SOFTWARESOFTWAREHARDWAREHARDWARE SOLUTIONSEMBEDDEDEMBEDDED MUNDO
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 4
Especificidad es
nível de projectos predefinidos define Existem quatro níveis pré-projeto define, para qualquer projeto que você faz. Estes define se baseiam em valores que você digitou / editado no projeto atual: -
-
-
Primeiro um é igual ao nome do dispositivo selecionado para o projeto ou seja, se 16F887 é dispositivo selecionado, em seguida, 16F887 token será definida como 1, então ele pode ser usado para compilação condicional: # Ifdef P16F887 ... # Endif
A segunda é __FOSC__ valor da freqüência (em kHz) para os quais o projeto é construído. A terceira é para a identificação mikroC PRO para PIC compilador: # Ifdef __MIKROC_PRO_FOR_PIC__ ... # Endif
um quarto é para identificar a versão de compilação. Por exemplo, se desejar construir uma versão Sion é de 142, o usuário deve colocar isso no seu código: # If __MIKROC_PRO_FOR_PIC_BUILD__ == 142 ... # Endif
O usuário pode definir nível de projeto personalizado define.
Bits Acesso Individual A mikroC PRO para PIC permite que você acesse os bits individuais de variáveis de 8 bits. É também suporta tipos de dados e pouco sbit
Acessar Bits individuais de Variáveis Se você estiver familiarizado com um MCU particular, você pode acessar bits pelo nome: / / Bit Clear Global Interrupt (GIE) GIE_bit = 0;
Além disso, você pode simplesmente usar o seletor de membro direto (.) Com uma variável, seguido por um dos identificadores B0, B1, ... , B7, ou F0, F1, ... F7, com F7 sendo o mais sigpouco significativa: / / 0 em pouco claras registo INTCON INTCON.B0 = 0; / / Bit Conjunto 5 em ADCON0 registo ADCON0.F5 = 1;
119
Mikroelektro nika Software e Soluções de hardware para Embedded World
www.mecatronicadegaragem.blogspot.com
-
119
CAPÍTULO 4
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Especificidade s
Não há necessidade de qualquer declaração especial. Este tipo de acesso seletivo é um característica intrínseca de mikroC PRO para PIC e pode ser usado em qualquer lugar do código. Identifiers B0-B7 não são sensíveis e têm um espaço específico. Você pode sobremontá-los com seus próprios membros B0-B7 dentro de qualquer estrutura dada.
Veja Globals e constantes predefinidas para obter mais informações sobre nomes de registo / bit. Nota: Se visando a portabilidade, evitar este estilo de acessar bits individuais, use o bit campos.
tipo sbit A mikroC PRO para PIC compilador tem sbit tipo de dados que oferece acesso a bits SFR endereçável. Você pode acessá-los da seguinte forma: sbit LEDA em PORTA.B0; sbit bit_name em name.B SFR; sbit LEDB em PORTB.F0; sbit bit_name em SFR-name.F; / / Se você estiver familiarizado com um MCU em particular e os seus portos e diregistros do Regulamento (TRIS), você pode acessar bits por seus nomes: sbit LEdC em RC0_bit; sbit bit_name em R _bit ; sbit TRISC0 em TRISC0_bit; sbit bit_name em TRIS _bit ;
tipo bit
A mikroC PRO para PIC compilador fornece um pouco o tipo de dados que podem ser utilizados para varideclarações capaz. Não pode ser usado para lista de argumentos e valores de retorno de função. bit bf;
/ / Variável de bit /
Não existem ponteiros para variáveis de bits: bit * Ptr;
/ / Inválido
Uma matriz do tipo bit não é válido: bit arr [5];
120
/ / Inválido
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 4
Especificidad es
Nota: - Variáveis Bit não pode ser inicializado. - Bit variáveis não podem ser membros de estruturas e de sindicatos. - Variáveis Bit não têm endereços, portanto operador unário & (endereço) não é aplicáveis a essas variáveis. Temas relacionados: Campos de bits, globais e constantes predefinidas
Interrupções Interrupções podem ser facilmente manipulados por meio da palavra reservada interrupção. mikroC PRO para PIC implictly declara função interrupção que não pode ser declarado novamente. Sua protótipo é: vazio interrupção (void);
Para P18 baixo priorty interrompe palavra reservada é interrupt_low: vazio interrupt_low (void);
Está prevista para escrever sua própria definição (corpo da função) para lidar com interrupções em sua aplicação. mikroC PRO para PIC salva a SFR seguinte ao entrar na pilha interrupção e estala-los de volta em cima do retorno: - Família PIC12: W, STATUS, FSR, PCLATH - Família PIC16: W, STATUS, FSR, PCLATH - Família PIC18: FSR (Contexto de rápido é usado para salvar WREG, BSR STATUS) Use o # Pragma disablecontexsaving para instruir o compilador para automaticaly executar contexto de mudança. Isto significa que não regiser será salvo / restaurado o compilador de entrada / saída da rotina de interrupção do serviço. Isso permite que o usuário manualmente escrever código para salvar registros em cima da entrada e para restaurar -los antes saída da interrupção. Mikr oele ktro nika Solu ções de soft
www.mecatronicadegaragem.blogspot.com
ware e hardware para o mundo embutido
121
CAPÍTULO 4
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Especificidade s prioridade P18 interrompe
Nota: Para a família P18 tanto interrompe alta e baixa são suportados. 1. função com o nome interrupção será vinculado como ISR (rotina de serviço de interrupção) para o elevado nível de interrupção 2. função com o nome interrupt_low será vinculados como ISR para baixo nível inter rupt_low Se a função prioritária de interrupção é para ser usado, então o usuário deve definir a SFR adequado bits para habilitá-lo. Para mais informações consultar os dados para o dispositivo específico.
Chamadas de função de interrupção Chamando funções a partir do (interrupção) de rotina é agora possível. O compilador se preocupa com os registros a ser utilizado, tanto na "interrupção" e, em thread "main", e executa "inteligentes" contexto de alternância entre os dois, poupando apenas os registros que tenham sido usado em ambos reentrância funções threads.Check.
Exemplos de interrupção Aqui está um exemplo simples de lidar com as interrupções de TMR0 (Se não houver outras interrupções são permitidos): vazio interrupt () { contador + +; TMR0 = 96; INTCON = $ 20; }
Em caso de múltiplas interrupções ativadas, você precisará testar qual das interrupções ocorreu e, em seguida, prosseguir com o código apropriado (tratamento de interrupções): vazio interrupt () { se (INTCON.TMR0IF) { contador + +; TMR0 = 96; INTCON.TMR0F = 0; } else if (INTCON.RBIF) { contador + +; TMR0 = 96; INTCON.RBIF = 0; } }
122
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 4
Especificidad es
Linker directivas O mikroC PRO usa um algoritmo interno para distribuir objetos na memória. Se você precisa ter uma variável ou rotina pré-definida no endereço específico, use o link directivas er absoluta e org.
Directiva absoluta Directiva absoluta especifica o endereço inicial na memória RAM para uma variável. Se a varipoder é multi-byte, bytes maior será armazenado nos locais consecutivos. Directiva absoluta é anexado à declaração de uma variável: curto x absoluta 0x22; / / Variável x vai ocupar 1 byte no endereço 0x22 int y absoluta 0x23; / / Variável y ocupará 2 bytes em endereços 0x23 e 0x24
Tenha cuidado ao usar a diretiva de absoluta, como você pode sobrepor-se duas variáveis acidente. Por exemplo: char i absoluta 0x33; / / Variável i vai ocupar 1 byte no endereço 0x33 tempo jjjj absoluta 0x30; / / Variável ocupará 4 bytes de 0x30, 0x31, 0x32, 0x33, assim, / / Mudando mudanças i byte mais alto jjjj, ao mesmo tempo, e vice-versa
org Directiva Directiva org especifica um endereço a partir de uma rotina em ROM. Directiva org é anexado à definição da função. Directivas para defin nãodeclarações ING vai ser ignorado, com um aviso adequado, emitido pelo vinculador. Aqui está um exemplo simples: vazio func (int par) org 0x200 { / / Função terá início no endereço 0x200 nop asm; }
É possível usar org directiva com as funções que são definidos externamente (como biblioteca de funções). Basta adicionar org directiva funcionar declaração: Mikroelektronika - Soluções de software e hardware para o mundo embutido
123
CAPÍTULO 4
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Especificidade s vazio UART_Write1 (char de dados) org 0x200;
Nota: Directiva org pode ser aplicado a qualquer rotina, exceto para interromper.
orgall Directiva Se o usuário quer colocar suas rotinas, constantes, etc, além de um endereço especificado no ROM, # Pragma orgall directiva deve ser usado: # Pragma orgall 0x200
Directiva funcorg Você pode usar o # Pragma funcorg diretiva para especificar o endereço inicial de um routine em CD usando o nome de rotina, apenas: # Pragma funcorg
Relacionados tópicos: chamadas indiretas Função
Solicita função indireta Se o linker encontra uma chamada de função indireta (através de um ponteiro para função), ele assume que qualquer um dos endereços funções de que foram tomadas em qualquer lugar do programa, pode ser chamado a esse ponto. Use o # Pragma Funcall directiva para instruir o link er que as funções podem ser chamados indiretamente da função atual: # Pragma Funcall [, ,...]
A pragma correspondente deve ser colocado no módulo de origem onde a função nome_da_função é implementada. Este módulo também deve incluir declarações de todos os funcioções constantes do called_func lista. Estas funções serão ligados, se a função nome_da_função é chamado no código não-mat ter se algum deles foi chamado ou não. Nota: O # Pragma Funcall directiva pode ajudar o vinculador a função de otimizar o quadro alocação no compilados pilha. Tópicos relacionados: Linker directivas
124
Mikroelektronika - Software e hardware SOLUÇÕES PARA mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 4
Especificidad es
Criada em Rotinas mikroC PRO para PIC compilador fornece um conjunto de úteis built-utilidade em funções. Built-in funções não não requer qualquer cabeçalho arquivos a serem incluídos, você pode usá-los em qualquer parte do seu projeto.
Criada em rotinas são implementadas como "Inline", ou seja, o código é gerado no local da chamada, de modo que o chamada não imputadoso limite de chamadas aninhadas. As únicas exceções são Vdelay_ms, Delay_Cyc e Get_Fosc_kHz que são rotinas C real. Nota: Lo, Hi, Ensino Superior e Maior funções não estão implementadas no compilador mais. Se você quero usar estas funções você deve incluir built_in.h em seu projeto. - Lo - Oi - Superior - Maior - Delay_us - Delay_ms - Vdelay_ms - Delay_Cyc - Clock_Khz - Clock_Mhz - Get_Fosc_kHz unsigned short Lo (longa número); Protótipo
LoRetorna
Descrição
Requer
Retorna o menor de 8 bits (byte) de número, os bits 0 .. 7. Função retorna o byte de menor número. Função não interpreta bit patnhece o número - ele simplesmente devolve 8 bits como os encontrados em registo. Este é um "Inline" rotina, o código é gerado no local da chamada, para chamar a não conta contra o limite de chamadas aninhadas Os argumentos devem ser variável do tipo escalar (isto é, aritmética Tipos e t i
Exemplo
)
d = 0x1AC30F4; tmp = Lo (d) / / Igual 0xF4
Mikroelektronika - Soluções de software e hardware para o mundo embutido
125
CAPÍTULO 4
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Especificidades Oi Protótipo
unsigned short Oi (long número);
Retorna
Retorna junto ao menor de bytes de número, os bits 8 .. 15.
Descrição
Requer
A função retorna ao lado do byte mais alto de número. A função não interpretar padrões de bits de número - ele simplesmente devolve 8 bits como os encontrados em registo. Este é um "Inline" rotina, o código é gerado no local da chamada, assim chamada a não conta contra o limite de chamadas aninhadas Os argumentos devem ser variável do tipo escalar (isto é, aritmética Tipos e t i
Exemplo
)
d = 0x1AC30F4; tmp = Hi (d); / / 0x30 Equals
Superior Protótipo
unsigned short Superior (long número);
Retorna
Retorna ao lado do byte mais alto de número, os bits 16 .. 23.
Descrição
Requer
Função retorna o byte mais alto de número. Função não interpreta bit patnhece o número - ele simplesmente devolve 8 bits como os encontrados em registo. Este é um "Inline" rotina, o código é gerado no local da chamada, para chamar a não conta contra o limite de chamadas aninhadas Os argumentos devem ser variável do tipo escalar (isto é, aritmética Tipos e t i
Exemplo
126
)
d = 0x1AC30F4; tmp = Superior (d) / / Igual 0xAC
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 4
Especificidad es
Maior Protótipo
unsigned short Mais alto (long número);
Retorna
Retorna o byte mais alto de número, os bits 24 .. 31.
Descrição
Requer
A função retorna ao lado do byte mais alto de número. A função não interpretar padrões de bits de número - ele simplesmente devolve 8 bits como os encontrados em registo. Este é um "Inline" rotina, o código é gerado no local da chamada, para chamar a não conta contra o limite de chamadas aninhadas Os argumentos devem ser variável do tipo escalar (isto é, aritmética Tipos e t i
Exemplo
)
d = 0x1AC30F4; Maior tmp = (d); / / 0x01 Equals
Delay_us Protótipo
vazio Delay_us (const time_in_us);
Retorna
Nada. Cria um atraso de software no período de time_in_us microssegundos (uma constante). Faixa de aplicáveis constantes depende da freqüência do oscilador.
Descrição
Este é um "Inline" rotina, o código é gerado no local da chamada, para chamar a não conta contra o limite de chamadas aninhadas. Esta rotina gera loops aninhados uso de registros R13, R12, R11 e R10. O número de registros utilizado varia de 0-4, dependendo do pedido time_in_us.
Requer
Nada.
Exemplo
Delay_us (10); / * Dez microssegundos pausa * /
Mikroelektronika - SOFTWARE HARDWARE E SOLUÇÕES PARA mundo embutido
127
CAPÍTULO 4
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Especificidades Delay_ms Protótipo
vazio Delay_ms (const time_in_ms);
Retorna
Nada. Cria um atraso de software no período de time_in_ms milissegundos (uma constante). Faixa de constantes aplicável depende da freqüência do oscilador.
Descrição
Este é um "Inline" rotina, o código é gerado no local da chamada, para chamar a não conta contra o limite de chamadas aninhadas. Esta rotina gera loops aninhados uso de registros R13, R12, R11 e R10. O número de registros utilizado varia de 0-4, dependendo do pedido time_in_ms.
Requer
Nada.
Exemplo
Delay_ms (1000); / * * Um segundo de pausa /
Vdelay_ms Protótipo
vazio Vdelay_ms (unsigned time_in_ms);
Retorna
Nada.
Descrição
Cria um atraso de software no período de time_in_ms milissegundos (uma variável). atraso gerado não é tão preciso quanto o atraso criado por Delay_ms. Note-se que Vdelay_ms é uma função da biblioteca, em vez de um built-in de rotina, é pretantes neste tópico por uma questão de conveniência.
128
Requer
Nada.
Exemplo
pausa = 1000; / / ... Vdelay_ms (pausa); / / ~ um segundo de pausa
Mikroelektronika - SOLUÇÕES EM SOFTWARE E HARDWARE Para embutidos mundo
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 4
Especificidad es
Delay_Cyc Protótipo
vazio Delay_Cyc (char Cycles_div_by_10);
Retorna
Nada. Cria um atraso baseado no relógio MCU. Atraso dura 10 vezes o param-entrada eter em ciclos MCU.
Descrição Note-se que Delay_Cyc é uma função da biblioteca, em vez de um built-in de rotina, é pretantes neste tópico por uma questão de conveniência. Há limitações para Cycles_div_by_10 valor. Valor Cycles_div_by_10 deve estar entre 3 º e 255. Requer
Nada.
Exemplo
Delay_Cyc (10); / * ciclos Cem MCU pausa * /
Clock_Khz Protótipo
não assinado Clock_Khz (void);
Retorna
relógio do dispositivo em KHz, arredondado para o número inteiro mais próximo. Função relógio do dispositivo retorna em KHz, arredondado para o inteiro mais
Descrição
próximo. Este é um "Inline" rotina, o código é gerado no local da chamada, para chamar a
Requer
Nada.
Exemplo
clk = Clock_Khz ();
Mikroelektronika - Soluções de software e hardware para o mundo embutido
129
CAPÍTULO 4
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Especificidades Clock_Mhz Protótipo
unsigned short Clock_Mhz (void);
Retorna
Dispositivo clock em MHz, arredondado para o número inteiro mais próximo. Função relógio do dispositivo retorna em MHz, arredondado para o número inteiro
Descrição
mais próximo. Este é um "Inline" rotina, o código é gerado no local da chamada, para chamar a
Requer
Nada.
Exemplo
clk = Clock_Mhz ();
Get_Fosc_kHz Protótipo
unsigned long Get_Fosc_kHz (void);
Retorna
relógio do dispositivo em KHz, arredondado para o número inteiro mais próximo. Função relógio do dispositivo retorna em KHz, arredondado para o inteiro.
Descrição
Note-se que Get_Fosc_kHz é uma função da biblioteca, em vez de um built-in de rotina, é
Requer
preNada.
Exemplo
clk = Clock_Khz ();
Otimização de Código Optimizer foi adicionada para estender a utilização do compilador, reduzir a quantidade de código de generacelerada e acelerar sua execução. As principais características são:
dobrar Constant Todas as expressões que podem ser avaliados em tempo de compilação (ou seja, são constantes) estão sendo substituídos pelos seus resultados. (3 + 5 -> 8);
constante de propagação Quando um valor constante é sendo atribuído a uma determinada variável, o compilador reconhece isso e substitui o uso da variável constante no código que segue, enquanto o valor de uma varipoder permanece inalterada.
130
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 4
mikroC PRO para PIC
Especificidad es
Copie propagação O compilador reconhece que duas variáveis têm o mesmo valor e elimina um deles ainda no código.
Valor numeração O compilador "reconhece" se duas expressões produzem o mesmo resultado e não podeportanto eliminar o cálculo inteiro para um deles.
"Código Dead" eliminação A trechos de código que não estão sendo usados em outras partes do programa não afetam o resultado final da aplicação. Eles são automaticamente removidos.
alocação de pilha registradores temporários ("Pilhas") estão sendo usados de forma mais racional, permitindo COM MUITO expressões complexas a ser avaliado com um mínimo consumo de pilha.
otimização vars locais N variáveis locais estão sendo usados, se o seu resultado não afeta alguns dos globais ou variáveis voláteis.
Melhor geração de código e otimização local
Código geração é mais consistente e mais atenção é pago para implementar essoluções específicos para o código "tijolos de construção" que reduzem ainda mais o tamanho do código de saída. Tópicos relacionados: especificidades PIC, mikroC PRO para PIC específicos, tipos específicos de memória Mikr oele ktro nika Solu ções de soft ware e hard ware para o mun do emb
utido
www.mecatronicadegaragem.blogspot.com
131
CAPÍTULO 4
Especificidades
132
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO
5
PIC ESPECIFICOS
A fim de obter o máximo de seu mikroC PRO para PIC compilador, você deve estar familiarizados com certos aspectos da PIC MCU. Este conhecimento não é essencial, mas pode fornecer uma melhor compreensão das CPIs ' capacidades e limitações, e seus impacto sobre a escrita de código.
133
CAPÍTULO 5
www.mecatronicadegaragem.blogspot.com
PIC Especificidade Tipos de Eficiência s
mikroC PRO para PIC
Primeiro de tudo, você deve saber que ALU PIC, que realiza operações aritméticas, é otimizado para trabalhar com bytes. Embora mikroC PRO para PIC é capaz de hanmanuseio tipos de dados muito complexos, PIC pode engasgar com elas, especialmente se você estiver de trabalho ção em alguns dos modelos mais antigos. Isto pode aumentar o tempo necessário para realizar mesmo operações simples. conselhos Universal é a utilização de o menor possível tipo em cada situação. Ela se aplica a toda a programação em geral, e duplamente com microcontroladores. Conheça a sua ferramenta. Quando se chega ao cálculo, nem todos os microcontroladores PIC são de desempenho igual. Por exemplo, a família PIC16 carece de recursos de hardware para multiply dois bytes, por isso é compensado por um algoritmo de software. Por outro lado, PIC18 família tem HW multiplicadores, e como resultado, a multiplicação de obras consideravelmente mais rápido.
Limitações chamadas aninhadas chamada aninhadas representa uma chamada de função dentro do corpo da função, quer para si mesmo (recursivo chamadas) ou para outra função. chamadas de funções recursivas são suportados pelo mikroC PRO para PIC mas com limitações. chamadas de funções recursivas não podem conter qualquer função parâmetros e variáveis locais, devido às limitações do PIC de memória e pilha. mikroC PRO para PIC limita o número de não-recursivo chamadas aninhadas para: - 8 chamadas para a família PIC12, - 8 chamadas para a família PIC16, - 31 chamadas para a família PIC18.
Note-se que alguns dos built-in rotinas não contam contra esse limite, devido à sua "Inline" implementação. Número de chamadas aninhadas permitido diminui um, se você usar qualquer uma das seguiing operadores do código: / *%. Isso diminui ainda mais se você usar as interrupções no programa. Número de reduções é especificada pelo número de funções chamadas a partir de interrupt. Verifique reentrância funções. Se o número permitido de chamadas aninhadas for excedido, o compilador apresentará um relatório de uma pilha overflow erro.
www.mecatronicadegaragem.blogspot.com 134 Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
mikroC PRO para PIC não fornece ajuste automático de bits para suplente acessando regIster. Este é um novo recurso adicionado ao pic18fxxjxx família e será apoiado no futuro. Em vários locais no banco SFR, um único endereço é usado para acessar os dois difeent registros de hardware. Nestes casos, um "Legado" registro do PIC18 padrão SFR conjunto (como OSCCON, T1CON, etc) as suas quotas de endereço com um suplente, regIster. Estes registos alternativos estão associadas com opções de configuração avançada para os periféricos, ou com o novo dispositivo não os recursos incluídos na SFR PIC18 padrão mapa. Uma lista completa de endereços de registro compartilhado e os registos associados lhes é fornecido na ficha técnica.
PIC16 Especificidades Quebrando Páginas Em aplicações orientadas para PIC16, nenhuma única rotina deve exceder uma página (2.000 instruções). Se a rotina não cabe em uma página, vinculador irá reportar um erro. Quando confrontar com este problema, talvez você devesse repensar o design do seu aplicativo - tente quebrar a rotina especial em vários pedaços, etc
Limites da abordagem indireta através da RSF
Ponteiros com PIC16 são "Perto": eles carregam apenas abaixo de 8 bits do endereço. Comempilhadeira automaticamente limpar o bit 9 em cima da partida, de modo que os ponteiros vão se referir a bancos 0 e 1. Para acessar os objetos em bancos de 2 ou 3 através de ponteiro, o usuário deve manvamente definir a PIA, e restaurar a zero após a operação. As regras se aplicam a declarou qualquer abordagem indireta: matrizes, estruturas e atribuições dos sindicatos, etc
Nota: É muito importante cuidar do PIA corretamente, se você pretende seguir esta abordagem. Se você encontrar esse método é inadequado, com muitas variáveis, você pode considerar a atualização para PIC18. Nota: Se você tem muitas variáveis no código, tente reorganizá-las com o vinculador directiva absoluta. Variáveis que são abordados apenas diretamente devem ser transferidos para 3 e 4 bancos para aumentar a eficiência. tópicos relacionados: mikroC PRO para PIC especificidades
Mikroelektronika - Soluções de software e hardware para o mundo embutido
135
CAPÍTULO 5
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
PIC Especificidades TIPO DE MEMÓRIA especificadores
A mikroC PRO para PIC suporta o uso de todas as áreas de memória. Cada variável pode ser explicitamente atribuído a um espaço de memória específicos, incluindo um especificador de tipo de memória na declaração, ou implicitamente atribuído. Os especificadores seguintes tipos de memória podem ser usados: - código - dados - rx - sfr especificadores de tipo de memória podem ser incluídas no declaração da variável. Por exemplo: data_buffer dados char / / coloca data_buffer nos dados ram const char código txt [] = "ENTER PARAMETER:" / / coloca o texto na memória do programa
código
Descrição
A código tipo de memória pode ser usada para a atribuição constantes no programa
Exemplo
i / / óColoca txt na memória do programa const char código txt [] = "ENTER PARAMETER:";
dados
Descrição Exemplo
rx
Este especificador de memória é usado quando a variável que armazena os dados d i t PORTG nos dados ram / /SRAM Coloca dados sfr 0x65 PORTG unsigned short absoluta;
Este especificador de memória permite a variável a ser armazenado no espaço de Rx (arquivo Register).
Descrição Nota: Na maioria dos casos, não haverá espaço suficiente para as variáveis do
Exemplo
136
usuário em R N / / Coloca y no Rx espaço
il d
y rx sfr char;
Mikroelektronika - Soluções de software e hardware para o mundo embutido
R
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
sfr Descrição Exemplo
CAPÍTULO 5
PIC Especificidades
Este especificador de memória em combinação com (rx, dados) permite ao utilizador aceder escial registros função. Ele também instrui o compilador para manter mesmo identificador em C rx sfr y char;
Nota: Se nenhum dos especificadores de memória são usadas quando se declara uma variável, dados especificador será definir como padrão pelo compilador. Tópicos relacionados: Acesso individual bits, SFR, constantes, funções
Mikroelektronika - Soluções de software e hardware para o mundo embutido
137
CAPÍTULO 5
www.mecatronicadegaragem.blogspot.com
PIC Especificidades
138
mikroC PRO para PIC
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO
6
mikroC PRO para PIC Referência da Linguagem O mikroC PRO para PIC Language Reference descreve a sintaxe, a semântica ea execução do mikroC PRO para a linguagem PIC. O objectivo deste guia de referência é fornecer uma mais compreensível descrição do o mikroC PRO para PIC linguagem para o usuário.
www.mecatronicadegaragem.blogspot.com
139
CAPÍTULO 6
www.mecatronicadegaragem.blogspot.com
Referência da Linguagem
mikroC PRO para PIC
- Elementos lexicais Espaços em branco Comentários Tokens Constantes Constantes Resumo Integer Constantes Floating Point Constantes Constantes de caracteres String Constantes Enumeração Constantes Constantes ponteiro Expressão constante Palavras-chave Identificadores Punctuators - Conceitos Objetos e lvalues Escopo e visibilidade Espaços de nome Duração - Tipos Tipos Fundamentais Aritmética Tipos Enumerações Tipo Void Tipos derivados Matrizes Ponteiros Introdução aos Ponteiros Aritmética de ponteiro Estruturas Introdução às estruturas Trabalhando com Estruturas Estrutura de Acesso ao Portal Sindicatos Campos Bit Tipo Conversões Standard Conversões Typecasting Explicit
140
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
- Declarações Introdução às declarações Linkage Classes de armazenamento Tipo, qualificação Especificador typedef ASM Declaração Inicialização - Funções Introdução às Funções Chamadas de função e argumento de conversão - Operadores Introdução aos Operadores Operadores Precedência e Associatividade Operadores Aritméticos Os operadores relacionais Operadores bit a bit Lógico Opeartors Operadores Condicionais Operadores de Atribuição Operador sizeof - Expressões Introdução a Expressões Vírgula Expressões - Declarações Introdução Rotulado Demonstrações Expressão Demonstrações Instruções de Seleção Se a Declaração Switch Declaração Instruções iteração (Loops) Enquanto a Declaração Do Declaração Para a declaração Ir Demonstrações Break e continue Goto Declaração Instrução Return Declarações compostas (blocos) Mikroelektronika - Soluções de software e hardware para o mundo embutido
141
CAPÍTULO 6
www.mecatronicadegaragem.blogspot.com
Referência da Linguagem
mikroC PRO para PIC
- Preprocessor Introdução à pré-processador Preprocessor directivas Macros Inclusão de arquivos Preprocessor Operadores Compilação condicional
142
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
LEXICAL Visão geral sobre elementos Os tópicos a seguir fornecem uma definição formal do mikroC PRO para PIC lexical elementos. Eles descrevem as diferentes categorias de unidades de palavra-like (tokens), reconheceu pela mikroC PRO para a PIC. Na fase de simbolização de compilação, o arquivo de código fonte é analisado (isto é, manoken baixo) em tokens e espaços em branco. Os tokens no mikroC PRO para PIC são derivada de uma série de operações realizadas em seus programas pelo compilador e sua built-in pré-processador.
WHITESPACE Espaço em branco é um nome coletivo dado a espaços (brancos), horizontais e verticais tabulações, caracteres de nova linha e comentários. Espaços em branco podem servir para indicar onde fichas de início e fim, mas para além desta função, qualquer excedente espaços em branco são descartados. Por exemplo, duas seqüências int i; flutuar f;
e int i; flutuar f;
são lexicalmente equivalente e analisar de forma idêntica para dar seis fichas: int i ; flutuar f ;
Mikroelektronika - Software e Soluções de hardware para Embedded World
143
CAPÍTULO 6
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Referência da Linguagem Espaço em branco em Strings
Os caracteres ASCII representando branco pode ocorrer dentro de literais de cadeia. Em que caso eles sejam protegidos contra o processo de análise normal (eles permanecem como parte da da seqüência). Por exemplo, char [nome] = "mikro foo";
analisa em sete fichas, incluindo uma única seqüência literal token: char nome [ ] = "Mikro foo" ;
/ * Apenas um token aqui! * /
Linha de emenda com contrabarra (\)
Um caso especial é uma linha termina com uma barra invertida (\). Ambos barra invertida e nova linha caracteres são descartados, permitindo que duas linhas físicas de um texto a ser tratados como uma unidade. Então, o seguinte código "MikroC PRO \ Compilador para PIC "
analisa em "MikroC PRO para PIC Compiler". Consulte a String Constantes para mais da informação.
144
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
COMENTÁRIOS Os comentários são partes de um texto usado para anotar um programa e são tecnicamente outra forma de espaço. Os comentários são para uso do programador só, pois eles são retirados do texto de origem antes da análise. Há duas formas para delinear commentos: o método de C e C + + método. Ambos são apoiados por mikroC PRO para PIC. Você também deve seguir as orientações sobre a utilização de espaços em branco e os delimitadores de comentários, discutido mais adiante neste tópico para evitar problemas de portabilidade outros.
comentários C C comentário é qualquer seqüência de caracteres colocados após a par / símbolo *. A commento termina na primeira ocorrência do * / par após a inicial / *. Toda a seqüência, incluindo quatro símbolos delimitador de comentário, é substituídos por um espaço depois expansão de macro. Na mikroC PRO para a PIC, int / * Tipo * i / / * identificador * /;
analisa como: int i;
Note-se que o mikroC PRO para PIC não suporta um colar nonportable token estratégia usando /**/. Para mais informações sobre colar token, consulte o Preprocessor Operadores.
C + + comentários A mikroC PRO para PIC permite que os comentários de uma linha usando duas barras adjacentes (//). O comentário pode começar em qualquer posição e se estende até a próxima linha nova. O código a seguir int i; int j;
/ / Isto é um comentário
analisa como: int i; int j;
Mikroelektronika - Soluções de software e hardware para o mundo embutido
145
CAPÍTULO 6
www.mecatronicadegaragem.blogspot.com
Referência da Linguagem
mikroC PRO para PIC
comentários Nested ANSI C não permite comentários aninhados. A tentativa de um ninho de comentário como esse / * int / * declaração * / i, / *
falha, porque o âmbito do primeiro / * termina no primeiro * /. Isso nos dá i; * /
o que geraria um erro de sintaxe.
146
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Idioma Referência
TOKENS Token é o menor elemento de um programa compilador C que pode reconhecer. A parser separa os tokens do fluxo de entrada, criando o maior símbolo possível usando os caracteres de entrada em uma esquerda para a direita-scan. A mikroC PRO para PIC reconhece os seguintes tipos de fichas: - palavras-chave - identificadores - constantes - operadores - pontuadores (também conhecido como separadores)
Símbolo de Extração Exemplo Aqui está um exemplo da extração de token. Dê uma olhada no código exemplo a seguir seqüência: inter =
a + + + b;
Primeiro, note que inter seria analisado como um identificador único, em vez não como a chavepalavra int seguido pelo identificador er. O programador que tem escrito o código pode ter a intenção de escrever inter = um + (+ + b), mas não funciona dessa maneira. O compilador iria analisá-lo no sete fichas a seguir: inter = um + + + b ;
// // // // // // //
variável identificador operador de atribuição variável identificador operador postIncrement operador de adição variável identificador terminador de instrução
Note-se que + + + analisa como + + (O mais longo possível token), seguido por +. De acordo com as regras de precedência de operador, a nossa seqüência de código é, na verdade: inter (a + +) + b;
Mikroelektronika - SOLUÇÕES EM SOFTWARE E HARDWARE Para embutidos mundo
147
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
Referência da Linguagem
mikroC PRO para PIC
CONSTANTS Constantes ou literais são símbolos que representam fixo numérico ou valores de caracteres. A mikroC PRO para PIC suporta: - constantes inteiro - constantes ponto flutuante - constantes de caracteres - Constantes cadeia de caracteres (strings literais) - constantes de enumeração A tipo de dados de uma constante é deduzido pelo compilador usando pistas como um valor numérico e formato usado no código-fonte.
Integer Constantes As constantes inteiras podem ser decimal (base 10), hexadecimal (base 16) base, binários ( 2) ou octal (base 8). Na ausência de sufixos primordiais, o tipo de dados de um constante inteira é derivado do seu valor.
Long e sufixos Unsigned O sufixo L (Ou l) ligado a qualquer força constante que constante a ser representado como um tempo. Da mesma forma, o sufixo U (Ou u) obriga a uma constante a ser não assinado. Ambos Le U sufixos podem ser utilizados com a mesma constante em qualquer forma ou processo: ul, Lu, UL,
etc Na ausência de qualquer sufixo (U, u, L, ou l), uma constante é atribuído o "Menor" de os seguintes tipos, que podem acomodar seu valor: curto, curto não assinado, int, unsigned int long int, int unsigned long.
Caso contrário: Se uma constante tem o U sufixo, seu tipo de dados será o primeiro dos seguintes que pode acomodar o seu valor: unsigned int, unsigned short, sem assinatura tempo int.
Se uma constante tem o L sufixo, seu tipo de dados será o primeiro dos seguintes que podem acomodar o seu valor: long int, int unsigned long. Se uma constante tem tanto L e U sufixos, (LU ou UL), seu tipo de dados será não assinado int tempo.
148
Mikroelektroni ka - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
Decimais constantes Decimal de -2147483648 a 4294967295 são permitidos. Constantes excedam esses limites vai produzir uma "Out of range" erro. constantes Decimal não deve usar um zero inicial. Uma constante inteira que tem um zero inicial é interpretáed como uma constante octal. Assim, int i = 10; int i = 010; int i = 0;
Na ausência de quaisquer sufixos imperiosa, o tipo de dados de um constante decimal é derivada de seu valor, conforme demonstrado abaixo:
Valor atribuído à constante
Assumindo Tipo
<-2147483648
Erro: Fora da faixa!
-2147483648 - -32769
tempo
-32768 - -129
int
-128 - 127
curto
128 - 255
unsigned short
256 - 32767
int
32768 - 65535
unsigned int
65536 - 2147483647
tempo
2147483648 - 4294967295
unsigned long
> 4294967295
Erro: Fora da faixa!
Constantes hexadecimais Todas as constantes a partir de 0x (Ou 0X) estão a ser tomadas hexadecimal. Na ausência sufixos de qualquer substituição, o tipo de dados de um hexadecimal constante é derivada da seu valor, de acordo com as regras apresentadas acima. Por exemplo, 0xC367 serão trataed como unsigned int.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
149
CAPÍTULO 6
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Referência da Linguagem Binário Constantes
Todas as constantes a partir de 0b (Ou 0B) estão a ser tomadas binário. Na ausência de qualquer excesso de andar sufixos, o tipo de dados de um binário constante é derivada de seu valor, de acordo com as regras apresentadas acima. Por exemplo, 0b11101 serão tratados como curto.
Octal Constantes Todas as constantes com um zero inicial são tidas como octal. Se uma constante octal contém os dígitos ilegal 8 ou 9, é reportado um erro. Na ausência de qualquer substituindo o sufixoes, o tipo de dados de uma constante octal é derivado do seu valor, de acordo com as regras apresentados acima. Por exemplo, 0777 serão tratados como int.
Floating Point Constantes Uma constante de ponto flutuante é composto por: - Decimal inteiro - Ponto decimal - Decimal fração - e ou E e um expoente inteiro assinado (opcional) - Tipo sufixo: f ou F ou l ou L (Opcional) Qualquer número inteiro decimal ou fração decimal (mas não ambos) pode ser omitido. Ou decponto imal ou carta e (Ou E) com um expoente inteiro assinado (mas não ambos) pode ser omitirTed. Estas regras permitem convencionais e científicas (expoente) notações.
Negativo constantes flutuantes são tomadas como constantes positivas com um operador unário menos (-) como prefixo. A mikroC PRO para PIC limites constantes de ponto flutuante para o intervalo ± 1,17549435082 * 10-38 ..± 6,80564774407 * 1038. Aqui estão alguns exemplos: 0. -1.23 23.45e6 2e-5 3E +10 0,09 E34
A mikroC PRO para PIC de ponto flutuante constantes são do tipo casal. Note-se que o mikroC PRO PIC para a implementação de ANSI Standard considera flutuar e dupla (Juntamente com a long double variante) para ser do mesmo tipo.
150
Mikroelektronika - SOFTWARE HARDWARE E SOLUÇÕES PARA mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
Constantes de caracteres Um personagem constante é um ou mais caracteres entre aspas simples, como 'A', '+', ou '\ N'. No mikroC PRO para PIC, constantes de caractere único são da unsigned int tipo. constantes Multi caracteres são referidos como con-corda balcões de ou literais de cadeia. Para obter mais informações referem-se a String Constantes.
Sequências de Escape Uma barra invertida (\) é usada para introduzir uma seqüência de escape, que permite uma representação visual de certos caracteres não gráficos. Uma das mais comuns constantes de escape é o caractere de nova linha (\ n). Uma barra invertida é usada com números em octal ou hexadecimal para representar um símbolo ASCII ou controle de código correspondente a esse valor, por exemplo, '\ X3F' para a questão marca. Qualquer valor dentro dos limites legais para o tipo de dados char (0 para 0xFF para o mikroC PRO para PIC) pode ser usado. Números maiores irá gerar o erro do compilador"Fora de alcance". Por exemplo, o número octal \ 777 é maior do que o valor máximo permitido (\ 377) e irá gerar um erro. O primeiro caractere nonoctal ou não hexadecimais encontrados em uma seqüência de escape octal ou hexadecimal marca o fim da seqüência. Nota: Você deve usar a seqüência \ \ para representar uma barra invertida ASCII, como usado em caminhos do sistema operacional. A tabela a seguir mostra as seqüências de escape disponíveis: Seqüência \ A
Valor 0x07
Char BEL
Descrição sinal audível
\ B
0x08
BS
Retrocesso
\ F
0x0C
FF
Formfeed
\ N
0x0A
LF
Newline (Avanço de linha)
\ R
0x0D
CR
Retorno de carro
\ T
0x09
HT
Tab (horizontal)
\ V
0x0B
VT
Vertical Tab
\ \
0x5C
\
Backslash
\ '
0x27
»
aspas simples (apóstrofo)
\ "
0x22
''
Aspas duplas
\?
0x3F
?
Ponto de interrogação
\ O
qualquer S = string de até 3 dígitos octais
\ XH
qualquer H = seqüência de dígitos hexadecimais
\ XH
qualquer H = seqüência de dígitos hexadecimais Mikr
www.mecatronicadegaragem.blogspot.com
oelektronika - Soluções de software e hardware para o mundo embutido
151
CAPÍTULO 6
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Referência da Linguagem Desambiguação
Algumas situações ambíguas podem surgir quando se utiliza seqüências de escape. Aqui está um exemplo: Lcd_Out_Cp ("\ x091.0 Intro");
Este destina-se a ser interpretada como \ X09 e "Intro 1.0". No entanto, o mikroC PRO PIC para compila-lo como o número hexadecimal \ X091 e literal de cadeia "0,0 Intro ". Para evitar tais problemas, podemos reescrever o código da seguinte forma: Lcd_Out_Cp ("\ X09", "1.0 Introdução");
Para obter mais informações sobre a linha anterior, referem-se a String Constantes. Ambigüidades também pode ocorrer se uma seqüência de escape octal é seguido por um nonoctal dígitos. Por exemplo, as seguintes constantes: "\ 118"
seria interpretado como um de dois caracteres constante composta dos personagens \ 11 e 8, porque 8 não é um dígito octal legal.
String Constantes
constantes da corda, também conhecido como literais string, são um tipo especial de constantes que armazenar seqüências fixas de caracteres. Uma seqüência literal é uma seqüência de qualquer número de caracteres entre aspas duplas: "Esta é uma string."
A string nula, ou string vazia, é escrito como "". Uma seqüência literal é armazenada internamente
como uma determinada seqüência de caracteres mais um caractere nulo final. Uma seqüência de caracteres nula é armazenado como um único caractere nulo. Os caracteres entre aspas pode incluir seqüências de escape. Este código, por exemplo: "\ T \" Nome \ "\ \ \ tAddress \ n \ n"
impressões como isso: "Nome" \
Endereço
www.mecatronicadegaragem.blogspot.com 152
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
O "nome" é precedido por dois guias, o endereço é precedido por um guia. A linha é seguido por duas novas linhas. A \ " fornece interior aspas. A fuga seqüência de caracteres \ \ é traduzida em \ pelo compilador. literais string adjacentes separados apenas por espaços em branco são concatenados durante o análise de fase. Por exemplo: "Este é" apenas " "Um exemplo".
é equivalente a "Este é apenas um exemplo."
Continuação de linha com Backslash
Você pode também usar a barra invertida (\) como um caractere de continuação de estender uma string constante através das fronteiras linha: "Isso é realmente \ uma seqüência de caracteres de uma linha. "
Enumeração Constantes constantes de enumeração são identificadores definidos no enum declarações do tipo. A identiverificadores são normalmente escolhido como mnemônicos de contribuir para a legibilidade. Enumeração consão de balcões de int tipo. Eles podem ser usados em qualquer expressão, onde constantes inteiro são válidos. Por exemplo: enum semana {dom = 0, Seg, Ter, Qua, Qui, Sex, Sab};
A identificadores (inquiridores) utilizados devem ser exclusivos dentro do escopo do enum decvai fazendo. inicializadores negativas são permitidas. Veja Enumerações para obter detalhes sobre enum declarações. Mikr oele ktro nika Soft ware e Solu ções de hard ware
www.mecatronicadegaragem.blogspot.com
para Embedded World
153
CAPÍTULO 6
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Referência da Linguagem Constantes ponteiro
Um ponteiro ou apontado no objeto pode ser declarados com o modificador const. Qualquer coisa declarados como const não podem alterar seu valor. Também é ilegal a criação de um ponteiro que pode violar um cedível não do objeto constante. Considere os seguintes exemplos: // // // // //
int i; int * Pi; int * const cp = &I; int const ci = 7; int const * PCI; int const * const cpc = &ci;
i é um int pi é um ponteiro para int (não inicializado) cp é um ponteiro constante para int A CI é uma constante int PCI é um ponteiro para int constante / / CCP é um ponteiro constante para um / / Int constante
As seguintes atribuições legais: i = IC; * Cp = ci; + + PCI; pci = cpc;
// // // // // //
Atribuir-const int para int Atribuir-const int objeto de pontas-de-por-um-const-ponteiro Incrementar um ponteiro-para-const Atribuir um const-ponteiro-para-a-const a um pointer-para-const
Os seguintes atribuições são ilegais: ci = 0; ci -; * Pci = 3; cp = &ci; cpc + +; pi = PCI;
// // // // // // // // // //
NO - não pode atribuir a um const int NO - não pode mudar um const int NO - não pode atribuir a um objeto apontou para pelo ponteiro para const. NO - não pode atribuir a um ponteiro const, ainda que o valor não sofrerá alterações. NO - const mudança cant-ponteiro NO - se essa atribuição era permitido, você seria capaz de atribuir a * pci (Um valor constante), atribuindo a * pi.
Regras similares são applayed ao voláteis modificador. Note-se que ambos os const e voláteis pode aparecer como modificadores para o mesmo identificador.
154
Mikroelektronika - SOFTWARE HARDWARE E SOLUÇÕES PARA mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
Expressões constantes Um expressões constantes podem ser avaliados durante a tradução, sim, que a execução e conformidade pode ser usado em qualquer lugar que pode ser uma constante. Expressões constantes pode consistir apenas no seguinte: - literais, - constantes de enumeração, - simples constantes (sem matrizes constantes ou estruturas), - sizeof operadores. Expressões constantes não podem conter nenhum dos seguintes operadores, a menos que o operador: atribuição, Os operadores estão contidos no operando de uma sizeof decremento, vírgula, chamada de função, de incremento. Cada expressão constante pode ser avaliada como uma constante que está na faixa de reprevalores sentable para seu tipo. expressão constante pode ser usado em qualquer uma constante é legal.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
155
CAPÍTULO 6
www.mecatronicadegaragem.blogspot.com
Referência da Linguagem
mikroC PRO para PIC
PALAVRAS-CHAVE
Palavras-chave são palavras reservadas para fins especiais e não deve ser usado como normal identificador de nomes. Além de palavras-chave C padrão, todos os SFR relevantes são definidos como variáveis globais e representam palavras reservadas que não pode ser redefinido (por exemplo: TMR0, PCL etc.) Sondar o Assistente de código para letras específicas (Ctrl + Espaço no Editor) ou consulte a prédefinidos e constantes globais. Aqui está um alfabética lista de palavras-chave em C: -
156
asm auto quebrar caso char const continuar padrão fazer dupla mais enum extern flutuar para goto se int tempo Registre-se retorno curto assinado sizeof estáticas struct switch typedef União não assinado vazio voláteis enquanto
Além disso, o mikroC PRO para PIC inclui um número de identificadores predefinidos utilizados em bibliotecas. Você pode substituí-los por suas próprias definições, se você quer desenvolver sua próprias ParaPARA obter mais - Ebibliotecas. E SOLUÇÕES PARAinformações, O MUNDO consulte mikroC PRO PIC para Bibliotecas.
Mikroelektronika - SOFTWARESOFTWAREHARDWAREHARDWARE SOLUTIONSEMBEDDEDEMBEDDED MUNDO
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
IDENTIFICADORES Identificadores são nomes arbitrários com um determinado comprimento de funções, variáveis simbólicas constantes, user-defined tipos de dados e rótulos. Todos estes elementos do programa será designado objetos toda a ajuda (não se confunda com o significado de objeto em programação orientada a objetos). Os identificadores podem conter as letras de A a Z e A a Z, caractere"_", E dígitos 0-9. A única restrição é que o primeiro caractere deve ser uma letra ou um sublinhado.
Caso sensibilidade A mikroC PRO para PIC identificadores não são sensíveis ao caso por padrão, de modo que Soma, suma, e soma representam um equivalente identificador. sensibilidade processo pode ser ativado ou
suspendido na janela Configurações de saída. Mesmo entre maiúsculas e minúsculas é desligado Palavras-chave permanecem maiúsculas e minúsculas e devem ser escritas em minúsculas.
Singularidade e Âmbito Embora os nomes de identificador são arbitrários (de acordo com as regras descritas), se o mesmo nome é usado por mais de um identificador dentro do mesmo escopo ea partilha do espaço de mesmo nome, então o erro surge. nomes duplicados são legais para nome diferente espaços, independentemente das regras de escopo. Para obter mais informações sobre o escopo, consulte Escopo e visibilidade.
Exemplos Identifier Aqui estão alguns identificadores válidos: temperature_V1 Pressão no_hit dat2string SUM3 _vtext
... e aqui estão alguns identificadores inválidos: 7temp % Maior int j23.07.04
// // // //
NO NO NO NO
-
não não não não
pode pode pode pode
começar com um numeral conter caracteres especiais jogo palavra reservada conter caracteres especiais (ponto)
www.mecatronicadegaragem.blogspot.com
Mikroelektronika - Soluções de software e hardware para o mundo embutido
157
CAPÍTULO 6
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Referência da Linguagem Pontuadores
A mikroC PRO para PIC pontuadores (também conhecido como separadores) são: - [] - Suportes - () - Parênteses - {} - Suspensórios - ,- Vírgula - ;- Ponto e vírgula - :- Cólon - *- Asterisco - =- sinal de igual - #- sinal de libra A maioria destes pontuadores também funcionam como operadores.
Suportes Suportes [] subscritos indicam única matriz e multidimensional: char ch, str [] = "mikro"; int mat [3] [4]; CH = str [3];
/ * 3 x 4 * matriz / / * Elemento 4 /
Parênteses Parênteses () são usados para agrupar expressões, isolar expressões condicionais, e indicam as chamadas de função e os parâmetros de função: d = c * (A + b); if (d == z) + + x; func (); void func2 (int n);
/ * Substituir * precedência normal / / * * Essencial com instrução condicional / / * Chamada da função, não args * / / * Declaração de uma função com parâmetros * /
Parênteses são recomendado nas definições macro para evitar potenciais precedência problemas durante a expansão: # Define CUBE (x) ((x) * (x) (x))
Para obter mais informações, consulte Operadores Precedência e associatividade e Expressões.
158
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
Suspensórios Suspensórios {} indicar o início e fim de um comando composto: if (d == z) { + + X; func (); }
Fechamento da chave serve como um terminador para o comando composto, então um ponto e vírgula não é exigida após }, Exceto em declarações estrutura. Às vezes, o ponto e vírgula pode ser ilegal, como no if (declaração) {... }; / * Ponto-evírgula ilegal! * / mais {... };
Para obter mais informações, consulte a instruções compostas.
Vírgula Vírgula (,) separa os elementos de uma lista de argumentos da função: void (int n, float f pc, char) func;
Vírgula também é usado como um operador em expressões vírgula. Misturando dois usos da vírgula é legal, mas você deve usar parênteses para distingui-los. Note-se que (exp1, exp2) evalutates ambos, mas é igual para o segundo: função (i, j); chamada * / função com dois argumentos * / func ((exp1, exp2), (exp3, EXP4, exp5)) / * também chamadas de funções com duas args! * /
Ponto e vírgula Vírgula (;) é um terminador de instrução. Qualquer expressão C legal (incluindo o vazio expressão), seguido por um ponto e vírgula é interpretado como uma declaração, conhecida como expressão comunicado. A expressão é avaliada e seu valor é descartado. Se o declaração de expressão não tem efeitos secundários, a mikroC PRO para PIC pode ignorá-la. a + b; + + A; ;
/ * Avaliar a + b, mas descarta valor * / / * O efeito de lado em um, mas descarta valor de + + a * / / * Expressão vazia, ou um comando nulo * /
Mikroelektronika - Soluções de software e hardware para o mundo embutido
159
CAPÍTULO 6
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Referência da Linguagem Semicolons às vezes são usados para criar uma declaração vazia: for (i = 0; i
Para obter mais informações, consulte Demonstrações.
Cólon Use dois pontos (:) para indicar a instrução rotulada: start: x = 0; ... goto início;
As etiquetas são discutidos nas declarações identificadas.
Asterisk (Declaração Ponteiro) Asterisco (*) em uma declaração de variável indica a criação de um ponteiro para um tipo: char_ptr char *;
/ * Um ponteiro para char é declarada * /
Ponteiros com vários níveis de engano pode ser declarada por indicação de um pertinente número de asteriscos: int ** int_ptr; double_ptr *** duplo;
/ * Um ponteiro para um array de inteiros * / / * Um ponteiro para uma matriz de duplas * /
Você também pode usar o asterisco como um operador, quer dereference um ponteiro ou como muloperador tiplication: i * = int_ptr; a = b * 3,14;
Para obter mais informações, consulte os ponteiros.
Cadastre-se igual
160
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
Igualdade de sinal (=) separa as declarações de variáveis da lista de inicialização: int teste [5] = {1, 2, 3, 4, 5}; int x = 5;
sinal de igual é usado também como um operador de atribuição em expressões: int a, b, c; a = b + c;
Para obter mais informações, consulte Operadores de Atribuição.
Cadastre Libra (Directiva Preprocessor) Libra sinal (#) indica uma directiva de pré-processamento, quando ele ocorre como o primeiro nãocaracteres em branco em uma linha. Significa uma ação compilador, não necessariamente associado com uma geração de código. Veja as directivas do pré-processador para obter mais inforção. # e # # também são utilizados como operadores para realizar a substituição de tokens e fundindo-dur ção do pré-processador de digitalização de fase. Veja os Operadores Preprocessor.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
161
CAPÍTULO 6
www.mecatronicadegaragem.blogspot.com
Referência da Linguagem
mikroC PRO para PIC
CONCEITOS
Esta seção aborda alguns conceitos básicos da linguagem, essencial para a compreensão de como funcionam os programas de C. Em primeiro lugar, precisamos estabelecer os seguintes termos que serão utilizados em toda a ajuda: - Objetos e lvalues - Escopo e visibilidade - Espaços de nome - Duração
Objetos
Um objeto é uma região específica da memória que podem armazenar um valor fixo ou variável (ou conjunto de valores). Esse uso de um termo objeto é diferente de um mesmo termo, utilizado em linguagens orientadas a objeto, que é mais geral. Nosso definiton da palavra seria englobam funções, variáveis, constantes simbólicas, tipos de dados definidos pelo usuário, e etiquetas. Cada valor tem um nome associado e tipo (também conhecido como um tipo de dados). A nome é usado para acessar o objeto e pode ser um identificador simples ou complexas expresSion que se refere exclusivamente o objeto.
Objetos e declarações Declarações necessário estabelecer um mapeamento entre identificadores e objetos. Cada declaração associa um identificador com um tipo de dados. Associando os identificadores de objetos requer que cada identificador de ter pelo menos dois attribnutos: classe de armazenamento e tipo (por vezes referido como o tipo de dados). A mikroC PRO para PIC compilador deduz destes atributos a partir de declarações implícitas ou explícitas no código-fonte. Normalmente, apenas o tipo é especificado explicitamente a classe de armazenamento e espeifier assume o auto valor automático. De um modo geral, um identificador não possa ser legalmente utilizado em um programa antes de sua decponto vai fazendo no código-fonte. excepções a esta regra legal (conhecido como ref progressistas erences) são os rótulos, as chamadas para funções não declarado, e struct ou tags união. A gama de objetos que podem ser declaradas inclui: - Variáveis - Funções - Tipos - Matrizes de outros tipos - Estrutura, união e tags enumeração
162
www.mecatronicadegaragem.blogspot.com
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem - membros da estrutura - membros da União - constantes Enumeração - Declaração de rótulos - Preprocessor macros
A natureza recursiva da sintaxe declarator permite declarators complexo. Você provavelmente vai querer usar typedefs para melhorar a legibilidade se construir objetos complexos.
Lvalues Lvalue é um objeto locator: uma expressão que designa um objeto. Um exemplo de lvalue expressão é * P, onde P é qualquer expressão que avalia um ponteiro não nulo. A modificáveis lvalue é um identificador ou uma expressão que diz respeito a um objeto que pode ser acessados e mudou legalmente na memória. Um ponteiro const para uma constante, por exemplo, não é um lvalue modificáveis. Um ponteiro para uma constante pode ser alterado (mas seu derefvalor referenciadas não podem). Historicamente, eu defendia "Esquerda", o que significa que lvalue poderiam legalmente ficar sobre a esquerda (a recebimento final) de uma instrução de atribuição. Agora só lvalues modificável e jurídicoly ficar à esquerda de um operador de atribuição. Por exemplo, se a e b são NonConidentificadores inteiro constante com armazenamento de memória corretamente alocados, eles são ambos os modlvalues ifiable e atribuições, como a = 1 e b = a + b são legais.
Rvalues A expressão a + b não é lvalue: a + b = a É ilegal porque a expressão à esquerda não está relacionado a um objeto. Tais expressões são às vezes chamados rvalues (Abreviação de valores à direita). Mikr oele ktro nika Solu ções de soft ware e hard ware para o mun do emb
utido
www.mecatronicadegaragem.blogspot.com
163
CAPÍTULO 6
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Referência da Linguagem Escopo e visibilidade Âmbito
O escopo de um identificador é uma parte do programa no qual o identificador pode ser usado para acessar o seu objeto. Existem diferentes categorias de escopo: bloco (ou local), função, protótipo da função, e arquivo. Estas categorias dependem de como e onde identifiers são declaradas.
Bloco: O escopo de um identificador com o bloco (ou local) começa no âmbito declaração ciando e termina no final do bloco que contém a declaração (bloco de tais é conhecido como o bloco de inclusão). declarações dos parâmetros com uma definição de função ção também tem escopo de bloco, limitado ao âmbito de aplicação do corpo da função. Arquivo: Arquivo identificadores de escopo, também conhecido como globais, são declaradas fora de todas as blocos, o seu âmbito é, do ponto de declaração para o fim do arquivo de origem. Função: Os identificadores apenas de alcance função são rótulos de instrução. Label nomes podem ser usados com as declarações goto lugar na função em que o rótulo é declarada. Rótulos são declarados implicitamente por escrito LABEL_NAME: fol seguidos por um comunicado. Rótulo nomes devem ser exclusivos dentro de uma função. Função protótipo: identificadores declarados na lista de declarações de parâmetro em um protótipo de função (e não como parte de uma definição de função) têm uma função de pro ToType escopo. Este escopo termina no final do protótipo da função.
Visibilidade A visibilidade de um identificador é uma região do código fonte do programa a partir do qual um identificador é associado objeto pode ser acessado legalmente. Alcance e visibilidade geralmente coincidem, mas há circunstâncias em que um objeto se torna temporariamente ocultas pelo aparecimento de uma segunda via do identificador: o objeto ainda existe, mas o identificador original não pode ser usado para acessá-lo até o âmbito da segunda via do identificador termina. Tecnicamente, a visibilidade não pode ultrapassar o âmbito de aplicação, mas pode ultrapassar um escopo de visibilidade. Veja o seguinte exemplo: vazio f (int i) { int j; / Auto / por padrão / / Int i e j estão no escopo e visível j = 3; { dupla j; j = 0,1;
/ Block nested / / J é o nome local no bloco aninhado / / I e j dupla são visíveis; / / Int j = 3, em abrangência, mas oculto
} www.mecatronicadegaragem.blogspot.com
164
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
j + = 1;
CAPÍTULO 6
Referência da Linguagem / / Saída dupla j de alcance / / Int j visível e = 4
} / / I e j são ambos fora de alcance
Espaços de nome espaço de nomes é um escopo dentro do qual um identificador deve ser único. A mikroC PRO para PIC utiliza quatro categorias distintas de identificadores:
1. goto nomes de rótulo - deve ser exclusivo dentro da função em que se encontram declarou. 2. Estrutura, união e enumeração marcas - deve ser exclusivo dentro do bloco no que eles são definidos. Tags declarada fora de qualquer função deve ser exclusivo. 3. Estrutura e nomes de membros da União - deve ser exclusivo dentro da estrutura ou União, nos quais eles são definidos. Não há nenhuma restrição sobre o tipo ou deslocamento de membros com o nome do membro mesmo em diferentes estruturas. 4. Variáveis, typedefs, funções e membros de enumeração - deve ser único, com no âmbito em que eles são definidos. Externamente identificadores devem ser declaradas única entre as variáveis declaradas no exterior.
nomes duplicados são legais para espaços de nomes diferentes, independentemente das regras de escopo. Por exemplo: int azul = 73; { / / Abrir um bloco de enum {cores preto, vermelho, verde, violeta, azul, branco c}; / Azul = 3 * enumerador agora esconde declaração externa de azul * / int struct {cores int i, j;}; dupla vermelho = 2;
/ / ILEGAL: cores duplicadas tag / / Ilegal: redefinição de vermelho
} azul = 37;
/ / Volta no âmbito int azul
Duração Duração, estreitamente relacionado com uma classe de armazenamento, define um período em que o declarado identifiers têm real, objetos físicos alocados na memória. Nós também distinguir entre comtempo de bate-estacas e objetos em tempo de execução. Variáveis, por exemplo, ao contrário typedefs e tipos, têm real memória alocada em tempo de execução. Existem dois tipos de duração: estáticas e local. Mikr oele ktro
www.mecatronicadegaragem.blogspot.com
nika - Soluções de software e hardware para o mundo embutido
165
CAPÍTULO 6
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Referência da Linguagem Static Duração
A memória é alocada para objetos com duração de estática, logo que a execução é subforma, esta alocação de armazenamento dura até que o programa termina. duração estática objetos reside normalmente em dados fixos segmentos alocados de acordo com a memória especificador em vigor. Todos os globals têm duração estática. Todas as funções, sempre que definidos, são objectos com duração estática. Outras variáveis podem ser dadas duração estáticos usando o explícito estáticas ou extern armazenamento especificadores de classe. Na mikroC PRO para PIC, objetos duração estáticos são não inicializado para zero (ou nulo) na ausência de qualquer inicializador explícito.
Não misture com duração estática arquivo ou escopo global. Um objeto pode ter duração estática e âmbito local - veja o exemplo abaixo.
Local Duração
objetos duração locais também são conhecidos como automática objetos. Eles são criados no pilha (ou num registo), quando um bloco de inclusão ou de uma função é inserida. Eles são desalocado quando o programa sai que bloco ou função. Local objetos duração deve ser explicitamente inicializado, caso contrário, seu conteúdo é imprevisível. O especificador de classe de armazenamento auto pode ser usado na declaração de variáveis locais duração, mas geralmente é redundante, pois auto é padrão para as variáveis declaradas dentro de um bloco. Um objeto com duração locais também têm um alcance local, porque não existe fora do seu bloco de inclusão. Por outro lado, um objeto de âmbito local pode tem estática duração. Por exemplo: vazio f () { / * Variável duração locais; init uma sobre cada chamada para f * / int a = 1; / * A variável de duração estática; b init apenas em primeira convocação para f * / static int b = 1; / * Checkpoint! * / a + +; b + +; } vazio main () { / * No posto, vamos f (); / / A = 1, b = 1, após f (); / / a / b = 1 = 2, após f (); / / a / b = 1 = 3, após / / Etc }
166
ter: * / primeira chamada, segunda chamada, terceira chamada,
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
TIPOS
A mikroC PRO para PIC é uma linguagem estritamente digitado, o que significa que cada objeto, função, e expressão deve ter um tipo estritamente definido, conhecido no tempo de comcompilação. Note-se que o mikroC PRO para PIC funciona exclusivamente com tipos numéricos. O tipo serve: para determinar a alocação de memória correto exigido inicialmente. para interpretar o bit padrões encontrados no objeto durante o acesso posterior. em muitas situações de verificação de tipo, para garantir que as atribuições ilegais são presos. A mikroC PRO para PIC suporta o padrão muitos (pré) e definidas pelo usuário tipos de dados, inclusive assinado e sem assinatura inteiros de vários tamanhos, de ponto flutuante números com precisão várias matrizes, estruturas e uniões. Além disso, o ponto dores para a maioria destes objetos podem ser criados e manipulados na memória. O tipo determina a quantidade de memória é alocado para um objeto e como a prógrama irá interpretar os padrões de bits encontrada na alocação do objeto de armazenamento. Um dado tipo de dados pode ser visto como um conjunto de valores (muitas vezes dependente da implementação), que identificadores do mesmo tipo podem assumir, juntamente com um conjunto de operações permitidas com esses valores. O operador em tempo de compilação sizeof permite determinar o tamanho em bytes de qualquer padrão ou tipo definido pelo usuário. A mikroC PRO para PIC bibliotecas-padrão e seu próprio programa e os arquivos devem fornecer identificadores inequívoca (ou expressões derivadas deles) e os tipos de modo que a mikroC PRO para PIC pode sempre acessar, interpretar, e (possivelmente) mudar o padrão de bits nhece na memória correspondente a cada objeto ativo em seu programa.
Tipo Categorias Um comum maneira de categorizar os tipos é dividi-los em: - Fundamental - Derivada Os tipos fudamental representam tipos que não podem ser divididas em partes menores. Eles são por vezes referido como não estruturados tipos. Os tipos fundamentais são void, char, int, float, e casal, juntamente com curtas, longas, assinado e não assinado variformigas de alguns deles. Para obter mais informações sobre os tipos fundamentais, consulte o tópico FunTipos fundamentais. Os tipos derivados também são conhecidos como estruturado tipos e incluem ponteiros para
outros tipos, arrays de outros tipos, tipos de funções, estruturas e sindicatos. Para obter mais www.mecatronicadegaragem.blogspot.com informações sobre os tipos de derivados, consulte o tópico tipos derivados. Mikroelektronika - Soluções de software e hardware para o mundo embutido
167
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
Referência da Linguagem
mikroC PRO para PIC
Tipos Fundamentais Os tipos fudamental representam tipos que não podem ser divididos em elementos mais básicos, mentos, e são o modelo de representação de dados elementares sobre o nível da máquina. A tipos fudamental são muitas vezes referidos como tipos não-estruturados, e são utilizados como na criação de elementos mais complexos tipos derivados ou definida pelo usuário. Os tipos fundamentais incluem: -Aritmética Tipos - Enumerações - Tipo Void
Aritmética Tipos Os especificadores de tipo aritméticos são construídos a partir de palavras-chave: void, char, int, float e casal, juntamente com os prefixos curtas, longas, assinado e não assinado. A partir dessas palavras-chave pode criar dois tipos integral e de ponto flutuante.
Tipos Integral Os tipos char e int, juntamente com suas variantes, são considerados como parte integrante
tipos de dados. As variantes são criados usando um dos modificadores de prefixo curtos, longos, assinado e não assinado.
Na tabela abaixo é uma visão geral dos tipos integrais - Palavras-chave entre parênteses pode ser (e são muitas vezes) omitido. Os modificadores assinado e não assinado pode ser aplicado tanto char e int. Na ausência do prefixo unsigned, assinada é automaticamente assumida por tipos integrais. A única exceção é char, que é não assinado por padrão. As palavras-chave assinado e sem assinatura, quando usado por si só, significa assinado int e unsigned int, , respectivamente. Os modificadores curto e tempo só pode ser aplicada a int. As palavras-chave curto e de comprimento, utilizada por conta própria, quer dizer short int e int tempo, respectivamente.
168
Mikroelektroni ka - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem Tipo (Não assinado) char
Tamanho em B t 1
0 .. 255
assinado char
1
- 128 .. 127
(Assinado) (int) short
1
- 128 .. 127
unsigned short (int)
1
0 .. 255
2
-32768 .. 32767
2
0 .. 65535
4
-2147483648 .. 2147483647
4
0 .. 4294967295
(Assinado) int unsigned (int) (Assinado) (int) de i unsigned long (int)
Faixa
Tipos de ponto flutuante Os tipos flutuar e casal, juntamente com o long double variante, são consisiderada tipos de ponto flutuante. A mikroC PRO PIC para a implementação de um Padrão ANSI considera que todas são do mesmo tipo. ponto flutuante na mikroC PRO para PIC é implementado usando o AN575 Microchip 32-bit do formato (IEEE 754 complacente). Uma visão geral do ponto flutuante tipos é mostrada na tabela abaixo: Tipo
Tamanho em Bytes
Faixa
flutuar
4
-1,5 * 1045 .. +3.4 * 1038
dupla
4
-1,5 * 1045 .. +3.4 * 1038
long double
4
-1,5 * 1045 .. +3.4 * 1038
Mikroelektronika - Soluções de software e hardware para o mundo embutido
169
CAPÍTULO 6
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Referência da Linguagem Enumerações
Uma enumeração tipo de dados é usado para representar um discreto, abstrata conjunto de values com as devidas nomes simbólicos.
Enumeração Declaração Enumeração é declarado assim: enum tag {lista de enumeração-};
Aqui, tag é um nome opcional da enumeração; enumeração de-lista é uma vírgula delimitado lista de valores discretos, os entrevistadores (ou enumeração constantes). Cada enumerator é atribuído um valor fixo integral. Na ausência de explícita inicializadores, o enumerador primeiro é definido como zero, eo valor de cada enumerador sucesso é definido ao valor de seu antecessor, acrescido de um. Variáveis da enum tipo são declaradas as mesmas variáveis de qualquer outro tipo. Para exemplo, a seguinte declaração: enum {cores preto, vermelho, verde, violeta, azul, branco c};
estabelece um único tipo integral, enum cores, variável c deste tipo, e um conjunto de enumeradores com valores inteiros constantes (preto = 0, vermelho = 1, ...). Na mikroC PRO para a PIC, uma variável de um tipo enumerado pode ser atribuído qualquer valor do tipo int - além da não verificação de tipo que é imposta. Isto é: c = vermelho; / / OK / / Ainda bem, significa o mesmo c = 1;
Com explícita inicializadores integral, você pode definir um ou mais entrevistadores, específicas valores. O inicializador pode ser qualquer expressão que produz um número inteiro positivo ou negativo valor (após promoções inteiro possível). Quaisquer nomes subseqüentes sem inicializadores vai ser aumentada por um. Estes valores são geralmente únicas, mas as duplicatas são legais. A ordem de constantes podem ser explicitamente re-arranjadas. Por exemplo: enum {cores preto, vermelho, verde, azul = 6, violeta, branco = 4};
170
// // // // // //
valor valor valor valor valor valor
0 1 2 6 7 4
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
expressão inicializador pode incluir entrevistadores previamente declarado. Por exemplo, em a seguinte declaração: enum memory_sizes bit = {1, nibble = 4 bits *, byte = 2 * mordidela, kilobyte = 1024 bytes *};
nibble adquiriria o valor 4, o valor de 8 bytes e kilobytes o valor 8192.
Anomous Tipo Enum Em nossa declaração anterior, o identificador cores é uma tag opcional que a enumeração pode ser usado em declarações posteriores de variáveis enumeração dos enum colors Tipo: enum cores bg, fronteiras;
/ * Declarar variáveis e bg * fronteira
Como com struct e declarações união, você pode omitir a marca se não houver outras variáveis do presente enum tipo são necessários: / * Tipo enum Anónimo: * / enum {preto, vermelho, verde, violeta, azul, branco cor};
Enumeração Âmbito tags Enumeração compartilhar o espaço de mesmo nome de marcas de estrutura e união. Enumerators compartilhar o mesmo espaço de nomes como identificadores de variáveis comuns: int azul = 73; {/ / abrir um bloco de enum {cores preto, vermelho, verde, violeta, azul, branco c}; / Azul = 3 * enumerador agora esconde declaração externa de azul * / int struct {cores int i, j;}; dupla vermelho = 2;
/ / ILEGAL: cores duplicadas tag / / ILEGAL: redefinição de vermelho
} azul = 37;
/ / Volta no âmbito int azul
Mikroelektronika - SOFTWARE E soluções de hardware para embutidos mundo
171
CAPÍTULO 6
www.mecatronicadegaragem.blogspot.com
Referência da Linguagem
mikroC PRO para PIC
Tipo Void vazio é um tipo especial indicando o ausência de qualquer valor. Não há objetos de vazio, ao contrário, vazio é utilizada para obter os tipos mais complexos.
Void Funções Use o vazio palavra-chave como um tipo de retorno da função se a função não retorna um valor. vazio print_temp (char temp) { Lcd_Out_Cp ("Temperatura:"); Lcd_Out_Cp (temp); Lcd_Chr_Cp (223); / personagem / graus Lcd_Chr_Cp ('C'); }
Use vazio como uma função de posição se a função não tem parâmetros. Alternativamente, você pode escrever apenas parênteses vazios: main (void) {/ / mesmo que main () ... }
Genéricos Ponteiros
Ponteiros podem ser declarados como vazio, o que significa que eles podem apontar para qualquer tipo.
Esses ponteiros são chamados genéricas.
172
Mikroelektronika - SOFTWARE E soluções de hardware para embutidos mundo
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
Tipos derivados Os tipos derivados também são conhecidos como tipos estruturados. Eles são usados como elementos na criação de mais complexos tipos definidos pelo usuário. Os tipos derivados incluem: - matrizes - ponteiros - estruturas - sindicatos
Matrizes Matriz é a mais simples e mais comumente usado tipo estruturado. Uma variável de matriz tipo na verdade é um array de objetos do mesmo tipo. Estes objectos representam elementos de uma matriz e são identificados por sua posição na matriz. Uma matriz consiste em uma região contígua de armazenamento exatamente grande o suficiente para armazenar todos os seus elementos.
Declaração Array declaração de matriz é semelhante à declaração de variável, com os suportes adicionado após identificador: Array_Name tipo de expressão [constante]
Isso declara uma matriz denominada Array_Name e composto de elementos de tipo. A tipo pode ser qualquer tipo escalar (excepto void), enumeração tipo definido pelo usuário, o ponteiro, ou
outra matriz. Resultado da expressão constante dentro dos colchetes determina um número de elementos na matriz. Se uma expressão é dada em um declarator matriz, ele deve avaliar a um constante inteira positiva. O valor é um número de elementos em uma matriz. Cada um dos elementos de um array é indexado de 0 ao número de elementos menos um. Se um número de elementos é n, os elementos de matriz podem ser abordadas como variáveis Array_Name [0] .. [N-1] Array_Name de tipo.
Aqui estão alguns exemplos de declaração de matriz: # Define MAX = 50 vector_one [10] / * declara um array de 10 inteiros * / int flutuar vector_two [MAX]; / * declara uma matriz de 50 carros alegóricos * / flutuar vector_three [MAX - 20] / * declara uma matriz de 30 carros alegóricos * /
www.mecatronicadegaragem.blogspot.com
Mikroelektronika - Soluções de software e hardware para o mundo embutido
173
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC
Referência da Linguagem Inicialização de matriz
Uma matriz pode ser inicializada na declaração, atribuindo-lhe um delimitado por vírgula seqüência de valores dentro de chaves. Ao inicializar uma matriz na declaração, poderá omitir o número de elementos - será determinada automaticamente de acordo com a número de elementos atribuídos. Por exemplo: / * Declare uma matriz que contém o número de dias de cada mês: * / int dia [12] = {} 31,28,31,30,31,30,31,31,30,31,30,31; / * Esta declaração é idêntico ao anterior * / int dias [] = {} 31,28,31,30,31,30,31,31,30,31,30,31;
Se você especificar os valores de comprimento e de partida, o número de valores de partida deve não pode exceder o comprimento especificado. A oposto é possível, neste caso, o arrasto "Excesso" elementos serão atribuídos a alguns valores de tempo de execução encontradas a partir de memteoria. No caso da matriz de char, você pode usar um menor seqüência literal notação. Por exemplo: / * As duas declarações são idênticas: * / const char msg1 [] = {'T', 'E', 's', 't', '\ 0'}; const char msg2 [] = "Teste";
Para obter mais informações sobre os literais cadeia de caracteres, consulte a String Constantes.
n Expressões Matrizes Quando o nome de uma matriz aparece na avaliação da expressão (excepto com a óperares & e sizeof), é convertido implicitamente para o ponteiro que aponta para a primeira matriz
elemento. Veja matrizes e ponteiros para mais informações.
Arrays multi-dimensionais Uma matriz é unidimensional, se for do tipo escalar. arrays unidimensionais são algumasvezes referido como vetores.
Matrizes multidimensionais são construídos por declarar arrays de tipo de matriz. Estes matrizes são armazenadas na memória de tal maneira que as mudanças mais à direita subscrito mais rápido, ou seja, as matrizes são armazenadas "Em linhas". Aqui está um exemplo de matriz de 2 dimensões: flutuar m [50] [20];
/ * Array de 2 dimensões de tamanho 50x20 * /
A variável m é uma matriz de 50 elementos, que por sua vez, são matrizes de 20 carros alegóricos cada. Assim, temos uma matriz de 50x20 elementos: o primeiro elemento é m [0] [0], a última
174
Mikroelektroni ka - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
é m [49] [19]. O primeiro elemento da linha 5 seria m [4] [0]. Se você não inicializar a matriz na declaração, você pode omitir a primeira dimensão da array multi-dimensional. Nesse caso, a matriz está localizado em outro lugar, por exemplo, em outro arquivo. Esta é uma técnica comumente usada quando passar matrizes como parâmetros de função: int a [3] [2] [4];
/ * Matriz 3-dimensional de tamanho 3x2x4 * /
vazio func (int [n] [2] [4]) {/ * podemos omitir primeira dimensão * / ... n [2] [1] [3] + +; incremento * / * o último elemento / } vazio main () { ... func (a); }
Você pode inicializar um array multi-dimensional com um conjunto adequado de valores dentro suspensórios. Por exemplo: int a [3] [2] = {{1,2}, {2,6}, {3,7}};
Ponteiros
Ponteiros são objetos especiais para a realização (ou "Apontando para") endereços de memória. Na mikroC PRO para PIC, endereço de um objeto na memória podem ser obtidas por meio de um operador unário &. Para alcançar o objeto pontiagudo, usamos um operador de indireção (*)
em um ponteiro.
Um ponteiro do tipo "Ponteiro para objeto do tipo" guarda o endereço da (ou seja, aponta para) um objeto do tipo. Como os ponteiros são objetos, você pode ter um ponteiro apontando para um ponteiro (e assim por diante). Outros objetos comumente apontado incluem matrizes, estruturas e sindicatos. Um ponteiro para uma função é melhor pensar como um endereço, normalmente em um segmento de código, onde o código executável que a função é armazenado, isto é, o endereço para o qual o controle é transferido quando essa função é chamado. Embora ponteiros contêm números com a maioria das características de inte-assinado gers, eles têm suas próprias regras e restrições para as declarações, as atribuições, conversões, e aritmética. Os exemplos nas seções seguintes ilustram algumas dessas regras e as restrições. Mikr oele ktro nika -
www.mecatronicadegaragem.blogspot.com
Soluções de software e hardware para o mundo embutido
175
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
Referência da Linguagem
mikroC PRO para PIC
Ponteiro declarações
Os ponteiros são declarados da mesma forma que qualquer outra variável, mas com * à frente do identificador. Um tipo no início da declaração especifica o tipo de um objeto pontiagudo. Um pontoer deve ser declarado como apontando para algum tipo particular, ainda que este tipo é vazio, o que realmente significa um ponteiro para qualquer coisa. Ponteiros para vazio são muitas vezes chamados genéricos ponteiros, e são tratados como ponteiros para char na mikroC PRO para a PIC. Se tipo é qualquer tipo pré-definido ou definido pelo usuário, incluindo vazio, a declaração Tipo * p;
/ * Ponteiro Uninitialized * /
declara p ser do tipo "Ponteiro para tipo ". Todos escopo, duração e regras de visibilidade
são aplicada ao p objeto apenas declarada. Você pode ver a declaração da seguinte maneira: se * P é um objeto de tipo, em seguida, p tem que ser um ponteiro para tal objeto (objeto de tipo).
Nota: Você deve inicializar ponteiros antes de usá-los! Nosso ponto declarado anteriormente, er * P não é inicializado (isto é atribuído um valor), por isso não pode ser usado ainda. Nota: No caso de declarações ponteiro múltiplos, cada um requer um identificador indireta operador. Por exemplo: int * Pa, pb, * pc *; / * É o mesmo que: * / int * Pa; int * Pb; int * PC;
Uma vez declarada, porém, um ponteiro pode normalmente ser transferido assim que ele aponta para um objeto de outro tipo. O mikroC PRO para PIC permite transferir sem ponteiros typecasting, mas o compilador irá avisá-lo a menos que o ponteiro foi originalmente declarado estar apontando para nulas. Você pode atribuir a void * ponteiro para o não-void * ponteiro referem-se a vazio para mais detalhes.
176
Mikroelektroni ka - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
Ponteiros nulos A ponteiro nulo valor é um endereço que é garantia de ser diferente de qualquer outro válido ponteiro em uso em um programa. Atribuindo a constante inteira de 0 a um ponteiro atribui um valor do ponteiro nulo para ele. Por exemplo: int * Pn = 0;
/ * Aqui está um ponteiro nulo * /
/ * Nós podemos testar o ponteiro como isto: * / se (Pn == 0) {... }
O tipo de ponteiro "Ponteiro para void" não deve ser confundido com o ponteiro nulo. A declaração vazio * Vice-presidente;
declara que vp é um ponteiro genérico, capaz de ser designado por qualquer das "Ponteiro para tipo " valor, inclusive nulo, sem reclamar. Atribuições sem casting adequado entre um "Ponteiro para type1 " e um "Ponteiro para type2 ", onde type1 e type2 diferentes tipos, pode invocar um aviso do compilador ou erro. Se type1 é uma função e type2 não é (ou vice-versa), atribuições ponteiro são ilegais. Se type1 é um ponteiro para vazio, nenhuma conversão é necessária. Se type2 é um ponteiro para vazio, nenhuma conversão é necessária.
Função Ponteiros Função ponteiros são ponteiros, variáveis, ou seja, que apontam para o endereço de um função. / / Definir um ponteiro de função int (* Pt2Function) (char, float, char);
Nota: Assim funções e ponteiros de função com a convenção de chamada diferentes (argumento da ordem, tipo de argumentos ou tipo de retorno é diferente) são incompatíveis com cada outras.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
177
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
Referência da Linguagem
mikroC PRO para PIC
Atribuir um endereço para um ponteiro de função É muito fácil atribuir o endereço de uma função para um ponteiro de função. Basta ter o nome de uma função adequada e conhecidos. Usando o operador de endereço e de frente o nome da função é opcional. / / Atribuir um endereço para o ponteiro de função int DoIt (float a, b, char, char c) {return a + b + c;} pt2Function = &DoIt; / cessão /
Exemplo: int ADDC (char x, char y) { retorno x + y; } int SUBC (char x, char y) { retorno x, y; } int mulC (char x, char y) { retorno x * y; } int CIVD (char x, char y) { retorno x / y; } int modC (char x, char y) { retorno x, y%; } / / Array de ponteiro para funções que recebem dois caracteres e retorna int int (* Arrpf []) (char, char) = { ADDC, SUBC, mulC, CIVD, modC}; int res; char i; vazio main () { para (I = 0; i <5; i + +) { res = arrpf [i] (10,20); } }
178
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
Aritmética de ponteiro Aritmética de ponteiro no mikroC PRO para PIC é limitado a: - atribuição de um ponteiro para outro, - comparando dois ponteiros, - comparando ponteiro a zero, - adição / subtração ponteiro e um valor inteiro, - subtraindo dois ponteiros. A aritmética interna realizada em ponteiros depende do especificador de memória força ea presença de modificadores ponteiro imperiosa. Ao realizar-arith aritmética com ponteiros, presume-se que o ponteiro aponta para um array de objetos.
Matrizes e ponteiros Matrizes e ponteiros não são tipos completamente independente na mikroC PRO para PIC. Quando o nome de uma matriz aparece na avaliação da expressão (exceto com operadores & e sizeof), é convertido implicitamente para o ponteiro apontando para matriz
primeiro elemento. Devido a este fato, as matrizes não são lvalues modificáveis. Suportes [ ] indicam índices da matriz. A expressão id [exp]
é definido como * ((Id) + (exp))
quando: - id é um ponteiro e exp é um número inteiro, ou - id é um inteiro e exp é um ponteiro. As seguintes declarações são verdadeiras: & A [i] a [i]
= =
a + i * (A + i)
De acordo com essas orientações, pode ser escrito: pa = & a [4]; x * = (aa + 3); / * .. mas: * / y = aa * + 3;
/ / Pa aponta para um [4] / / X = a [7] / / Y = a [4] + 3
Mikroelektronika - Soluções de software e hardware para o mundo embutido
179
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC
Referência da Linguagem Além disso, o cuidado deve ser tomado quando usando a precedência do operador: * Pa + +; (* Aa) + +;
/ / * Igual a (aa + +), incrementa o ponteiro / / Incrementa o objeto apontado!
Os exemplos a seguir também são válidas, mas melhor evitar essa sintaxe, pois ele pode fazer o código realmente ilegível: (A + 1) [i] = 3; / / Mesmo que: * ((a + 1) + i) = 3, ou seja, a [i + 1] = 3 (I + 2) [a] = 0; / / Mesmo que: * ((i + 2) + a) = 0, ou seja, a [i + 2] = 0
Atribuição e comparação A atribuição simples operador (=) pode ser usado para atribuir o valor de um ponteiro para outro, se eles são do mesmo tipo. Se eles forem de tipos diferentes, você deve usar um typecast operador. A conversão explícita de tipo não é necessário se um dos ponteiros é genérico (da vazio tipo). Atribuindo a constante inteira de 0 a um ponteiro atribui um valor nulo ponteiro para ele. Dois ponteiros apontando para a mesma matriz pode ser comparada usando oper-relacional ators ==,! =, <, <=,>, e > =. Os resultados destas operações são as mesmas que se eles foram usados em valores subscritos de elementos da matriz em questão: int * Pa = & a [4], pb * = & a [2]; se (Pa == pb) {... / * Não será executado em 4 não é igual a 2 * /} se (Pb pa>) {... / * Irá ser executado como 4 é superior a 2 * /}
Você também pode comparar os ponteiros para o valor zero- testes, dessa forma, se o ponteiro do actupontos aliado a alguma coisa. Todos os ponteiros podem ser testados com sucesso para a igualdade ou a desigualdade de nulos: se (Pa == 0) {... } se (Pb! = 0) {... }
Nota: Comparando os ponteiros apontando para diferentes objetos / matrizes podem ser realizados em responsabilidade do programador- uma visão precisa do armazenamento de dados de física é necessário.
180
Mikroelektroni ka - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
Ponteiro Adição
Você pode usar operadores + + +, e + = adicionar um valor inteiro a um ponteiro. A resultado de Além disso é definida somente se o ponteiro aponta para um elemento de uma matriz e Se o resultado for um ponteiro apontando para a mesma matriz (ou um elemento para além dela).
Se for declarado um ponteiro para apontar para tipo, acrescentando um valor integral n para o ponteiro incrementos o valor do ponteiro n * sizeof (tipo) enquanto o ponteiro permanece dentro do intervalo legal (primeiro elemento para um além do último elemento). Se tipo tem uma tamanho de 10 bytes, então a adição de 5 para um ponteiro para tipo avança o ponteiro de 50 bytes na memória. Em caso da tipo tipo, o tamanho de um passo é um byte. Por exemplo: int a [10]; int * Pa = & a [0]; * (Pa + 3) = 6; agora é igual a 6 * / aa + +; a [1] * /
/ * Um array contendo 10 elementos do tipo int * / / Pa * é ponteiro para int, apontando para a [0] * / / * 3 pa é um ponteiro que aponta para a [3], de modo a [3] / Pa * aponta agora para o próximo elemento de uma matriz:
Não há nenhum elemento, como ponteiro "um após o último elemento", é claro, mas o está autorizado a assumir tal valor. C "Garantias" que o resultado disso é definida mesmo quando aponta para uma matriz de elemento passado. Se os pontos P para o último elemento de matriz, P 1 + é legal, mas P 2 + é indefinido. Isto permite-lhe gravar loops que o acesso a elementos em um array seqüência meios de incrementar ponteiro - na última iteração, você terá o ponteiro do ponto de ção de um elemento passado a matriz, que é legal. No entanto, a aplicação de um engano operador (*) para uma "Ponteiro para um após o último elemento" leva a um comportamento indefinido. Por exemplo: vazio f (some_type um [] int n) { / * Função f manipula elementos de uma matriz; * / / * Matriz A tem n elementos do tipo some_type * / int i; some_type * p = & a [0]; para (I = 0; i
www.mecatronicadegaragem.blogspot.com Mikroelektronika - Soluções de software e hardware para o mundo embutido
181
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
Referência da Linguagem
mikroC PRO para PIC
Ponteiro Subtração
Semelhante ao lado, você pode usar os operadores -, - E -= para subtrair uma parte integrante valor de um ponteiro. Além disso, você pode subtrair dois ponteiros. A diferença será igual à distância entre dois endereços apontou, em bytes. Por exemplo: int int int i= pi2
182
a [10]; * PI1 = & a [0]; * Pi2 = & a [4]; pi2 - PI1; / * I é igual a 8 * / -= (I> 1); / * Pi2 = pi2 - 4: pi2 agora aponta para [0] * /
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
Estruturas Uma estrutura é um derivado tipo normalmente representa uma coleção definida pelo usuário de nome membros (ou componentes). Esses membros podem ser de qualquer tipo, seja fundamental ou derivados (com algumas restrições que devem ser discutidos mais tarde), em qualquer seqüência. Em adição, um membro de estrutura pode ser um campo de bits. Diferentemente dos arrays, estruturas são consideradas objetos únicos. A mikroC PRO para PIC tipo de estrutura permite-lhe lidar com estruturas de dados complexas quase tão facilmente como pecado gle variáveis. Nota: o mikroC PRO para PIC não suporta anônimos estruturas (ANSI-mergulhador gência).
Estrutura da declaração e inicialização Estruturas são declaradas usando a palavra-chave struct: struct tag {Membro declarator lista};
Aqui, tag é o nome de uma estrutura; declarator membro-lista é uma lista de estrutura membros, na verdade, uma lista de declarações de variáveis. Variáveis do tipo estruturado são declarou o mesmo que as variáveis de qualquer outro tipo.
O tipo de membro não pode ser o mesmo que o tipo struct sendo atualmente declarou. No entanto, um membro pode ser um ponteiro para a estrutura que está sendo declarada, como no semugido exemplo: / * Ilegal! * / struct {S MYSTRUCT;} MYSTRUCT; struct MYSTRUCT {MYSTRUCT ps *;}; / * OK * /
Além disso, uma estrutura pode conter anteriormente tipos de estrutura definidos quando se declara uma instância da estrutura declarada. Aqui está um exemplo: / * Estrutura que define um ponto: * / struct Dot {float x, y;}; / * Estrutura que define um círculo * / struct Circle { flutuar r; struct ponto central; } O1, O2; / * Declarar variáveis O1 e O2 do Círculo * /
Mikr oele
www.mecatronicadegaragem.blogspot.com
ktronika - Soluções de software e hardware para o mundo embutido
183
CAPÍTULO 6
www.mecatronicadegaragem.blogspot.com
Referência da Linguagem
mikroC PRO para PIC
Note que a tag estrutura pode ser omitido, mas os objetos, em seguida adicionais deste tipo não pode ser declarados em outro lugar. Para obter mais informações, consulte Estruturas Untagged abaixo. A estrutura é inicializada atribuindo a ele uma seqüência delimitada por vírgulas de valores dentro aparelho, semelhante à matriz. Por exemplo: / * Referindo-se às declarações do exemplo acima: * / / * Declarar e inicializar pontos P e Q: * / struct Dot p = {1, 1..}, Q = {3,7, -0,5}; / * Declarar e inicializar círculo o1: * / struct Circulo o1 = {{1, 0, 0}...} / / Raio é de 1, o centro está em (0, 0)
Declarações incompletas declarações incompletas são também conhecidas como as declarações para a frente. Um ponteiro para um tipo de estrutura A pode legalmente incluídos na declaração de outra estrutura B antes A foi declarado: struct A; / / incompletos struct B {struct Um ano *;}; struct A {struct B pb *;};
A primeira aparição de A chama-se incompleta, porque não há definição para isso em esse ponto. Uma declaração incompleta, é permitido aqui, porque a definição de B não precisa do tamanho da A.
Estruturas Untagged e TYPEDEFs Se a marca de estrutura é omitido, um estrutura untagged é criado. O untagged estruturas podem ser usados para declarar os identificadores na delimitado por vírgula membro declarator-lista ser do tipo de estrutura dada (ou derivados), mas alémobjetos al deste tipo não pode ser declarado em outro lugar. É possível criar um typedef ao declarar uma estrutura, com ou sem a tag: / * Com tag: * / typedef struct MYSTRUCT {... MyStruct}; MyStruct s, * ps, ARRS [10] / * mesma estrutura MYSTRUCT s, etc * / / * Sem tag: * / typedef struct {... MyStruct}; MyStruct s, ps *, ARRS [10];
Normalmente, não há necessidade de usar os dois tag e typedef: ou pode ser usado em estipo de declarações ture.
184
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
membros Untagged estrutura e união são ignorados durante a inicialização. Nota: Veja também a trabalhar com as estruturas.
Trabalhar com estruturas
Estruturas representam tipos definidos pelo usuário. Um conjunto de regras relativas à aplicação de estruturas é estritamente definido.
Atribuição As variáveis do mesmo tipo estruturado pode ser atribuído um para outro por meio de operador de atribuição simples (=). Isso irá copiar todo o conteúdo da variável a destino, independentemente do interior complexidade de uma determinada estrutura. Note-se que duas variáveis são do mesmo tipo estruturado somente se ambos são definidos pela instrução ou mesmo usando o mesmo tipo identificador. Por exemplo: / * A e b são do mesmo tipo: * / struct {Int M1, M2;} a, b; / * Mas, c, d _não_ são do mesmo tipo, embora descrições de sua estrutura são idênticas: * / struct {Int M1, M2;} c; struct {Int M1, M2;} d;
Tamanho da Estrutura O tamanho da estrutura de memória pode ser recuperada por meio do operador sizeof. É não é necessário que o tamanho da estrutura é igual à soma das suas membros tamanhos. Muitas vezes, é maior devido a certas limitações de armazenamento de memória.
Estruturas e Funções A função pode retornar um tipo de estrutura ou um ponteiro para um tipo de estrutura: MYSTRUCT func1 (void); MYSTRUCT * func2 (void);
/ * Func1 () retorna uma estrutura * / / * Func2 () retorna ponteiro para estrutura * /
Uma estrutura pode ser passada como um argumento para uma função no das seguintes maneiras: vazio func1 (MYSTRUCT s;); vazio func2 (MYSTRUCT SPTR *;);
/ * Diretamente * / / * Através de um ponteiro * /
Mikroelektronika - Soluções de software e hardware para o mundo embutido
185
CAPÍTULO 6
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Referência da Linguagem Estrutura de Acesso ao Portal
Estrutura e membros do sindicato são acessadas usando o oper seguinte seleção de dois ators: - . (Ponto final) - -> (Seta à direita) O operador . é chamado o selector membro direto e é usado para acessar diretamente um dos membros da estrutura. Suponha que o objeto s é do tipo struct S e m é um identificador de membro do tipo M declarados em s, então a expressão s.m
/ / Acesso direto a um dos membros m
é do tipo M, e representa o objeto membro m em S. O operador -> é chamado o selector membro indireto (ou ponteiro). Suponha que o objeto s é do tipo struct S e ps é um ponteiro para s. Então, se m é um membro identifier do tipo M declarados em s, a expressão ps-m>
/ / Acesso indirecto aos membros m; / / Idêntico a (* ps) m.
é do tipo M, e representa o objeto membro m em s. A expressão ps-m> é uma abreviação conveniente para (* Ps). M Por exemplo: struct MYSTRUCT { int i; char str [21]; dupla d; S SPTR} *, = &S; ... s.i = 3; SPTR -> d = 1,23;
/ / Atribuir ao membro do MYSTRUCT i s / / Atribui ao membro d de MYSTRUCT s
A expressão s.m é lvalue, desde que s é lvalue e m não é uma matriz do tipo. A expressão m SPTR-> é um lvalue menos m é um tipo de matriz.
186
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
Acessando estruturas aninhadas Se a estrutura B contém um campo cujo tipo é a estrutura A, os membros do A pode ser acessado por duas aplicações do seletores membro: struct A { int j; dupla x; }; struct {B int i; struct Um aa; dupla d; SPTR} * s,; ... s.i = 3; s.aa.j = 2; SPTR-> d = 1,23; aa.x SPTR-> = 3,14;
// // // //
atribuir atribuir atribuir atribuir
3a 2a 1.23 3.14
o membro i de B o membro j de A para o membro d de B ax membro de uma
Estrutura Singularidade Cada declaração de estrutura apresenta um tipo de estrutura única, de modo que em struct A { int i, j; dupla d; } AA, AAA; struct {B int i, j; dupla d; Bb};
os objetos aa e aaa ambos são do tipo struct A, mas os objetos aa e bb são tipos de estrutura diferente. As estruturas podem ser atribuídas apenas se a origem eo destinonação tem o mesmo Tipo: aa = AAA; AA BB =; / * Mas aa.i = aa.j = aa.d =
/ * OK: mesmo tipo, membro por membro de atribuição * / / * ILEGAL: * diferentes tipos /
você pode atribuir membro por um membro: * / bb.i; bb.j; bb.d;
Mikroelektronika - Soluções de software e hardware para o mundo embutido
187
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC
Referência da Linguagem Sindicatos
União tipos são tipos derivados partilha muitas das características sintáticas e funcional de tipos de estrutura. A diferença fundamental é que uma sindicalistas partilham a mesma memespaço de memória disponível. Nota: O mikroC PRO para PIC não suporta sindicatos anônimo (ANSI-diver gência).
Sindicatos Declaração Os sindicatos têm a mesma declaração como estruturas, com a palavra-chave União usados em vez de struct União tag {membro declarator lista};
Ao contrário das estruturas " membros, o valor de apenas um dos membros da União podem ser armazenados a qualquer momento. Aqui está um exemplo simples: União myunion { int i; dupla d; char ch; Ontem} * mu,;
/ / Tag sindicato é 'myunion'
A identificador mu, do tipo myunion, pode ser usado para prender um 2-byte int, 4-byte double ou de byte único char, mas apenas um deles, em determinado momento. O identificador pm
é um ponteiro para a união myunion.
Tamanho da União O tamanho de uma união é o tamanho de seu membro maior. Em nosso exemplo anterior, os sizeof (myunion união) e sizeof (mu) bytes de retorno 4, mas duas não são utilizadas (Acolchoado), quando mu detém a int bytes do objeto, e 3 são utilizadas quando mu detém char.
União Acesso ao Portal membros da União podem ser acessados com os seletores estrutura membro (e -.>), ser cuidado ao fazer isto: / * Referindo-se às declarações do exemplo acima: * / pm = μ mu.d = 4,016; tmp = mu.d / / OK: mu.d = 4,016
188
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
tmp = mu.i;
/ / Resultado peculiar
i am-> = 3; tmp = mu.i;
/ / OK: mu.i = 3
A terceira linha é legal, desde mu.i é um tipo integral. No entanto, o padrão de bits em mu.i corresponde a partes das anteriormente atribuídas casal. Como tal, ele provavelmente não vai
fornecer uma interpretação inteiro úteis. Quando devidamente convertido, um ponteiro para uma união pontos a cada um dos seus membros, e vice-versa.
Campos Bit Campos de bits são especificados os números de bits que podem ou não ter um associado identifier. Campos de bits oferecem uma maneira de subdividir em partes de estruturas chamado de definido pelo usuário tamanhos. Estruturas e os sindicatos podem conter campos de bits que podem ser de até 16 bits. Você não pode pegar o endereço de um campo de bits. Nota: Se você precisar manipular bits específicos das variáveis de 8 bits (Char e não assinado curto) ou registros, você não precisa declarar campos de bits. solução muito mais elegante é a utilização do mikroC PRO para a capacidade intrínseca da PIC para o acesso de bits individuais - veja Acesso Individual Bits para mais informações.
Declaração de campos de bits Campos de bits pode ser declarado apenas em estruturas e uniões. Declare uma estrutura normal ly e atribuir campos individuais como este campos (precisam ser não assinado): struct tag { não assinado declarator bitfield-lista; }
Aqui, tag é um nome opcional da estrutura; declarator bitfield-lista é uma lista de campos de bits. Cada componente requer um identificador de cólon e sua largura em bits para ser explicitamente especificado. largura total de todos os componentes não pode exceder dois bytes (16 bits). Como um objeto, estrutura campos de bits necessários dois bytes. Campos individuais são embaladas em
dois bytes da direita para a esquerda. Em bitfield-declarator lista, você pode omitir www.mecatronicadegaragem.blogspot.com identifi-
er (s) para criar uma artificial "Estofo", ignorando, assim bits irrelevante.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
189
CAPÍTULO 6
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Referência da Linguagem
Por exemplo, se há uma necessidade de manipular bits apenas 2-4 de registrar-se como um bloco, criar uma estrutura como esta: struct { não assinado : 2, mybits: 3;
/ / Passar bits 0 e 1, nenhum identificador aqui / / Relevantes bits 2, 3 e 4 / / Bits 5, 6 e 7 são implicitamente deixados de fora
Myreg};
Aqui está um exemplo: typedef struct lo_nibble: hi_nibble: high_byte:
{ 4; 4; 8;} myunsigned;
que declara o tipo estruturado myunsigned contendo três componentes: lo_nibble (Bits 3 .. 0), hi_nibble (Bits 7 .. 4) e high_byte (Bits 15 .. 8).
Acesso campos de bits Campos de bits pode ser acessado da mesma forma como o membros da estrutura. Uso direto eo selector de membro indirectos (. e ->). Por exemplo, poderíamos trabalhar com os nossos pré-
riormente declarada myunsigned como este: / / Este exemplo escreve byte baixo do campo de bit do tipo de myunsigned Port0: Value_For_PORT0 myunsigned; vazio main () { ... Value_For_PORT0.lo_nibble = 7; Value_For_PORT0.hi_nibble = 0x0C; * P0 = (char *) (Void *) & Value_For_PORT0; / / Typecasting: / / 1. endereço da estrutura para ponteiro para void / / 2. ponteiro para void para ponteiro para char / / 3. dereferencing para obter o valor }
190
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Idioma Referência
Conversões de Tipo A mikroC PRO para PIC é uma linguagem estritamente digitadas, com cada operadora, a declaração e função exigente operandos devidamente digitado / argumentos. No entanto, nós muitas vezes têm de usar objetos de "Descasamento" tipos de expressões. Nesse caso, tipo conversão é necessário. Conversão de objeto de um tipo que significa o tipo de objeto é alterado para outro tipo. A mikroC PRO para PIC define um conjunto de conversões para o padrão interno tipos, desde pelo compilador quando necessário. Para obter mais informações, consulte o Conversões Standard. A conversão é necessária nas seguintes situações: - Se uma instrução requer uma expressão do tipo especial (de acordo com def idioma rial), e usamos uma expressão de tipo diferente, - Se um operador requer um operando de tipo particular, e nós usamos um operando de difediferentes tipos, - Se uma função requer um parâmetro formal de determinado tipo, e passá-lo um objeto de tipo diferente, - Se uma expressão a seguir a palavra-chave retorno não coincide com o declarado função tipo de retorno, - Se intializing um objeto (na declaração) com um objeto de tipo diferente.
Nessas situações, o compilador irá fornecer uma conversão automática implícita de tipos, sem qualquer interferência do programador. Além disso, o programador pode exigir a conversão explicitamente meio do distribuir os papéis operador. Para obter mais informações, consulte a conversão de tipo explícito.
Standard Conversões Ao usar a expressão aritmética, como a + b, onde um e b são de diferentes tipos de aritmética, o mikroC PRO para PIC realiza conversões de tipo implícito antes a expressão é avaliada. Essas conversões padrão incluem promoções "Inferiores" tipos de "Superior" tipos, no interesse da precisão e consistência. Atribuir um objeto de caráter assinado (como uma variável) a um objeto resulta integral na extensão de sinal automático. Objetos do tipo signed char sempre usar a extensão de sinal; objetos do tipo unsigned char byte sempre tem seus altos definido para zero quando convertido para int.
Convertendo um tipo mais parte integrante de um tipo mais curto trunca os bits de ordem superior e folhas de bits de baixa ordem inalterada. Convertendo um tipo mais curto parte integrante de um mais tipo qualquer sinal estende-se ou zero preenche os bits extra de o novo valor, dependendo se o tipo mais curto é assinado ou não assinado, respectivamente. Mikr oele
www.mecatronicadegaragem.blogspot.com
ktronika - Soluções de software e hardware para o mundo embutido
191
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC
Idioma Referência
Nota: Conversão de dados de ponto flutuante em valor integral (em tarefas ou através de typecast explícito) produz resultados corretos apenas se o flutuar valor não exceda o escopo de destino tipo integral.
Detalhes: Aqui estão os passos que o mikroC PRO para PIC utiliza para converter os operandos em uma arithexpressão aritmética: Em primeiro lugar, qualquer tipo de pequeno integrais são convertidas de acordo com as seguintes regras: 1. 2. 3. 4. 5.
char converte em int signed char converte em int, com o mesmo valor curto converte em int, com o mesmo valor, sinal estendido unsigned short converte em int, com o mesmo valor, zero-preenchida enum converte em int, com o mesmo valor
Depois disso, todos os dois valores associados a um operador ou são int (Incluindo o tempo e não assinado modificadores) ou flutuar (Equivalente a dupla e long double na mikroC PRO para PIC). 1. Se um dos operandos for float, o outro operando é convertido para float. 2. Caso contrário, se um dos operandos for unsigned long, o outro operando é convertido para unsigned long.
3. Caso contrário, se um dos operandos for longo prazo, então o outro operando é convertido para tempo.
4. Caso contrário, se um dos operandos for unsigned, o outro operando é convertido para não assinado.
5. Caso contrário, ambos os operandos são int. O resultado da expressão é do mesmo tipo que a dos dois operandos. Aqui estão alguns exemplos de conversão implícita: 2 + 3.1 04/05 * 3. 3. * 04/05
Ponteiro de conversão Tipos ponteiro pode ser convertidas para outros tipos de ponteiro usando o mecha typecastingnismo: char * Str; int * Ip; str = (char *) De IP;
Mais genericamente, o elenco * Tipo irá converter um ponteiro para o tipo "Ponteiro para tipo ".
192
www.mecatronicadegaragem.blogspot.com
Mikroelektronika - SOFTWARE E soluções de hardware para embutidos mundo
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
Concersions tipo explícito (conversão de tipo)
Na maioria das situações, o compilador irá fornecer uma conversão automática implícita de tipos quando necessário, sem qualquer interferência do usuário. Além disso, o usuário pode converter explicitamente um operando em outro tipo usando o operador unário prefixo distribuir os papéis operador: (Tipo) de objeto
Isto irá converter objeto a um especificada tipo. Parênteses são obrigatórios. Por exemplo: / * Vamos ter duas variáveis do tipo char * / char a, b; / * Linha a seguir para coagir um unsigned int * / (Unsigned int) a; / * Linha a seguir irá coagir a dobrar, b então forçar a dupla automaticamente, * /: Resultando num valor do tipo double (Double) a + b; / / equivalente a ((double) a) + b;
Declarações A declaração apresenta um ou vários nomes para um programa - informa o compiler o que o nome representa, o que é seu tipo, o que operações são permitidas com ele, etc Esta seção revisa os conceitos relacionados às declarações: declarações, definições, especificadores de declaração e inicialização. A gama de objetos que podem ser declaradas inclui: - Variáveis Constantes - Funções -Tipos - Tags estrutura sindical, e enumeração membros Estrutura membros da União Europeia - Matrizes de outros tipos - Declaração de rótulos - Preprocessor macros
Mikroelektronika - Soluções de software e hardware para o mundo embutido
193
CAPÍTULO 6
www.mecatronicadegaragem.blogspot.com
Referência da Linguagem
mikroC PRO para PIC
Declarações e Definições Definindo declarações, também conhecido como definições, ao lado de introduzir o nome de um objeto, também estabelecer a criação (onde e quando) de um objeto, isto é, a alocação ção da memória física e sua inicialização possível. Referenciando declarações, ou apenas declarações, basta fazer seus identificadores e tipos conhecidos para o compilador. Aqui está uma visão geral. Declaração é também uma definição, excepto se:
- Declara uma função sem especificar o seu corpo - Tem o extern especificador, e não tem Inicializador ou organismo (no caso de func.) - É o typedef declaração Não pode ser declarações de referência para muitos o mesmo identificador, especialmente em um declaração de vários programas, mas apenas uma definição para esse identificador é permitido. Por exemplo: / * Aqui está uma declaração de Max nondefining função; * / / * Se limitou a informar compilador que máxima é uma função * / int max (); / * Aqui está uma definição do valor máximo da função: * / int max (int x, int y) { retorno (X> y =)? x: y; } / * Definição da variável i * / int i; / * Seguindo a linha é um erro, eu já está definido! * / int i;
Declarações e declarators A declaração contém especificador (s), seguido por um ou mais identificadores (declares). A declaração começa com especificadores de classe de armazenamento opcional, especificadores de tipo, e outros modificadores. Os identificadores são separados por vírgulas e a lista é terminados por um ponto e vírgula. Declarações de identificadores de variáveis têm o seguinte padrão: armazenamento de classe [qualificador de tipo] Tipo var1 [= inic1], var2 [= inic2], ... ;
onde var1, var2, ... são qualquer seqüência de identificadores distintos com inicializadores opcional. Cada uma das variáveis é declarado de Tipo, se omitido, tipo padrões para int. A especificador armazenamento de classe pode tomar os valores externo, estático, registrar, ou o
194
Mikroelektronika - SOFTWARE E soluções de hardware para embutidos mundo
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
padrão auto. Opcional tipo de qualificação pode assumir valores const ou voláteis. Para mais detalhes, consulte as classes de armazenamento e de qualificação de tipo.
Por exemplo: / * Cria três variáveis do tipo inteiro chamado x, y e z e inicializar X e Y para os valores 1 e 2, respectivamente: * / int x = 1, y = 2, z / / z continua a ser inicializado / * Criar um q variável de ponto flutuante com modificador estático, e inicializá-lo para 0,25: * / float estático q = 0,25;
Estas são todas as declarações de definição, o armazenamento é alocado e qualquer inicializadores opcional são aplicadas.
Linkage
Um programa executável é normalmente criado através da compilação de vários independentes transunidades de lamento, em seguida, ligando os arquivos com as bibliotecas de objeto resultante preexistente. Um termo unidade de tradução que se refere a um arquivo de código fonte, juntamente com todos os arquivos incluídos, mas comas linhas de origem omitida pelas directivas de pré-processamento condicional. Um problema arises quando o mesmo identificador é declarado em escopos diferentes (por exemplo, em diferentes arquivos), ou declarada mais de uma vez no mesmo escopo.
A articulação é um processo que permite que cada instância de um identificador deve ser associado corretamente com um determinado objeto ou função. Todos os identificadores têm uma ligação de dois atributos, estreitamente relacionado com o seu âmbito: ligação externa ou a ligação interna. Estes atributos são determinados pela localização e formato de suas declarações, together com um uso (ou implícitas por default) explícita do especificador de classe de armazenamento estáticas ou externo.
Cada instância de um identificador específico com ligação externa representa o mesmo objeto ou função em toda a conjunto de arquivos e bibliotecas que compõem o programa. Cada instância de um identificador específico com ligação interna representa o mesmo objeto ou função dentro de um único arquivo.
Regras de Linkage Os nomes locais têm ligações internas, o mesmo identificador pode ser usado em diferentes arquivos
para significar diferentes objetos. Global nomes têm ligações externas; identificador significa www.mecatronicadegaragem.blogspot.com o mesmo objeto ao longo de todos os arquivos do programa. Se o mesmo identificador aparece com ligação interna e externa dentro do mesmo arquivo, o identificador terão ligação interna. Mikroelektronika - Soluções de software e hardware para o mundo embutido
195
CAPÍTULO 6
www.mecatronicadegaragem.blogspot.com
Referência da Linguagem
mikroC PRO para PIC
Linkage Regimento Interno 1. nomes de alcance arquivo, explicitamente declaradas como estático, tem ligação interna 2. nomes de alcance arquivo, explicitamente declaradas como const e não explicitamente declarado como externo, têm ligação interna 3. typedef nomes têm ligações internas 4. constantes enumeração tem ligação interna
Linkage regras externas 1. nomes de alcance de arquivo, que não satisfaçam a qualquer das afirmado anteriormente interna regras de articulação, têm ligação externa
A classe de armazenamento especificadores auto e Registre-se não pode aparecer em uma externa dezembrovai fazendo. Não existe definição mais do que uma externa pode ser dado para cada identificador de unidade de tradução declarado com ligação interna. Uma definição externa é uma externa declaração que define um objeto ou uma função e também aloca um dispositivo de armazenamento. Se um identificador declarado com ligação externa é usada em uma expressão (excepto como parte do operando da sizeof), então exatamente uma definição externa desse identificador deve
estar em algum lugar todo o programa.
Classes de armazenamento
Associando os identificadores de objetos requer que cada identificador para ter pelo menos dois attribnutos: classe de armazenamento e tipo (por vezes referido como o tipo de dados). A mikroC PRO para PIC compilador deduz destes atributos a partir de declarações implícitas ou explícitas no código-fonte. A classe de armazenamento dita a localização (segmento de dados, registo, heap ou pilha) de objeto e sua duração ou vida (o tempo todo funcionamento do programa, ou durante execução de alguns blocos de código). Uma classe de armazenamento pode ser estabelecido pelo sinfiscal de uma declaração, por sua colocação no código-fonte, ou por ambos os fatores: tipo de armazenamento de classe identificador
O armazenamento especificadores de classe no mikroC PRO para PIC são: auto Registre-se estáticas extern
www.mecatronicadegaragem.blogspot.com 196 Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
Auto A auto modificador é usado para definir que uma variável local tem uma duração local. Esta é o padrão para as variáveis locais e raramente é usada. auto não pode ser usado com globals. Veja também as funções.
Registre-se
No momento o modificador Registre-se tecnicamente não tem nenhum significado especial. A mikroC PRO para PIC compilador simplesmente ignora os pedidos de atribuição de registo.
Estático Um nome global declarada com o estáticas especificador tem ligação interna, o que significa que ela é local para um determinado arquivo. Veja Linkage para mais informações. Um nome local declarada com o estáticas especificador tem duração estática. Use estáticas com uma variável local para preservar o valor passado entre chamadas sucessivas à função que desempenha. Ver Duração para mais informações.
Extern Um nome declarado com o extern especificador tem ligação externa, a menos que tenha sido anteriormente declarados como tendo ligação interna. A declaração não é uma definição se tem o extern especificador e não é inicializado. A palavra-chave extern é opcional para um Função protótipo. Use o extern modificador para indicar que o armazenamento real e do valor inicial do variável, ou corpo da função, é definido em um módulo separado do código-fonte. Funcções declaradas com extern são visíveis em todos os arquivos-fonte do programa, menos que a função é redefinida como estático. Veja Linkage para mais informações.
Tipo, qualificação Os qualificadores do tipo const e voláteis são opcionais nas declarações e não realmente afetar o tipo de objeto declarado.
Eliminatórias Const O qualificador const implica que um objeto declarado não irá alterar o seu valor durante tempo de execução. Em declarações com o const qualificador de todos os objetos precisam ser inicializadas. A mikroC PRO para PIC trata objetos declarados com o const qualificador o mesmo como literais ou constantes de pré-processamento. Se o usuário tenta alterar um objeto declarado com o const compilador qualificador irá reportar um erro.
www.mecatronicadegaragem.blogspot.com
Mikroelektronika - Soluções de software e hardware para o mundo embutido
197
CAPÍTULO 6
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Referência da Linguagem Por exemplo: const PI dupla = 3,14159;
Qualificador volátil
O qualificador voláteis implica que uma variável pode alterar seu valor durante a execução independentemente do programa. Use o modificador volátil para indicar que uma variável pode ser alterado por uma rotina de fundo, uma rotina de interrupção, ou a porta I / O. Declarando um objeto a ser voláteis, adverte o compilador não fazer suposições sobre o valor de um objeto ao mesmo tempo avaliar expressões em que ela ocorre porque o valor do podem ser alteradas a qualquer momento.
Especificador typedef
O especificador typedef introduz um sinônimo para um tipo especificado. O typedef dezembrocombinar declarações são usadas para construir mais curto ou mais nomes convenientes para os tipos já definida pela linguagem ou declarada pelo usuário. O especificador typedef ocupa o primeiro lugar na declaração: typedef sinónimos;
A typedef palavra-chave atribui sinônimo de . A sinônimo deve ser um identificador válido. Uma declaração a partir do typedef especificador não introduz um objeto ou uma função de um determinado tipo, mas sim um novo nome para um determinado tipo. Em outras palavras, o declaração typedef é idêntico a um"Normal" declaração, mas em vez de objetos, declara tipos. É uma prática comum para nomear identificadores tipo personalizado com início de ing letra maiúscula - isso não é exigido pelo mikroC PRO para a PIC. Por exemplo: / * Vamos declarar uma sinônimo de "unsigned long int" * / unsigned int typedef longo Distância; / * Agora, sinônimo "Distância" pode ser utilizado como identificador de tipo: * / Distância i; / / declara variável i de int unsigned long
Na typedef declaração, como em qualquer outra declaração, vários tipos podem ser declarado de uma vez. Por exemplo: typedef int
* PTI, Array [10];
Aqui, Pti é um sinônimo para o tipo "Ponteiro para int ", e Array é um sinônimo para o tipo "Matriz de 10 int elementos ".
asm Declarações
198
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
A mikroC PRO para PIC permite a incorporação de montagem no código-fonte por meio da declaração asm. As declarações _asm e _asm Também são permitidas no mikroC PRO para PIC e têm o mesmo significado. Note-se que cannnot numerais ser usados como endereços absolutos de SFR e GPR variáveis em instruções de montagem. Nomes simbólicos pode ser utilizado em substituição (anúncio será exibido estes nomes, bem como endereços). As instruções de montagem podem ser agrupados pela asm palavra-chave (ou _, Ou _asm): asm { bloco de instruções de montagem }
Existem duas maneiras de embeding instruções de montagem único código C: asm instruções de montagem;
e asm instruções de montagem
Nota: O ponto e vírgula e LF são encerra âmbito asm para instruções de montagem único. Este é a razão pela qual a sintaxe a seguir não é bloco asm: asm { bloco de instruções de montagem }
Este código será interpretado como única linha asm vazio seguido pelo composto C declaração. A mikroC PRO para PIC comentários (tanto de linha única e multi-linha) são permitidos em incorporado código de montagem. Se você tem uma variável global "g_var", que é do tipo longo (ou seja, 4 bytes), estiver de acessá-lo assim: MOVF MOVF MOVF MOVF ...
_g_var _g_var _g_var _g_var etc
0, 1, 2, 3,
0 0 0 0
; Coloca byte menos significativo de g_var no registo W ; Segundo byte de _g_var; corresponde a Oi (g_var) ; Superior (g_var) ; Máxima (g_var)
Se você quiser saber detalhes sobre a sintaxe asm apoiado por mikroC PRO para PIC ele é recomendado para estudar asm lst e arquivos gerados pelo compilador. Também é recomended para verificar "as linhas de código Incluir nos arquivos de saída" na caixa Configurações de saída Mikroelektronika - Soluções de software e hardware para EMBEDDED MUNDO
199
CAPÍTULO 6
www.mecatronicadegaragem.blogspot.com
Referência da Linguagem
mikroC PRO para PIC
Nota: Compiler não esperar que os bancos de memória para ser alterado dentro do conjunto código. Se o usuário quiser Para fazer isso, então ele deve restaurar o banco de seleção anterior. tópicos relacionados: mikroC PRO para PIC specifcs
Inicialização O valor inicial de um objeto declarado pode ser definido no momento da declaração (initialização). Uma parte da declaração que especifica a inicialização é chamado inicializador. Inicializadores para globals e estáticas objetos devem ser constantes ou expressões constantessões. O inicializador para um objeto automático pode ser qualquer expressão jurídica que avaminado a uma atribuição compatível com valor para o tipo das variáveis envolvidas. tipos escalares são inicializados com uma única expressão, que opcionalmente pode ser fechado chaves. O valor inicial de um objeto é o da expressão, as mesmas restrições para o tipo e conversões para atribuições simples são aplicados para inicializações também. Por exemplo: int i = 1; char * S = "Olá"; struct c complexo = {0,1, -0,2}; / / Onde "complexo" é uma estrutura (float, float)
Para estruturas ou uniões com duração de armazenamento automático, o inicializador deve ser um dos seguintes procedimentos: - Uma lista de inicializador. - A única expressão compatível com o sindicato ou o tipo de estrutura. Neste caso, a inicial valor do objeto é o da expressão. Por exemplo: struct dot {int x; int y;} {m = 30, 40};
Para mais informações, consulte Estruturas e Sindicatos. Além disso, você pode inicializar matrizes do tipo de personagem com uma seqüência literal, opcionalmente entre chaves. Cada personagem na seqüência de caracteres, incluindo o terminador nulo, inicializes elementos sucessivos na matriz. Para obter mais informações, consulte Matrizes.
Inicialização automática A mikroC PRO para PIC não fornecer a inicialização automática para objetos. Unini-
200
Mikroelektronika - Softwares e soluções de hardware para Embedded World
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
globals tialized e objetos com duração estática terá valores aleatórios de memteoria.
FUNÇÕES
As funções são centrais para a programação C. As funções são geralmente definidas como subprogramas gramas que retornar um valor baseado em uma série de parâmetros de entrada. Valor de retorno da função pode ser usada em expressões - tecnicamente, chamada de função é considerada ser uma expressão como outra qualquer. C permite que uma função para criar resultados que não o seu valor de retorno, denominada lado os efeitos. Muitas vezes, o valor de retorno da função não é usada, dependendo do lado os efeitos. Essas funções são equivalentes às procedimentos linguagem de programação de outras linguagens, como Pascal. C não faz distinção entre procedimento e função funções os dois papéis. Cada programa deve ter uma única função externo chamado principal marcando a entrada ponto do programa. As funções são normalmente declarado como protótipos no padrão ou fornecido pelo usuário arquivos de cabeçalho, ou dentro de arquivos de programa. Funções têm ligação externa por padrão e são normalmente acessíveis a partir de qualquer arquivo no programa. Isso pode ser restrita usando o estáticas classe de armazenamento especificador na declaração da função (ver Classes de armazenamento e ligação). Nota: Verifique as especificidades PIC para obter mais informações sobre as funções ' limitações na Microcontroladores PIC compatível.
Função Declaração As funções são declaradas em arquivos do usuário de origem ou disponibilizar, ligando-precom empilhados bibliotecas. A sintaxe da declaração da função é: function_name tipo (parâmetro-declarator-list);
A function_name deve ser um identificador válido. Esse nome é usado para chamar a função, ver as chamadas de função por mais da informação. tipo representa o tipo de resultado da função, e pode ser de qualquer padrão ou usuário tipo definido. Para funções que não retornam valor vazio tipo deve ser usado. O tipo pode ser omitida nas declarações função global, e assumirá a função int tipo por padrão.
Tipo de função também pode ser um ponteiro. Por exemplo, float * significa que uma função resultado é um ponteiro para float. O ponteiro genérico void * também é permitido.
www.mecatronicadegaragem.blogspot.com Mikroelektronika - Software e hardware SOLUÇÕES PARA mundo embutido
201
CAPÍTULO 6
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Referência da Linguagem A função não pode retornar uma matriz ou de outra função.
Dentro parênteses, declarator parâmetro-lista é uma lista de argumentos formais que a função recebe. Estes declarators especificar o tipo de cada parâmetro de função. O compilador usa essa informação para verificar a validade das chamadas de função. Se a lista é vazio, um função não tem argumentos. Além disso, se a lista é vazio, uma função Também não tem quaisquer argumentos, note que este é o caso somente quando vazio pode ser usado como um tipo de argumento. Ao contrário de declaração de variável, cada um argumento na lista de suas necessidades de especificador de tipo próprio e qualificador possível const ou voláteis.
Protótipo de função A função pode ser definido apenas uma vez no programa, mas pode ser declarado várias vezes, supondo que as declarações são compatíveis. Quando declarar uma função, o formal argumento o identificador não precisa ser especificado, mas faz seu tipo. Esse tipo de declaração, vulgarmente conhecida como a protótipo da função, permite uma melhor controle sobre número de argumento, verificação de tipo e conversões de tipo. O nome de um parâmetro no protótipo de função tem o seu âmbito limitado ao protótipo. Isso permite que um parâmetro identificador de ter nomes diferentes em declarações diferentes de uma mesma função: / * Aqui estão dois protótipos da mesma função: * / int teste (const char *) int teste (p const char *)
/ * Declara * Teste de função / / * Declara a mesma função de teste * /
Função protótipos são muito úteis na documentação de código. Por exemplo, a função Cf_Init tem dois parâmetros: Controle de porta e porta de dados. A questão é, que é qual? O protótipo de função: vazio Cf_Init (char * Ctrlport, char * Dataport);
deixa claro. Se um arquivo de cabeçalho contém protótipos de função, o usuário pode ler que arquivo para obter as informações necessárias para escrever programas que chamar essas funções. Se um parâmetro protótipo inclui um identificador, então o Indentificador é usado apenas para o erro verificação.
202
Mikroelektronika - SOLUÇÕES EM SOFTWARE E HARDWARE Para embutidos mundo
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
Definição de Função Definição da função consiste em sua declaração e função do corpo. A corpo da função é tecnicamente um bloco - uma seqüência de definições locais e instruções entre dentro de chaves {}. Todas as variáveis declaradas dentro do corpo da função são locais à função,
ou seja, têm um alcance de função. A própria função só pode ser definido no âmbito do arquivo, o que significa que função declarações não podem ser aninhados. Para retornar o resultado da função, use o retorno declaração. O retorno na declaração funções do vazio tipo não pode ter um parâmetro - na verdade, a instrução de retorno pode ser omitido por completo, se é a última declaração no corpo da função. Aqui está uma definição de função de exemplo: / * Função max retorna mais um dos seus dois argumentos: * / int max (int x, int y) { retorno (X> y =)? x: y; }
Aqui está uma pequena função que depende de efeitos colaterais em vez de valor de retorno: / * Função Descartes converte coordenadas (x, y) para polares (r, fi): * / # Include vazio polar (dupla x, dupla y, dupla * R, dupla * Fi) { * R = sqrt (x * x + y * y); * Fi = (x == 0 & & y == 0)? 0: atan2 (y, x); retorno; / * essa linha pode ser omitido * / }
Function reentrância reentrância funções é permitido se a função não tem parâmetros e locais variveis, ou se as variáveis locais são colocadas no espaço de Rx. Lembre-se que o PIC tem pilha e memória limitações que podem variar muito entre os MCUs.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
203
CAPÍTULO 6
www.mecatronicadegaragem.blogspot.com
Idioma Referência
mikroC PRO para PIC
Chamadas de função e argumento de conversão Chamadas de função A função é chamada com argumentos reais colocados na mesma seqüência em que seus correspondentes parâmetros formais. Use a função chamada operador (): function_name (expression_1, ..., expression_n)
Cada expressão na chamada de função é uma argumento real. Número e tipos de argumentos reais devem coincidir com as dos parâmetros da função formal. Se os tipos não partida, as conversões de tipo implícitas regras serão aplicadas. argumentos reais podem ser de qualquer complexidade, mas a ordem da sua avaliação não é especificado. Após a chamada de função, todos os parâmetros formais são criados como objetos locais inicializado os valores dos argumentos reais. Após voltar de uma função, um objeto temporário é criado no local da chamada, e é inicializado com a expressão do retorno declaração. Isto significa que a chamada de função como um operando na expressão complexa é tratada como um resultado da função. Se a função tem nenhum resultado (tipo resultado nulo) ou o não é necessário, em seguida, o fun-
da de consulta pode ser escrita como uma expressão de auto-contidas. Em C, os argumentos escalares são sempre passados para a função de valor. A função pode modificar os valores dos seus parâmetros formais, mas este não tem efeito sobre o argumento realmentos na rotina de chamada. Um objeto escalar podem ser passadas através do endereço, se uma forparâmetro formal for declarado como um ponteiro. O objeto pontiagudo pode ser acessado por * usando o operador de indireção. / / Por exemplo, Soft_Uart_Read leva o ponteiro para a variável de erro, / / Para que ele possa alterar o valor de um argumento real: Soft_Uart_Read (e erro); / / O código a seguir seria errado, você deve passar o valor / / Variável de erro para a função: Soft_Uart_Read (erro);
Argumento Conversões Se um protótipo de função não tenha sido previamente declarada, o mikroC PRO para PIC converte argumentos integral para uma função chamada de acordo com o aumento integral (Expansão) regras descritas no Standard conversões. Se um protótipo de função está em escopo, o mikroC PRO para PIC converte o argumento passado para o tipo de parâmetro declarado de acordo com as mesmas regras de conversão como em estado de atribuição mentos.
204
www.mecatronicadegaragem.blogspot.com
Mikroelektronika - Software e Soluções de hardware para Embedded World
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
Se um protótipo estiver presente, o número de argumentos devem ser iguais. Os tipos necessidade de ser compatível apenas na medida em que uma tarefa pode convertê-los legalmente. A utilizador pode sempre usar uma conversão explícita para converter um argumento para um tipo que é aceicapaz de um protótipo de função.
Nota: Se o protótipo da função não corresponde a definição da função real, o mikroC PRO para PIC irá detectar isto se e somente se essa definição está na mesma unidade de compilação como o protótipo. Se você criar uma biblioteca de rotinas com o arquivo de cabeçalho correspondente protótipos, considerar a inclusão que o arquivo de cabeçalho quando você compilar a biblioteca, de modo que qualquer discrepâncias entre os protótipos e definições reais serão detectados. O compilador também é capaz de forçar argumentos para alterar o tipo para uma adequada. Considere o seguinte código: int limite = 32; char ch = 'A'; tempo res; / Protótipo / extern longo func (longa par1, tempo par2); main () { ... res = func (ch-limite); }
/ Chamada de função /
Desde que o programa tem a função protótipo para função, ele converte limite e ch para tempo, usando as regras de atribuição, antes de coloca-los na pilha para a chamada para func.
Sem o protótipo da função, limite e ch seria colocada na pilha como um inteiro e um personagem, respectivamente, nesse caso, a pilha passado para func não combinar com o tamanho ou o conteúdo que func espera, que pode causar problemas.
Reticências Operador ('...')
O ('...') reticências é composto por três períodos sucessivos, sem espaços de intervenção. Uma elipse pode ser usado nas listas argumento formal de protótipos de função para indicar uma número variável de argumentos ou argumentos com tipos variados. Por exemplo: vazio func (int n, char ch, ...);
Esta declaração indica que a função será definida de tal forma que as chamadas devem ter pelo menos dois argumentos, int e char, mas também pode ter qualquer número de alémargumentos al.
www.mecatronicadegaragem.blogspot.com
Mikroelektronika - Soluções de software e hardware para o mundo embutido
205
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
Referência da Linguagem
mikroC PRO para PIC
Exemplo: # Include
int addvararg (char ,...){ A1 ap va_list; char temp; va_start (AP, A1); while (temp = va_arg (ap, char)) temp + = a1; retorno a1; }
int res; vazio main () {
addvararg res = (1,2,3,4,5,0); addvararg res = (1,2,3,4,5,6,7,8,9,10,0); }
206
Mikroelektronika - SOLUÇÕES EM SOFTWARE E HARDWARE Para embutidos mundo
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
OPERADORES Operadores são símbolos que provocam alguma computação quando aplicado a variáveis e outros objetos em uma expressão. Operadores Aritméticos Operadores de Atribuição Operadores bit a bit Operadores lógicos Referência / Operadores Indireta Os operadores relacionais Membro Seletores Estrutura Operador Vírgula , Operador condicional ? : Matriz do operador subscrito [] Função de operador de call () sizeof Operador
Preprocessor Operadores # e # #
Mikroelektronika - Soluções de software e hardware para o mundo embutido
207
CAPÍTULO 6
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Referência da Linguagem Operadores Presidence e Associativismo
Há 15 categorias de precedência, alguns deles contêm um único operador. Operadores na mesma categoria têm a mesma precedência. Se duplicatas de operadores aparecem na tabela, a primeira ocorrência é unário e segundo binário. Cada categoria tem uma regra de associatividade: da ), Ou da direita para a esquerda para a direita ( esquer ). Na ausência de parênteses, essas regras resolver um agrupamento de expresda ( ções com os operadores de precedência igual. Precedência Operando Operadores Associativis 15
2
14
1
13
2
12
2
+ -
11
2
<<>>
10
2
9
2
8
2
&
7
2
^
6
2
|
5
2
& &
4
2
| |
3
3
?:
2
2
1
2
() []. -> ! ~ + + - + - * & (Tipo) sizeof *% /
<<=>> = ==! =
= *= / =% = + = -= & ^ = | = <<=>> ,
Operadores Aritméticos Os operadores aritméticos são usados para realizar cálculos matemáticos. Eles têm operandos numéricos e retornar os resultados numéricos. O tipo de char tecnicamente representa números inteiros pequenos, de modo que o char variáveis podem ser usadas como operandos em aritmética operações. Todos os operadores aritméticos associam da esquerda para a direita.
208
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
Operador
Operação
Precedência
Operadores Binários +
Além
12
-
subtração
12
*
multiplicação
13
/
divisão
13
%
operador de módulo retorna o resto da inteiro divisão (não pode ser usado com pontos flutuantes) Operadores unários
13
+
mais unário não afeta o operando
14
-
unário mudanças menos o sinal do operando
14
incremento adiciona um ao valor do operando. PostIncrement adiciona um ao valor do operando 14 depois que ele avalia, enquanto pré-incremento adiciona uma t um d do valor li decremento subtrai da operando. Postdecrement subtrai um do 14 valor do operando depois que ele avalia, enquanto prédi i i b i d li Nota: O operador * é sensível ao contexto e também pode representar a referência de ponteiro operador. ++
Mikroelektronika - Soluções de software e hardware para o mundo embutido
209
CAPÍTULO 6
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Referência da Linguagem Binário Operadores aritméticos
Divisão de dois números inteiros retorna um inteiro, enquanto a restante é simplesmente truncado: / * Por exemplo: * / 04/07 / * equivale a 1 * / 7 * 04/03 / * equivale a 5 * / / * Mas * / 7. * 3. / 4.;
/ * Igual a 5,25, porque estamos trabalhando com flutuadores * /
Restante operando % trabalha apenas com números inteiros, o sinal do resultado é igual ao sinal do primeiro operando: / * Por exemplo: * / 9% 3; / * igual a 0 * / 7% 3 / * equivale a 1 * / -7% 3; / * igual a -1 * /
Aritmética Os operadores podem ser usados para manipular caracteres: 'A' + 32; 'G' - 'A' + 'a';
/ * * É igual a 'A' (ASCII) / / * É igual a 'g' (ASCII e EBCDIC) * /
Operadores aritméticos unários Unários operadores + + e - são os únicos operadores em C que pode ser prefixo (Por exemplo, + + K, - K) ou postfix (por exemplo, k + +, k -). Quando usado como prefixo, os operadores + + e - (Pré-incremento e preDecrement) adicionar ou subtrair um valor do operando antes da avaliação. Quando usado como suficorreção, os operadores + + e - (Pós e postdecrement) adicionar ou subtrair uma do valor do operando após a avaliação. Por exemplo: int j = 5; j = k + +;
/ * k = k + 1, k = j, o que nos dá k = 6, j = 6 * /
mas: int j = 5; j = k + +;
210
/ * K = j, k = k + 1, que nos dá k = 5, j = 6 * /
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
Os operadores relacionais Use operadores relacionais para testar a igualdade ou desigualdade de expressões. Se uma expresSion avalia ser verdadeiro, ele retorna 1, caso contrário ele retorna 0. Todos os operadores relacionais associam da esquerda para a direita.
Visão geral sobre operadores relacionais Operador
Operação
Precedência
==
igualdade
9
!=
não igual
9
>
superior
10
<
menos de
10
>=
igual ou superior
10
<=
inferior ou igual
10
Operadores relacionais em expressões Precedência dos operadores aritméticos e relacionais é designado de modo a permitir expressões complexas sem parênteses para esperar significado: a + 5> = c - 1.0 / e
/ *? (A + 5)> = (c - (1,0 / e)) * /
Não se esqueça que os operadores relacionais retornam 0 ou 1. Considere o seguinte exemplos: / * Ok: * / 5> 7 10 <20 =
/ * Retorna 0 * / / * Retorna 1 * /
/ * Isso pode ser complicado: * / 13 8 ==> 5 / * Retorna 0, como: 8 == (13> 5)? 8 == 1 ? 0 * / 14> 5 < 3 / * retorna 1, como: (14> 5) <3? 1 <3? 1 * / a
Mikroelektronika - Soluções de software e hardware para o mundo embutido
211
CAPÍTULO 6
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Referência da Linguagem Operadores bit a bit
Usar os operadores bit a bit para modificar bits individuais dos operandos numéricos. Operadores bit a bit adjunto da esquerda para a direita. A única exceção é o com-bit a bit operador plementar ~ que associa a partir de direita para a esquerda.
Visão geral sobre operadores bit a bit Operador
Operação
Precedência
&
E bit a bit; compara pares de bits e retorna 1 se ambos os bits forem 1, caso contrário retorna 0 bit a bit (inclusive) OR; compara pares de bits e retorna 1 se um ou ambos os bits são 1, caso contrário retorna 0 bit a bit OU exclusivo (XOR); compara pares de bits e retorna 1 se os bits são complementares, outras retorna sábio 0
8
|
^
6
7
~
bit a bit complemento (unário); inverte cada bit
14
<<
desvio para a esquerda bit a bit; move os bits para a esquerda, as devoluções bi i à à direita d bit a ib 0 os bits bi para i aà deslocamento bit;i move
11
>>
direita, discartões bit da extrema-direita e se unsigned atribui 0
11
Operações Lógicas sobre Nível de Bit &
0
1
|
0
1
^
0
1
0
0
0
0
0
1
0
0
1
1
0
1
1
1
1
1
1
0
~
0
1
1
0
Operadores bit a bit &, | e ^ realizar operações lógicas sobre os pares apropriado de bits de seus operandos. Operador ~ complementa cada bit do seu operando. Por exemplo:
212
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
0x1234 e 0x5678
/ * Igual a 0x1230 * /
/ * Porque .. 0x1234: 0001 0010 0011 0100 0x5678: 0101 0110 0111 1000 ---------------------------E: 0001 0010 0011 0000 .. ou seja, 0x1230 * / / * Do mesmo modo: * / 0x1234 | 0x5678; ^ 0x1234 0x5678; ~ 0x1234;
/ * Igual * 0x567C / / * Igual * 0x444C / / * Igual * 0xEDCB /
Nota: O operador & também pode ser um operador de referência de ponteiro. Consulte os ponteiros para mais informações.
Shift Operadores bit a bit
Operadores binários << e >> mover os bits do operando à esquerda por uma série de poções especificado pelo operando da direita, à esquerda ou à direita, respectivamente. Operando direito tem que ser positivo. Com o deslocamento à esquerda (<<), bits à esquerda são descartados e"Novo" bits à direita são atribuídos zeros. Assim, deslocando operando sem sinal para a esquerda n posições é equivalente a multiplicando-se por 2n se todos os bits são descartados zero. Isso também é válido para operandos assinado Se todos os bits são descartados igual a um bit de sinal.
000.001 << 0x3801 <<
5; 4;
/ * Equivale a 000.040 * / / * Igual a 0x8010, estouro! * /
Com o deslocamento para a direita (>>), extrema-direita bits são descartados e os "Libertado" bits à esquerda são zeros atribuídos (no caso do operando sem sinal) ou o valor de um bit de sinal (no caso de assinado operando). Mudando operando para a direita por posições n é equivalente a dividing-lo por 2n.
0xFF56>> 0xFF56u>>
4; 4;
/ * Equivale 0xFFF5 * / / * Equivale 0x0FF5 * /
Mikr oele ktro nika
www.mecatronicadegaragem.blogspot.com
- Soluções de software e hardware para o mundo embutido
213
CAPÍTULO 6
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Referência da Linguagem Bitwise versus lógica
Não se esqueça da diferença de princípio entre a forma como os operadores bit a bit e lógica de trabalho. Por exemplo: 0222222 e 0555555; 0222222 e 0555555 &;
/ * Equivale a 000.000 * / / * Equivale a 1 * /
~ 0x1234; ! 0x1234;
/ * Igual * 0xEDCB / / * Igual a 0 * /
Operadores lógicos Operandos de operações lógicas são consideradas verdadeiras ou falsas, que é diferente de zero ou zero. Os operadores lógicos sempre retornam 0 ou 1. Os operandos em uma expressão lógica deve ser de tipo escalar. Os operadores lógicos & & e | | associam da esquerda para a direita. Lógico operador de negação ! associados da direita para a esquerda. Operador Operação Precedência
Visão geral sobre operadores lógicos &&
E lógico
5
||
OR lógico
4
!
negação lógica
14
Operadores lógicos
||
0
x
0
0
1
x
1
1
Precedência dos operadores lógicos, relacionais e aritméticos foi designado como uma forma de permitir expressões complexas sem parênteses para ter uma expectativa de significado: c> = '0 '& & c <= '9'; a + 1 == b | |! f (x);
E lógico & & retorna 1 se ambas as expressões avaliar a ser zero, caso contrário
214
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
&&
0
x
0
0
0
x
0
1
!
0
x
1
0
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
retorna 0. Se a primeira expressão é avaliada como false, o segunda expressão não será avaliados. Por exemplo: a> b & & c b) & & (c b) é falso (0), (c
OU lógico | | retorna 1 se quer de expressão avalia a ser zero, caso contrário retorna 0. Se a primeira expressão é avaliada como verdadeira, a segunda expressão não é avaliada. Por exemplo: a & & b | | c & d & / * lê como: (a & & b) | | (c & d &) * / / * If (a & & b) é verdadeira (1), * (& c & d) não serão avaliados /
Expressões lógicas e lateral Efeitos Regra geral sobre expressões lógicas complexas é que a avaliação das consecomerciais e executivas pára lógica operandos no exato momento do resultado final é conhecido. Por exemPor exemplo, se temos uma expressão a & & b & & c onde um é falso (0), então operandos b e c não serão avaliados. Isso é muito importante se b e c são expressões, como possíveis efeitos colaterais não vai acontecer!
Lógico versus Bitwise Esteja ciente da diferença de princípio entre a forma como os operadores bit a bit e lógica de trabalho. Por exemplo: 0222222 e 0555555 0222222 e 0555555 e ~ 0x1234 ! 0x1234
/ * Equivale a 000.000 * / / * Equivale a 1 * / / * Igual * 0xEDCB / / * Igual a 0 * /
Mikroelektronika - SOFTWARE E soluções de hardware para embutidos mundo
215
CAPÍTULO 6
www.mecatronicadegaragem.blogspot.com
Referência da Linguagem
mikroC PRO para PIC
Operador condicional? : O condicional operador ? : é o único operador ternário em C. A sintaxe da condioperador internacional é: expressão1? expression2: expression3
A expression1 é avaliada primeiro. Se o valor for verdadeiro, então expression2 avalia e expression3 é ignorado. Se expressão1 é avaliada como falso, então expression3 avalia e expression2 é ignorado. O resultado será um valor de expression2 ou expression3 dependendo de qual deles avalia. Nota: O facto de apenas uma dessas duas expressões é avaliada muito importante se espera-se que produzem efeitos colaterais! associados operador condicional da direita para a esquerda. Aqui estão alguns exemplos práticos: / * Encontrar max (a, b): * / max = (a> b)? a: b; / * Converte pequena carta para o capital: * / / * (Sem parênteses são realmente necessário) * / c = (c> = 'a' & & c <= 'z')? (C - 32): c;
Regras Operador Condicional expression1 deve ser uma expressão escalar; expression2 e expression3 deve
obedecer a uma das seguintes regras:
1. Ambas as expressões têm de ser de aritmética tipo. expression2 e expression3 estão sujeitos às conversões aritméticas usuais, que determina o tipo do resultado. 2. Ambas as expressões têm de ser compatíveis dos tipos struct ou união. O resultado tipo é um tipo de estrutura ou união de expression2 e expression3. 3. Ambas as expressões têm de ser de vazio tipo. O tipo resultante é nulas. 4. Ambas as expressões devem ser do tipo ponteiro para versões qualificados ou não qualificados de tipos compatíveis. O tipo resultante é um ponteiro para um tipo qualificado, com todo o tipo qualificadores do tipo apontado por ambas as expressões. 5. Uma expressão é um ponteiro, eo outro é um ponteiro constante nula. O resultadoção tipo é um ponteiro para um tipo qualificado com todos os qualificadores do tipo ponto-tipos ed por ambas as expressões. 6. Uma expressão é um ponteiro para um tipo de objeto ou incompleta, eo outro é um ponteiro para uma versão qualificados ou não qualificados dos nulas. O tipo resultante é a de
o ponteiro-para-não-vazio expressão.
216
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
Operadores de Atribuição
Ao contrário de muitas outras linguagens de programação, C trata de atribuição de valores como a operação (Representada por um operador) ao invés de instrução.
Operador de atribuição simples Para uma atribuição de valor comum, um operador de atribuição simples (=) é utilizados: = expressão1 expressão2
A expression1 é um objeto (posição de memória) para que o valor de expression2 é atribuído. Operando expression1 tem que ser lvalue e expression2 pode ser qualquer expressão. A expressão de atribuição em si não é lvalue. Se expression1 e expression2 são de tipos diferentes, o resultado da expression2 serão convertidos para o tipo de expressão1, se for necessário. Consulte o Tipo Conversões para mais informações.
Operador de atribuição composto C permite que as atribuições mais COMLEX por meio de operadores de atribuição compostos. A sintaxe dos operadores de atribuição composta são: op = expressão1 expressão2
onde op pode ser um dos operadores binários +, -, *, /,%, &, |, ^, <<, ou >>. Assim, temos 10 operadores de atribuição compostos diferentes: + =, -=, *= / =%, =, & =, | ^ =, =, <<= e >> =. Todos eles associam da direita para a esquerda. sepa-Spaces Avaliação operadores compostos (por exemplo, + =) Irá gerar um erro. atribuição composto tem o mesmo efeito que expressão1 = expressão1 expressão2 op
exceto o lvalue expression1 é avaliada apenas uma vez. Por exemplo, expression1 + = expressão2 é o mesmo que expressão1 = expressão1 + expression2.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
217
CAPÍTULO 6
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Referência da Linguagem Regulamento de Atribuição
Para ambos os atribuição simples e compostos, os operandos expression1 e expression2 deve obedecer a uma das seguintes regras: 1. expression1 é do tipo aritmética qualificados ou não qualificados e expression2 é de aritmética tipo. 2. expression1 tem uma versão qualificados ou não qualificados do tipo de estrutura ou união compatível com o tipo de expression2. 3. expression1 e expression2 são ponteiros para as versões qualificados ou não qualificados de tipos compatíveis eo tipo apontado pelo esquerdo tem todos os qualificadores do tipo apontado pela direita. 4. Quer expression1 ou expression2 é um ponteiro para um ou tipo de objeto incompleto eo outro é um ponteiro para uma versão qualificados ou não qualificados de vazio. O tipo de apontado pela esquerda tem todos os qualificadores do tipo apontado pelo direito. 5. expression1 é um ponteiro e expression2 é um ponteiro constante nula.
Operador sizeof O operador unário prefixo sizeof retorna um inteiro que representa a constante tamanho do espaço de memória (em bytes) usado pelo seu operando (determinado pelo seu tipo, com algumas exceções). O operador sizeof pode apanhar um identificador de tipo ou uma expressão unário como um operando. Você não pode usar sizeof com expressões do tipo de função, tipos incompletos, parênteses os nomes de tais tipos, ou com lvalue que designa um objeto campo de bits.
Sizeof Aplicada à Expressão Se aplicada a expressão, o tamanho de um operando é determinado sem avaliar a expressão (e, portanto, sem efeitos colaterais). O resultado da operação será o tamanho do tipo de resultado da expressão.
Sizeof Aplicada ao tipo
Se aplicada a um tipo de identificador, sizeof retorna o tamanho do tipo especificado. A unidade para o tamanho do tipo é sizeof (char) o que equivale a um byte. A operação tamanho de (char) dá o resultado 1, se char é assinado ou não assinado. Assim: sizeof (char) sizeof (int) sizeof (unsigned long) sizeof (float)
218
/* /* /* /*
retorna retorna retorna retorna
1 2
* * 4 * 4 *
/ / / /
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
Quando o operando é um parâmetro do tipo não-matriz, o resultado é o número total de bytes na matriz (em outras palavras, um nome de matriz não é convertido para um tipo de ponteiro): int i, j, uma [10]; ... j = sizeof (a [1]); / * J = sizeof (int) = 2 * / / * I = 10 * sizeof (int) = 20 * / i = sizeof (a); / * Para obter o número de elementos em um array * / num_elem int = i / j;
Se o operando é um parâmetro declarado como tipo de matriz ou um tipo de função, sizeof dá o tamanho do ponteiro. Quando aplicada às estruturas e aos sindicatos, sizeof dá a número total de bytes, incluindo qualquer preenchimento. O operador sizeof não pode ser aplicada a uma função.
EXPRESSÃO
A expressão é uma seqüência de operadores, operandos e pontuadores que especifica um computação. Formalmente, as expressões são definidas recursivamente: subexpressões pode ser aninhados sem limite formal. No entanto, o compilador apresentará um erro de falta de memória se não é possível compilar uma expressão que é muito complexo. Em ANSI C, o expressões primárias são: constante (também referida como literal), identiFier, e (expressão), definido de forma recursiva. As expressões são avaliadas de acordo com uma conversão de certos agrupamentos, associativity e regras de precedência, o que depende dos operadores utilizados, presença de parenteses e tipos de dados dos operandos. A precedência ea associatividade dos Os operadores estão resumidas no Operador de Precedência e associatividade. O caminho operandos e subexpressões são agrupados não necessariamente especificar o real ordem em que são avaliados pelo mikroC PRO para a PIC. As expressões podem produzir lvalue, rvalue, ou nenhum valor. Expressões podem causar efeitos secundários efeitos se produzem um valor ou não.
Vírgula Expressões Uma das especificidades do C é que ela permite o uso da vírgula como um operador de seqüência para chamada forma expressões vírgula ou seqüências. expressão Vírgula é uma vírgula lista de expressões delimitados - é formalmente tratado como uma única expressão para que ele possa ser utilizado em locais onde a expressão é esperado. A seguinte seqüência: expression 1, expression_2;
www.mecatronicadegaragem.blogspot.com
Mikroelektronika - Soluções de software e hardware para o mundo embutido
219
CAPÍTULO 6
www.mecatronicadegaragem.blogspot.com
Referência da Linguagem
mikroC PRO para PIC
resultados na esquerda para a direita avaliação de cada expressão, com o valor eo tipo de expression_2 dando o resultado da expressão completa. Resultado da expression_1 é descartado. vírgula operador binário (,) tem a prioridade mais baixa e associados da esquerda para a direito, de modo que a, b, c é o mesmo que (A, b), c Isto permite escrever seqüências com qualquer número de expressões: expression_1, expression_2, ... expression_n;
o que resulta na avaliação da esquerda para a direita de cada expressão, com o valor e tipo de expression_n dando a resultado da expressão inteira. Os resultados de outras expressões são descartados, mas o seu (possível) efeito colateral acontecem. Por exemplo: resultado = (a, b = 5 / = 2, C + +); / * Retorna preincremented valor da variável c, mas também intializes a, b divide por 2 e incrementos de c * / resultado = (x = 10, y = x + 3, x -, z -= x * 3 - - y); / * Retorna calculado o valor da variável z, e também calcula x * e y /
Nota
Não confunda operador vírgula (seqüência operadora) com pontuador vírgula que separa os elementos em um lista de funções e listas de discussão Inicializador. Para evitar ambivocos com vírgulas no argumento da função e lista de inicializador, use parênteses. Para exemplo, função (i, (j = 1, j + 4), k);
chama a função func com três argumentos (i, 5, k), e não quatro.
220
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
DEMONSTRAÇÕES Demonstrações especificar um fluxo de controle como o programa executa. Na ausência de Ir específicos e seleção declarações, os comandos são executados em seqüência na ordem de aparição no código-fonte. As declarações podem ser divididos em: - Rotulado Demonstrações - Expressão Demonstrações - Instruções de Seleção - Instruções iteração (Loops) - Ir Demonstrações - Declarações compostas (blocos)
Rotulado Demonstrações Cada instrução em um programa podem ser rotulados. Um rótulo é um identificador adicionado antes a declaração como esta: label_identifier: instrução;
Não há nenhuma declaração especial de uma etiqueta - apenas "Tags" a declaração. label_identifier tem escopo de uma função e no rótulo do mesmo não pode ser redefinido no
mesma função. Os rótulos têm o seu próprio espaço: etiqueta de identificação pode corresponder a qualquer outro identificador no o programa.
A declaração pode ser rotulado por duas razões: 1. O rótulo identificador serve como meta para a instrução goto incondicional, 2. O rótulo identificador serve como meta para a instrução switch. Para este efeito, apenas caso e padrão demonstrações rotulados são utilizados: caso a expressão constante: instrução default: declaração
Mikroelektronika - Soluções de software e hardware para o mundo embutido
221
CAPÍTULO 6
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Referência da Linguagem Expressão Demonstrações
Qualquer expressão seguido por um ponto e vírgula faz uma declaração de expressão: expressão;
A mikroC PRO para PIC executa uma instrução de expressão através da avaliação da expressão. Todos os efeitos colaterais desta avaliação sejam concluídas antes do próximo instrução inicia a execução. A maioria das declarações são expressão de atribuição do Estado mentos ou chamadas de função.
A declaração de nulidade é um caso especial, constituído por um único ponto e vírgula (;). O nulo declaração não faz nada e, portanto, é útil em situações onde o mikroC PRO para PIC sintaxe espera uma declaração, mas o programa não precisa de um. Por exemplo, uma declaração de nulidade é comumente usado em "Vazio" loops: para (; Q * + + * p = + +;);
/ * corpo deste loop é um comando nulo * /
Instruções de Seleção Seleção ou declarações de controle de fluxo de selecionar um dos cursos alternativos de ação por testes de determinados valores. Existem dois tipos de declarações de seleção: se switch
Se a Declaração A se declaração é usada para implementar uma instrução condicional. A sintaxe da se afirmação é: se (Expressão) [statement1 mais statement2]
Se expressão avalia a verdade, statement1 executa. Se declaração é falsa, statement2 executa. A expressão deve ser avaliada como um valor integral; outras sábio, a condição é mal formado. Parênteses em torno da expressão são obrigary. A mais palavra-chave é opcional, mas não há indicações podem vir entre se e mais.
222
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
Instrução if aninhada Nested se demonstrações requerem maior atenção. A regra geral é que a nested condicionais são analisados a partir do mais íntimo condicional, com cada mais vinculado ao mais próximo disponível se em sua esquerda: se (Expressão1) statement1 else if (Expression2) se (Expression3) statement2 mais instrução3 / * Este pertence: se * (expression3) / mais statement4 / * Este pertence: se * (expression2) /
Nota # If e # Else declarações de pré-processamento (Directivas) semelhante ao se e mais
declarações, mas têm efeitos muito diferentes. Eles controlam o que as linhas do arquivo de origem são compilada e que são ignorados.
Switch Demonstrações A switch declaração é usada para passar o controle para um ramo do programa específico, com base em uma determinada condição. A sintaxe da switch afirmação é: switch (Expressão) { caso constante-expression_1: statement_1; . . . caso expression_n constante: statement_n; padrão [ : Declaração;] }
Primeiro, o expressão (Condição) é avaliada. A switch declaração, em seguida, combora la a todos os disponíveis constante, as seguintes expressões a palavra-chave caso. Se um jogo
for encontrado, switch passa o controle para que a adequação caso fazendo com que o declaração foltes da partida avalia. Note-se que constantes expressões de deve avaliar a inteiro. Não é possível ter duas mesmo expressões constantes avaliar a o mesmo valor. Parênteses em torno expressão são obrigatórios. Ao encontrar uma correspondência, o fluxo do programa continua normalmente: as instruções a seguir será executado de forma natural, independentemente da possível caso etiqueta. Se nenhum caso satisfaz a condição, a padrão caso avalia (se o rótulo padrão é especicados).
Porwww.mecatronicadegaragem.blogspot.com exemplo, se uma variável i tem valor entre 1 e 3, a opção seguinte seria Mikroelektronika - Soluções de software e hardware para o mundo embutido
223
CAPÍTULO 6
www.mecatronicadegaragem.blogspot.com
Referência da Linguagem
mikroC PRO para PIC
sempre devolvê-lo como 4: switch caso caso caso }
(I) { 1: i + +; 2: i + +; 3: i + +;
Para evitar a avaliação de qualquer outros casos, e abandonar o controle de comutador, cada caso
deve ser encerrado no intervalo.
Aqui é um simples exemplo, com switch. Suponha que temos uma variável fase com apenas Três estados diferentes (0, 1 ou 2) e uma função correspondente (evento) para cada uma dessas Estados. Isto é como nós poderíamos mudar o código para o appopriate rotina: switch (Fase) { caso 0: Lo (); break; caso 1: Mid () break; caso 2: Oi () break; caso: Mensagem ("Estado inválido!"); }
Nested Switch Condicional switch declarações podem ser aninhados - rótulos caso e padrão são, então, atribuído ao mais profundo que encerram switch declaração.
Iteração Demonstrações (Loops) instruções de iteração de loop permite um conjunto de instruções. Há três formas de iterdemonstrações ração na mikroC PRO para PIC: enquanto fazer para
Enquanto a Declaração A enquanto palavra-chave é usado para iterar condicionalmente um comunicado. A sintaxe da enquanto afirmação é: enquanto (Expressão) instrução
A declaração executa repetidamente até que o valor de expressão é falsa. O teste ocorre antes declaração é executado. Assim, se expressão avalia a falsa
224
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
na primeira passagem, o loop não é executado. Note que os parênteses em torno de expresSion são obrigatórios. Aqui está um exemplo de cálculo do produto escalar de dois vetores, usando o enquanto declaração: int s = 0, i = 0; enquanto (I
Note que o corpo do laço pode ser nulo declaração. Por exemplo: enquanto (Q * + + * p = + +);
Do Declaração A fazer instrução é executada até que a condição se torne falsa. A sintaxe da fazer afirmação é: fazer declaração enquanto (Expressão);
A declaração é executado repetidamente enquanto o valor de expressão permanece diferente de zero. A expressão é avaliada após cada iteração, portanto, o loop será executado declaração de pelo menos uma vez. Parênteses em torno expressão são obrigatórios. Note que não é a estrutura de controle apenas em C, que expressamente termina com ponto e vírgula (;). Outras estruturas com controlo final declaração, o que significa que eles implicitamente
incluir um ponto e vírgula ou chave de fechamento. Aqui está um exemplo de cálculo do produto escalar de dois vetores, usando o fazer Estado mento: s = 0, i = 0; fazer { s + = a [i] * b [i]; i + +; } enquanto (I
Mikroelektronika - Soluções de software e hardware para o mundo embutido
225
CAPÍTULO 6
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Referência da Linguagem Para a declaração
A para declaração implementa um loop iterativo. A sintaxe da para declaração é o seguinte: para (Expressão [init]; ] Sion) declaração
Expressão [condição];
incremento [expres-
Antes da primeira iteração do loop, init-expressão define as variáveis de partida para do loop. Você não pode passar em declarações init-expressão. condição de expressão é verificada antes da da primeira entrada do bloco; declaração é executado repetidamente até que o valor de condição de expressão é falsa. Depois
cada iteração do loop, expressão de incremento incrementos de um contador de loop. ConConsequentemente, i + + é funcionalmente o mesmo que + + I. Todas as expressões são opcionais. Se condição de expressão é deixado de fora, é assumido que ser sempre verdadeira. Assim, "Vazio" para afirmação é comumente usado para criar um fimmenos loop em C: para (;) Declaração
A única maneira de quebrar este ciclo é por meio do quebrar declaração. Aqui está um exemplo de cálculo do produto escalar de dois vetores, usando o para Estado mento: para (S = 0, i = 0; i
Não existe outra maneira de fazer isso: para (S = 0, i = 0; i n <; s + = a [i] * b [i], i + +); * Feio /
/ * Válido, mas
mas é considerado um estilo de programação ruim. Embora legal, o cálculo do montante não deve ser uma parte da expressão de incremento, porque não está em o serviço da rotina de loop. Note que a declaração nula (;) é usado para o corpo do laço.
226
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
Ir Demonstrações A instrução de salto, quando executado, transfere o controle incondicionalmente. Há quatro tais declarações no mikroC PRO para PIC: quebrar continuar goto retorno
Break e continue Ruptura de Declaração Às vezes é necessário parar o loop dentro de seu corpo. Use o quebrar declaração dentro de loops para passar o controle para a primeira instrução seguinte ao interior switch, para, ao mesmo tempo, ou fazer bloco. quebrar é comumente utilizada na switch instruções para impedir a sua execução sobre o
resultado positivo em primeiro lugar. Por exemplo: switch (Estado) { caso 0: Lo (); break; caso 1: Mid (); break; caso 2: Oi (); break; default: Mensagem ("Estado inválido!"); }
Continuar a Declaração
A continuar declaração no prazo de malhas é usada para "Ignorar a ciclo ". Ele passa o controle ao fim do fim mais profundo que encerram cinta pertencente a uma construção de loop. Em que ponto a condição de continuação do laço é reavaliada. Isso significa que contiue exige a próxima iteração se a continuação do laço condição for verdadeira. Especificamente, o continuar declaração dentro do loop vai saltar para a posição marcadação, uma vez que é mostrada abaixo: enquanto (..) { ... if (> val 0) continue; ... / / Continue saltos aqui }
fazer { ... if (> val 0) continuar; ... / / Continue saltos aqui enquanto (..);
para (..;..;..) { ... if (> val 0) continue; ... / / Continue saltos aqui }
Mikroelektronika - Soluções de software e hardware para o mundo embutido
227
CAPÍTULO 6
www.mecatronicadegaragem.blogspot.com
Referência da Linguagem
mikroC PRO para PIC
Goto Declaração A goto declaração é usada para salto incondicional para um rótulo local - para mais inforinformações nos rótulos, se referem a declarações identificadas. A sintaxe da goto afirmação é: goto label_identifier;
Isto irá transferir o controle para a localização de um selo local especificado pelo label_identiFier. A label_identifier tem que ser um nome da etiqueta na mesma função em que o goto declaração é. A linha goto pode vir antes ou depois do rótulo. goto é usado para sair de qualquer nível das estruturas de controle aninhadas, mas ele não pode
ser usado para pular em um bloco, enquanto saltando inicializações que bloco- por exemplo, saltação no corpo do laço, etc O uso de goto declaração é geralmente desencorajado, pois praticamente todos os algoritmo pode ser realizado sem ele, resultando em programas estruturados legíveis. Uma possível aplicação da goto afirmação é sair de estruturas de controle aninhadas profundamente: para (...) { para (...) { ... se (Desastre) goto Erro; ... } } . . . Erro: / * erro * código de tratamento /
Instrução Return A retorno declaração é usada para sair da função atual de volta para o chamado rotina, opcionalmente retornar um valor. A sintaxe é: retorno [Expressão];
Isto irá avaliar expressão e retornar o resultado. valor retornado será autoautomaticamente convertidos para o tipo de função esperado, se necessário. A expressão é opcional, se omitido, a função retornará um valor aleatório da memória. Nota: A declaração retorno em funções do vazio tipo não pode ter expresSion - na verdade, a retorno declaração pode ser omitido por completo, se é o último estadomento no corpo da função.
228
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
Declarações compostas (blocos)
A instrução composta, ou bloco, é uma lista (possivelmente vazia) de declarações em anexo em chaves correspondentes {}. Sintaticamente, o bloco pode ser considerado como um único declaração, mas também desempenha um papel no escopo de identificadores. Um identificador declarado dentro do bloco tem um alcance a partir do ponto da declaração e termina no chave de fechamento. Os blocos podem ser aninhados em qualquer profundidade até aos limites da memória. Por exemplo, o para loop espera uma declaração em seu corpo, para que possamos passar um instrução composta: para (I = 0; i
Note que, ao contrário de outras declarações, instruções compostas não terminam com ponto e vírgula (;), Ou seja, nunca há um ponto e vírgula após o chave de fechamento.
PreProcessor Pré-processador é um processador de texto integrado que prepara o código fonte para compilação. Preprocessor permite: - A inserção de texto de um arquivo specifed até um certo ponto no código (veja o arquivo de inclusão), - Substituição específicas símbolos lexical com outros símbolos (veja Macros), - Compilação condicional que condicionalmente inclui ou omite partes do código (ver Compilação Condicional).
Note que o pré-processador de texto analisa a nível simbólico, não a nível de carácter individual. Preprocessor é controlado por meio de directivas de pré-processamento e de pré-processamento operadores.
Preprocessor directivas Toda a linha no código-fonte com um líder # é tida como um pré-processamento directiva (Ou linha de controlo), a menos # está dentro de uma seqüência literal, em um caráter permanente, ou incorporado em um comentário. A inicial # pode ser precedido ou seguido de um espaço (excluindo novas linhas). A directiva nula consiste de uma linha contendo o caractere único #. Esta linha é sempre ignorados. directivas Preprocessor são geralmente colocados no início do código-fonte, mas
www.mecatronicadegaragem.blogspot.com Mikroelektronika - Soluções de software e hardware para o mundo embutido
229
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 6
mikroC PRO para PIC
Referência da Linguagem
eles podem aparecer legalmente em qualquer ponto do programa. A mikroC PRO para PIC prédirectivas de pré-processamento do processador detecta e analisa as fichas embutido elas. A directiva está em vigor a partir de sua declaração até o final do arquivo do programa. Aqui está uma directiva comumente utilizados: # Include
Para mais informações sobre arquivos, incluindo com o # Include directiva, se referem ao arquivo Inclusão. A mikroC PRO para PIC suporta directivas de pré-processamento padrão: # # # # # #
(Directiva null) Define Elif Else Endif Erro
# # # # # #
If Ifdef Ifndef Include Line Undef
Nota: Por enquanto pragma Funcall só é suportada.
Continuação de linha com contrabarra (\) Para quebrar directiva em várias linhas terminar a linha com uma barra invertida (\): # Define MACRO
230
Esta directiva continua a \ a linha a seguir.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
Macros As macros fornecem um mecanismo de substituição do token, antes da compilação, com ou sem um conjunto de formal, os parâmetros de função semelhante.
Definindo macros e Expansões Macro A # Define directiva define uma macro: # Define macro_identifier
Cada ocorrência de macro_identifier no código fonte a seguir esta linha de controle ser substituído na posição original com o possivelmente vazio token_sequence (Há algumas exceções, que são discutidos mais tarde). Essas substituições são conhecidos como macro expansions.token_sequence às vezes é chamado o corpo de uma macro. Um token vazio seqüência de resultados na remoção de cada macro afetados identificador a partir do código fonte. Nenhum ponto e vírgula (;) é necessário para finalizar uma directiva de pré-processamento. Qualquer personagem encontrado na seqüência token, incluindo vírgulas, aparecerá em uma expansão de macrosion.token_sequence termina no encoun primeira linha não barra invertida novo registado. Qualquer seqüência de espaços, incluindo comentários na seqüência token, é substituído por um caractere de espaço único.
Depois de cada indivíduo expansão macro, uma nova verificação é feita do recém-expandido texto. Isso permite a possibilidade de utilizar macros aninhados: o texto expandido pode conter identificadores de macro que estão sujeitos à substituição. No entanto, se a macro se expande em algo que se parece com uma directiva de pré-processamento, directiva, tal não será recocida pelo pré-processador. Todas as ocorrências do macro identificador encontrado dentro literal cordas, constantes de caracteres, ou comentários no código-fonte não será ampliada. A macro não será expandido durante sua expansão (assim # Define macro macro não irá expandir-se indefinidamente). Aqui está um exemplo: / * Aqui estão algumas macros simples: * / # Define err_msg "Fora do alcance!" # Define EVERLOOP para (;) / * Que nós poderíamos usar assim: * / main () { EVERLOOP { ... se (Erro) {Lcd_Out_Cp (err_msg); break;} ... } }
Mikr oele
www.mecatronicadegaragem.blogspot.com
ktronika - Soluções de software e hardware para o mundo embutido
231
CAPÍTULO 6
www.mecatronicadegaragem.blogspot.com
Referência da Linguagem
mikroC PRO para PIC
A tentativa de redefinir uma macro já está definido identificador resultará em uma advertência a menos que uma nova definição é exatamente a mesma definição de token-a-símbolo como o actual um. A estratégia preferida quando as definições podem existir em outros arquivos de cabeçalho é tão seguinte forma: # Ifndef BLOCK_SIZE # Define BLOCK_SIZE 512 # Endif
A linha média é ignorada se BLOCK_SIZE está definido, se BLOCK_SIZE é atualmente não definidos, a linha do meio é chamado para defini-lo.
Macros com parâmetros A sintaxe a seguir é usada para definir uma macro com parâmetros: # Define macro_identifier ()
Note que não pode haver espaço em branco entre macro_identifier e "(". A opcional arg_list é uma seqüência de identificadores separados por vírgulas, como os argulista desenvolvimento de uma função C. Cada vírgula delimitado identificador tem o papel de um formal argumento ou espaço reservado. Tais macros são chamados por escrito macro_identifier ()
no código-fonte subseqüentes. A sintaxe é idêntica à de uma chamada de função; na verdade, muitos biblioteca padrão C "Funções" são implementadas como macros. No entanto, existem algumas importantes diferenças semânticas.
O opcional actual_arg_list deve conter o mesmo número de delimitar-vírgula ed seqüências token, conhecido como argumentos reais, como os encontrados na arg_list formal de o # Define linha - deve haver um argumento real para cada argumento formal. Um erro será relatado se o número de argumentos em duas listas não é a mesma. Uma macro resultados põem em dois conjuntos de substituições. Primeiro, o macro eo identificador argumentos parêntese fechado é substituída pela seqüência de token. Em seguida, qualquer forargumentos mal que ocorre na seqüência de token são substituídos pelos correspondentes argumentos reais constantes actual_arg_list. Tal como com simples definições de macro, rescanning ocorre para detectar quaisquer identificadores macro incorporada elegíveis para a expansão. Aqui está um exemplo simples:
www.mecatronicadegaragem.blogspot.com
/ * Um macro simples que retorna maior de seus 2 argumentos: * /
232
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Idioma Referência
# Define _MAX (A, B) ((A)> (B))? (A): (B) / * Vamos chamá-lo: * / _MAX x = (a + b, c + d); / * Pré-processador irá transformar a linha anterior para: x = ((a + b)> (c + d))? (A + b) (c + d) * /
É muito recomenda-se colocar parênteses em torno de cada argumento na macro corpo a fim de evitar possíveis problemas com a precedência do operador.
Indefinida Macros A # Undef diretiva é usada remover a definição de uma macro. # Undef macro_identifier
A directiva # Undef separa qualquer seqüência anterior token macro_identifier, a definição de macro foi esquecido, e macro_identifier é indefinido. Nenhuma expansão macro ocorre dentro do # Undef linhas.
O estado de ser definido ou indefinido é uma propriedade importante de um identificador independentemente da definição atual. A # Ifdef e # Ifndef directivas condicionais, usado para testar se qualquer identificador está definido ou não, oferecer um mecanismo flexível de nismos para controlar vários aspectos de uma compilação. Depois de um macro identificador foi definido, ele pode ser redefinido com # Define, utilizando
a seqüência igual ou diferente do token.
Inclusão de arquivos A directiva de pré-processamento # Include puxa arquivos de cabeçalho (extensão. h) no código-fonte. Não confie na pré-processador para incluir os arquivos fonte (extensão) - veja Adicionar / Remover arquivos do projeto para obter mais informações. A sintaxe da # Include directiva tem dois formatos: # Include # Include "header_name"
O pré-processador elimina a # Include linha e substitui-lo com todo o texto um arquivo de cabeçalho em que ponto do código-fonte. A colocação de # Include não podeportanto influenciar o alcance ea duração de qualquer identificadores no arquivo incluído. A diferença entre estes dois formatos reside na busca algoritmo empregado no Mikroelektronika - Soluções de software e hardware para o mundo embutido
233
CAPÍTULO 6
www.mecatronicadegaragem.blogspot.com
Referência da Linguagem
mikroC PRO para PIC
tentar localizar o arquivo de inclusão. Se o # Include diretiva é usada com o versão, a pesquisa é feitas sucessivamente em cada um dos seguintes locais, nesta ordem: 1. o mikroC PRO para PIC pasta de instalação > "Incluir" pasta 2. usuário personalizada caminhos de pesquisa A "Header_name" especifica uma versão fornecida pelo usuário incluem arquivos, o mikroC PRO para o PIC irá procurar o arquivo de cabeçalho nas seguintes posições, nesta ordem: 1. o pasta do projeto (pasta que contém o arquivo de projeto . Mcppi) 2. PRO o mikroC para PIC pasta de instalação > "Incluir" pasta 3. usuário personalizada caminhos de pesquisa
Caminho explícito Ao colocar um caminho explícito em header_name, somente esse diretório será pesquisado. Para
exemplo: # Include "C: \ my_files \ test.h"
Nota Há também uma terceira versão do # Include directiva, raramente usado, o que pressupõe que nem < nem " aparecer como o primeiro caractere não-branco seguinte # Include: # Include macro_identifier
É assume que a definição de macro que irá expandir macro identificador em um válido nome do cabeçalho delimitada com um ou "Header_name" formatos existe.
234
Mikroelektronika - Software e Soluções de hardware para Embedded World
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
Preprocessor Operadores A # (Sinal de libra) é uma diretiva de pré-processamento quando ele ocorre como o primeiro não-branco caractere de espaço em uma linha. Além disso, # e # # proceder à substituição do operador e mergção durante a fase de pré-processamento de digitalização.
Operador # No pré-processador C, uma sequência de caracteres entre aspas é considerado um símbolo e seu conteúdo não é analisada. Isto significa que os nomes de macro dentro de aspas não são expandida.
Se você precisa de um argumento real (a seqüência exata de caracteres entre aspas), como resultado da pré-processamento, use o # operador no corpo da macro. Ele pode ser colocado em frente de um argumento formal na definição de macro para converter o argumento real para após uma seqüência de substituição. Por exemplo, vamos ter macro LCD_PRINT para imprimir nome da variável e valor em LCD: # Define LCD_PRINT (val) Lcd_Custom_Out_Cp (# val ":"); \ Lcd_Custom_Out_Cp (IntToStr (val));
Agora, o código a seguir, LCD_PRINT (temp)
será pré-processada para isso: Lcd_Custom_Out_Cp ("temp": "); Lcd_Custom_Out_Cp (IntToStr (temp));
Operador # # Operador # # é usado para colagem token. Dois símbolos podem ser colada (fundidas), juntamente colocando # # entre eles (mais branco opcional em ambos os lados). Os préprocessador remove espaços em branco e # #, Combinando as fichas separadas em uma nova token. Isto é comumente usado para a construção de identificadores. Por exemplo, veja a definição de macro SPLICE para a colagem de dois símbolos em um identificador: # Define SPLICE (x, y) x _ # # # # y
Agora, a chamada SPLICE (cnt, 2) irá se expandir para o identificador cnt_2. Mikr oele ktro
www.mecatronicadegaragem.blogspot.com
nika - Software e hardware SOLUÇÕES PARA mundo embutido
235
CAPÍTULO 6
www.mecatronicadegaragem.blogspot.com
Referência da Linguagem
mikroC PRO para PIC
Nota A mikroC PRO para PIC não suporta o método mais antigo nonportable de token colar com (L / ** / r).
Compilação condicional directivas de compilação condicional são normalmente utilizados para fazer programas de fonte fácil à mudança e fácil de compilar em ambientes de execução diferentes. O mikroC PRO para o PIC suporta compilação condicional, substituindo a fonte apropriadalinhas de código com uma linha em branco. Todas as diretivas de compilação condicional deve ser concluída na fonte ou no arquivo de inclusão em que eles começaram.
Directivas # if, # elif, # else e # endif O condicional directivas # If, # elif, # else, e # Endif trabalho muito semelhante ao comum demonstrações C condicional. Se a expressão que você escreve depois # If tem uma valor diferente de zero, o grupo logo após a linha # If directiva é retida na a unidade de tradução. A sintaxe é: # If constant_expression_1 [# Elif constant_expression_2 ] ... [# Elif constant_expression_n ] [# Else ] # Endif
Cada # If directiva em um arquivo de origem devem ser acompanhados por um fechamento # Endif directiva. Qualquer número de # Elif directivas podem aparecer entre # If e # Endif directivas, mas no máximo um # Else directiva é permitido. A # Else directiva, se houver, deve ser o Directiva com a última antes # Endif. seções pode ser qualquer texto do programa que tem significado para o compilador ou
pré-processamento. O pré-processador seleciona uma única seção, através da avaliação constant_expression fol-
236
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 6
Referência da Linguagem
tes cada # If ou # Elif directiva até que encontre um verdadeiro (diferente de zero), expressão constanteSion. As expressões constantes estão sujeitas a expansão de macro. Se todas as ocorrências da expressão constante são falsas, ou se não # Elif directivas aparecem, o pré-processador selecciona o bloco de texto após o # Else cláusula. Se o # Else cláusula é omitido e todas as instâncias do constant_expression na # If bloco são falsas, não seção é selecionados para posterior processamento. Qualquer seção processados podem conter cláusulas adicionais condicional, aninhados em qualquer profundidade. Cada aninhadas # Else, # elif, ou # Endif directiva pertence a mais próxima da anterior o # If directiva. O resultado líquido da situação anterior é que o código apenas uma seção (Possivelmente vazia) será compilado.
Directivas # ifdef e # ifndef A # Ifdef e # Ifndef diretrizes podem ser usadas em qualquer lugar # If podem ser utilizados e eles podem testar se um identificador é actualmente definida ou não. A linha # Ifdef identificador
tem exatamente o mesmo efeito que # Se um se identificador está definido e as mesmo efeito que # Se 0 se identificador é atualmente indefinida. A outra directiva, # Ifndef, verdadeiros testes para o"Não definida" condição, produzir o resultado oposto. A sintaxe que se segue depois da # If, # elif, # else, e # Endif. Um identificador definido como NULL é considerada como definida.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
237
CAPÍTULO 6
www.mecatronicadegaragem.blogspot.com
Referência da Linguagem
238
mikroC PRO para PIC
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO
7
mikroC PRO para PIC
Bibliotecas mikroC PRO para PIC prevê um conjunto de bibliotecas que simplificam a inicialização e uso de microcontroladores PIC complacente e seus módulos: Utilize o Gestor de Biblioteca para incluir mikroC PRO para PIC Bibliotecas em seu projeto.
239
CAPÍTULO 7
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Ctype Biblioteca Biblioteca de Matemática Stdlib Biblioteca String Biblioteca
Diversos Bibliotecas - Biblioteca Button - Conversões Biblioteca - Sprint Biblioteca - Setjmp Biblioteca - Time Library - Trigonometria Biblioteca Veja também incorporada nas rotinas.
240
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 7
Bibliotecas
BIBLIOTECA DEPENDENCIES Alguns usam bibliotecas (depende) função e / ou variáveis, conbalcões de definidos em outras bibliotecas. Imagem abaixo mostra claramente representação sobre essas dependências CIES. Por exemplo, usa SPI_Glcd Glcd_Fonts e Port_Expander biblioteca que usa uma biblioteca SPI. Isto significa que se você verificar SPI_Glcd biblioteca em Manag-Biblioteca er, todas as bibliotecas de que ela depende serão verificados também.
Informações relacionadas: gerente de Biblioteca, PIC Bibliotecas Mikroelektronika - Soluções de software e hardware para o mundo embutido
241
CAPÍTULO 7
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Bibliotecas HARDWARE BIBLIOTECAS - Biblioteca ADC - CAN Biblioteca - Biblioteca CANSPI - Biblioteca Compact Flash - EEPROM Biblioteca - Ethernet PIC18FxxJ60 Biblioteca - Biblioteca Memória Flash - Biblioteca LCD Gráfico - Eu ˛ Biblioteca C - Biblioteca do teclado - Biblioteca Lcd - Biblioteca de código Manchester - Biblioteca Multi Media Card - OneWire Biblioteca - Biblioteca Expander Porto - Imprimir Biblioteca - PS / 2 Biblioteca - PWM Biblioteca - RS-485 Biblioteca - Software I Biblioteca C ˛ - Biblioteca SPI Software - Biblioteca UART Software - Biblioteca de Som - Biblioteca SPI - Biblioteca Ethernet SPI - Biblioteca Gráfica SPI Lcd - Biblioteca SPI Lcd - SPI Lcd8 Biblioteca - SPI Biblioteca Gráfica T6963C Lcd - Biblioteca Gráfica T6963C Lcd - UART Biblioteca - Biblioteca USB HID
242
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 7
Bibliotecas
ADC BIBLIOTECA ADC (Conversor Analógico Digital) módulo está disponível com um número de modelos PIC MCU. Biblioteca função ADC_Read é incluído para oferecer-lhe confortáveis trabalhar com o módulo.
ADC_Read Protótipo
não assinado ADC_Read (unsigned short canal);
Retorna
10-bit sem assinatura valor lido do canal especificado. Inicializa módulo PIC ADC interno para trabalhar com clock RC. Relógio
Descrição
determina o período de tempo necessário para a realização de conversão AD (min 12TAD).
Requer
Parâmetro canal representa o canal a partir do qual o valor analógico é a adquiridos. Consulte a ficha técnica apropriada para o canal-a-pino de t Nada.
Exemplo
não assinado tmp; ... tmp = ADC_Read (2); / / Ler o valor analógico do canal 2
Exemplo Biblioteca Este exemplo de código lê o valor analógico do canal 2 e apresenta-lo no PORTB e PORTC. unsigned int temp_res; vazio main () { ANSEL = 0x04; TRISA = 0xFF; ANSELH = 0; TRISC = 0x3F; TRISB = 0; fazer { temp_res = ADC_Read (2); PORTB = temp_res; PORTC temp_res => 2; } while (1);
// // // // //
Configure o pino AN2 como analógico PORTA de entrada é Configure outras AN pinos como I / O digital Pins RC7, RC6 são saídas PORTB é a saída
/ / Obter os resultados de 10 bits da conversão AD / / Envia abaixo de 8 bits a PORTB / / Envia 2 bits mais significativos a RC7, RC6
}
Mikroelektronika - Software e hardware SOLUÇÕES PARA mundo embutido
243
CAPÍTULO 7
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Bibliotecas Conexão HW
ADC conexão HW
CAN BIBLIOTECA mikroC PRO para PIC fornece uma biblioteca (driver) para trabalhar com o módulo CAN. CAN é um protocolo muito robusto que a detecção de erros e de sinalização, de autoe confinamento de falhas. dados defeituoso pode e quadros remotas são re-transmitidos autoautomaticamente, semelhante ao da Ethernet.
taxas de transferência de dados variam de até 1 Mbit / s em distâncias de 40m de rede abaixo de 250 Kbit / s em 250 cabos, e pode ir ainda mais baixo em distâncias maiores da rede, para baixo a 200Kbit / s, que é o bitrate mínimo definido pela norma. Cabos utilizados são pares de fios trançados, e comprimento máximo do cabo é de 1000m. CAN suporta dois formatos de mensagens: formato padrão, com 11 bits identificador, e Extended format, com 29 bits identificador Nota: CAN Biblioteca é apoiada apenas por MCUs com o módulo CAN. Nota: Consultar o padrão CAN CAN sobre a resistência de terminação de barramento.
244
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 7
Bibliotecas
Rotinas da biblioteca CANSetOperationMode CANGetOperationMode CANInitialize CANSetBaudRate CANSetMask CANSetFilter CanRead CanWrite rotinas a seguir são para uso interno, compilador só: RegsToCANID CANIDToRegs Certifique-se de verificar as constantes podem necessário para utilizar algumas das funções.
CANSetOperationMode Protótipo
vazio CANSetOperationMode (unsigned short modo, unsigned short wait_flag);
Retorna
Nada. Define CAN para o modo solicitado, ou seja, cópias Modo para CANSTAT. modo Parâmetros deve ser um dos CAN_OP_MODE constantes (ver constantes CAN).
Descrição
Parâmetro wait_flag deve ser 0 ou 0xFF: Se definido como 0xFF, esta é uma chamada de bloqueio - a função não será "Retorno" até o modo solicitado está definido. Se for 0, esta é uma chamada sem bloqueio. Ele não verifica se o módulo CAN é t d atualmente suportado apenas por P18XXX8 microcontroladores PIC. rotinas CAN
Requer Exemplo
Microregulador Troller deve ser conectado ao CAN transceptor (MCP2551 ou similares), que é d b CAN CANSetOperationMode (_CAN_MODE_CONFIG, 0xFF);
Mikroelektronika - Soluções de software e hardware para o mundo embutido
245
CAPÍTULO 7
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Bibliotecas CANGetOperationMode Protótipo
unsigned short CANGetOperationMode ();
Retorna
opmode atual.
Descrição
função retorna modo de operação atual do módulo CAN.
Requer
rotinas podem atualmente suportado apenas por P18XXX8 microcontroladores PIC. Microregulador Troller deve ser conectado ao CAN transceptor (MCP2551 ou similares), que é
Exemplo
se (CANGetOperationMode () == _CAN_MODE_NORMAL) {... };
Nada. Inicializa CAN. Todas as transmissões pendentes são abortadas. Configura máscara de todos os registra a 0 para permitir que todas as mensagens. O modo de configuração é definido internamente por essa função. Após uma execução deste modo de funcionamento normal é definido. registros de filtro são definidas de acordo com o valor de bandeira:
Descrição
Requer
Exemplo
246
se (CAN_CONFIG_FLAGS & _CAN_CONFIG_VALID_XTD_MSG! = 0) / / Defina todos os filtros para XTD_MSG else if (Config e _CAN_CONFIG_VALID_STD_MSG! = 0) / / Defina todos os filtros para STD_MSG mais / / Definir a metade dos filtros para DST, eo restante para XTD_MSG
Parâmetros: SJW tal como definido no 18XXX8 datasheet (1-4) BRP tal como definido no 18XXX8 datasheet (1-64) PHSEG1 tal como definido no 18XXX8 datasheet (1-8) t l atualmente d fi idapoiada 18XXX8 d tporhP18XXX8 t (1 8) MCUs PIC. rotinas podem apenas Microregulador Troller deve ser conectado ao CAN transceptor (MCP2551 ou similares), que é coninit = & _CAN_CONFIG_SAMPLE_THRICE _CAN_CONFIG_PHSEG2_PRG_ON & _CAN_CONFIG_STD_MSG & _CAN_CONFIG_DBL_BUFFER_ON & _CAN_CONFIG_VALID_XTD_MSG & _CAN_CONFIG_LINE_FILTER_OFF; ... CANInitialize (1, 1, 3, 3, 1, o init) / / inicializar CAN
Mikroelektronika - Software e Soluções de hardware para Embedded World
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Nada. Define CAN taxa de transmissão. Devido à complexidade do protocolo CAN, você não pode
Descrição
simplesmente vigor um valor de bps. Em vez disso, use esta função quando CAN está em modo de configuração. Consulte datasheet para mais detalhes. Parâmetros: SJW tal como definido no 18XXX8 datasheet (1-4) BRP tal como definido no 18XXX8 folha (1-64) PHSEG1 tal como definido no 18XXX8 datasheet (1-8) PHSEG2 tal como definido no 18XXX8 datasheet (1-8)
Requer
Exemplo
d fi id modo, 18XXX8 h (1a 8) CAN deve ser lna configuração casod contrário, função será ignorado. rotinas podem atualmente suportado apenas por P18XXX8 microcontroladores PIC. Microregulador Troller deve ser conectado ao CAN transceptor (MCP2551 ou similares), que é coninit = _CAN_CONFIG_SAMPLE_THRICE & _CAN_CONFIG_PHSEG2_PRG_ON & _CAN_CONFIG_STD_MSG & _CAN_CONFIG_DBL_BUFFER_ON & _CAN_CONFIG_VALID_XTD_MSG & _CAN_CONFIG_LINE_FILTER_OFF; ... CANSetBaudRate (1, 1, 3, 3, 1, o init);
Mikroelektronika - SOFTWARE HARDWARE E SOLUÇÕES PARA mundo embutido
247
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC
Bibliotecas CANSetMask Protótipo
vazio CANSetFilter (char CAN_FILTER, tempo valor, char CAN_CONFIG_FLAGS);
Retorna
Nada. Função define a máscara de filtragem avançada de mensagens. Dado valor é um pouco ajustared aos registos máscara apropriada buffer.
Descrição
Parâmetros: CAN_MASK é um dos valores predefinidos constante (ver constantes CAN) valor é a máscara de registrar o valor CAN_CONFIG_FLAGS seleciona o tipo de mensagem para filtrar, quer
Requer
CAN deve estar em modo de configuração; caso contrário, a função será ignorada. rotinas podem atualmente suportado apenas por P18XXX8 microcontroladores PIC.
Exemplo
/ / Seta todos os bits de máscara para 1, ou seja, todos os bits filtrados são relevantes: CANSetMask (_CAN_MASK_B1, -1, _CAN_CONFIG_XTD_MSG); / / Observe que -1 é apenas uma maneira mais barata de escrever 0xFFFFFFFF. Complemento irá fazer o truque e encha-o com os entes.
CANSetFilter Protótipo
vazio CANSetFilter (char CAN_FILTER, tempo valor, char CAN_CONFIG_FLAGS);
Retorna
Nada. Função define filtro de mensagens. Dado valor é um pouco ajustado para tampão apropriado registros de máscara.
Descrição Parâmetros: CAN_FILTER é um dos valores predefinidos constante (ver constantes CAN) valor é o filtro registrar o valor CAN_CONFIG_FLAGS seleciona o tipo de mensagem para filtrar, quer
248
Requer
CAN deve estar em modo de configuração, caso contrário, a função será ignorado. rotinas podem atualmente suportado apenas por P18XXX8 PIC MCUs. Microcontrolador deve
Exemplo
/ / Set id B1_F1 filtro para 3: CANSetFilter (_CAN_FILTER_B1_F1, 3, _CAN_CONFIG_XTD_MSG);
Mikroelektronika - Softwares e soluções de hardware para Embedded World
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Mensagem do buffer de recepção ou zero se nenhuma mensagem de encontrado.
Descrição
Função lê mensagem do buffer de recebimento. Se pelo menos um buffer cheio receber for encontrada, ela é extraídos e retornado. Se nenhum encontrada, a função retorna zero. Parâmetros: id é a mensagem identificador dados é um array de bytes até 8 bytes de comprimento
Requer
Exemplo
é no modo i em t que d dadrecepção 1 8 é possível. CAN deve estar rotinas podem atualmente apoiada apenas por P18XXX8 MCUs PIC. Microcontrolador deve ser ligado ao CAN transceptor (MCP2551 ou similar) que é conectado ao barramento CAN. char VN, rx, len, dados [8]; tempo id; / / ... rx = 0; / / ... VN = CanRead (id, dados, len rx);
Retorna zero se a mensagem não pode ser na fila (buffer cheio).
Descrição
Requer
Exemplo
Se pelo menos um buffer de transmissão vazia é encontrada, a função envia mensagem sobre fila para a transmissão. Se o buffer está cheio, a função retorna 0. Parâmetros: id é a mensagem CAN identificador. Apenas 11 ou 29 bits podem ser usadas dependendo tipo de mensagem (padrão ou estendida) dados é matriz de bytes até 8 bytes de comprimento é no modo i Normal. d d d 18 CAN deve estar rotinas podem atualmente suportado apenas por P18XXX8 microcontroladores PIC. Microcontrolador deve ser lichar d tx,CAN t t (MCP2551 i il ) é t d b t CAN dados; tempo id; / / ... tx = & _CAN_TX_PRIORITY_0 _CAN_TX_XTD_FRAME; / / ... CanWrite (id, dados, 2, TX);
Mikroelektronika - Soluções de software e hardware para o mundo embutido
249
CAPÍTULO 7
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Bibliotecas CAN Constantes
Há um número de constantes predefinidas na biblioteca da CAN. Para poder usar o biblioteca de forma eficaz, você precisa estar familiarizado com estes. Você pode querer verificar a exemplo, no final do capítulo.
CAN_OP_MODE CAN_OP_MODE constantes definem operação pode modo. CANSetOperationMode espera que um dos estas como seu argumento: const char _CAN_MODE_BITS _CAN_MODE_NORMAL _CAN_MODE_SLEEP _CAN_MODE_LOOP _CAN_MODE_LISTEN _CAN_MODE_CONFIG
= = = = = =
0xE0, 0x00, 0x20, 0x40, 0x60, 0x80;
Função
/ / Utilize esta opção para acesso opmode
bits
CAN_CONFIG_FLAGS CAN_CONFIG_FLAGS constantes definem bandeiras relacionadas com a configuração do módulo
CAN. Funções CANInitialize e CANSetBaudRate esperar que um deles (ou um bit a bit combinação), como seu argumento: const char _CAN_CONFIG_DEFAULT _CAN_CONFIG_PHSEG2_PRG_BIT _CAN_CONFIG_PHSEG2_PRG_ON _CAN_CONFIG_PHSEG2_PRG_OFF
Você pode usar AND bit a bit (&) para formar config byte fora desses valores. Por exemplo: init = & _CAN_CONFIG_SAMPLE_THRICE _CAN_CONFIG_PHSEG2_PRG_ON & _CAN_CONFIG_STD_MSG & _CAN_CONFIG_DBL_BUFFER_ON & _CAN_CONFIG_VALID_XTD_MSG & _CAN_CONFIG_LINE_FILTER_OFF; ... CANInitialize (1, 1, 3, 3, 1, o init);
/ / Inicializa CAN
CAN_TX_MSG_FLAGS CAN_TX_MSG_FLAGS estão relacionadas com bandeiras transmissão de uma mensagem CAN: const char _CAN_TX_PRIORITY_BITS _CAN_TX_PRIORITY_0 _CAN_TX_PRIORITY_1 _CAN_TX_PRIORITY_2 _CAN_TX_PRIORITY_3 _CAN_TX_FRAME_BIT _CAN_TX_STD_FRAME _CAN_TX_XTD_FRAME
Você pode usar AND bit a bit (&) para ajustar os sinalizadores apropriados. Por exemplo: / Valor / formulário para ser usado com CANSendMessage: send_config _CAN_TX_PRIORITY_0 = & _CAN_TX_XTD_FRAME & _CAN_TX_NO_RTR_FRAME; ... CANSendMessage (id, dados, 1, send_config);
Mikroelektronika - Soluções de software e hardware para o mundo embutido
251
CAPÍTULO 7
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Bibliotecas CAN_RX_MSG_FLAGS
CAN_RX_MSG_FLAGS são flags relacionados com a recepção da mensagem CAN. Se um bit especial é definido; corresponder significado é TRUE ou então ele será FALSE. const char _CAN_RX_FILTER_BITS _CAN_RX_FILTER_1 _CAN_RX_FILTER_2 _CAN_RX_FILTER_3 _CAN_RX_FILTER_4 _CAN_RX_FILTER_5 _CAN_RX_FILTER_6 _CAN_RX_OVERFLOW _CAN_RX_INVALID_MSG _CAN_RX_XTD_FRAME _CAN_RX_RTR_FRAME _CAN_RX_DBL_BUFFERED
= 0x07 / Uso / este acesso bits filtro = 0x00, = 0x01, = 0x02, = 0x03, = 0x04, = 0x05, = 0x08, / / Defina se Overflowed mais limpo = 0x10, / / Define se inválido mais limpo = 0x20, / / Define se a mensagem XTD mais limpo = 0x40, / / Define se a mensagem RTR mais limpo = 0x80 / / Define se a mensagem foi rígido ware buffer duplo
Você pode usar AND bit a bit (&) para ajustar os sinalizadores apropriados. Por exemplo: se (MsgFlag & _CAN_RX_OVERFLOW! = 0) { ... / / Receptor estouro ocorreu. / / Nós perdemos a nossa mensagem anterior. }
CAN_MASK CAN_MASK constantes definem códigos máscara. Função CANSetMask espera que um dos estas como seu argumento: # const char _CAN_MASK_B1 = 0, _CAN_MASK_B2 = 1;
CAN_FILTER CAN_FILTER constantes definir códigos de filtro. Função CANSetFilter espera uma destas como sua
Mikroelektronika - SOLUÇÕES EM SOFTWARE E HARDWARE Para embutidos mundo
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC
Bibliotecas
_CAN_FILTER_B2_F3 = 4, _CAN_FILTER_B2_F4 = 5;
Exemplo Biblioteca Esta é uma simples demonstração de CAN Biblioteca rotinas de uso. Primeiro nó inicia a comunicação com o segundo nó, enviando alguns dados para o seu endereço. A segundo nó responde enviando de volta os dados incrementado em 1. Primeiro nó em seguida faz o mesmo e envia os dados incrementado de volta para o segundo nó, etc Código para o nó CAN primeiro: unsigned char Can_Init_Flags, Can_Send_Flags, Can_Rcv_Flags / / pode bandeiras unsigned char Rx_Data_Len / / recebidos comprimento de dados em bytes char RxTx_Data [8] / / pode rx / tx buffer de dados char Msg_Rcvd; Sinalizador / recepção / const longo ID_1st = 12111, ID_2nd = 3; IDs / node / tempo Rx_ID; vazio main () { PORTC = 0; TRISC = 0;
Can_Send_Flags = & _CAN_TX_PRIORITY_0 / valor / formulário a ser utilizado _CAN_TX_XTD_FRAME E / com CanWrite _CAN_TX_NO_RTR_FRAME; Can_Init_Flags _CAN_CONFIG_SAMPLE_THRICE = & / Valor / formulário a ser utilizado _CAN_CONFIG_PHSEG2_PRG_ON & / / Com CANInit _CAN_CONFIG_XTD_MSG & _CAN_CONFIG_DBL_BUFFER_ON & _CAN_CONFIG_VALID_XTD_MSG; CANInitialize (1,3,3,3,1, Can_Init_Flags); / / Inicializa o módulo CAN CANSetOperationMode (_CAN_MODE_CONFIG, 0xFF); / / modo de configuração definidas CANSetMask (_CAN_MASK_B1, -1, _CAN_CONFIG_XTD_MSG); / mask1 definir todos os bits para os CANSetMask (_CAN_MASK_B2, -1, _CAN_CONFIG_XTD_MSG); / mask2 definir todos os bits para os CANSetFilter (_CAN_FILTER_B2_F4, ID_2nd, _CAN_CONFIG_XTD_MSG); / / set id B2_F4 filtro para segundo nó ID CANSetOperationMode (_CAN_MODE_NORMAL, 0xFF); RxTx_Data [0] = 9;
/ / Definir o modo normal / / conjunto de dados inicial a ser enviada
Mikroelektronika - Soluções de software e hardware para o mundo embutido
253
CAPÍTULO 7
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Bibliotecas
CanWrite (ID_1st, RxTx_Data, 1, Can_Send_Flags); / / envia mensagem inicial while (1) {/ / faz um loop infinito Msg_Rcvd CanRead = (& Rx_ID, RxTx_Data & Rx_Data_Len & Can_Rcv_Flags); / / receber mensagem se ((Rx_ID == ID_2nd) & & Msg_Rcvd) {/ / se a mensagem recebida de seleção ID PORTC RxTx_Data = [0] / / id de saída de dados, corrigir a PORTC RxTx_Data [0] + +; / / incrementa os dados recebidos Delay_ms (10); CanWrite (ID_1st, RxTx_Data, 1, Can_Send_Flags); / / incrementado enviar dados de volta } } }
Código para o nó CAN segundo: unsigned char Can_Init_Flags, Can_Send_Flags, Can_Rcv_Flags / / pode bandeiras unsigned char Rx_Data_Len / / recebidos comprimento de dados em bytes char RxTx_Data [8] / / pode rx / tx buffer de dados char Msg_Rcvd; sinalizador / recepção / const longo ID_1st = 12111, ID_2nd = 3; / node / Identificações tempo Rx_ID; vazio main () { PORTC = 0; TRISC = 0;
Can_Send_Flags = & _CAN_TX_PRIORITY_0 / valor / formulário a ser utilizado _CAN_TX_XTD_FRAME E / com CanWrite _CAN_TX_NO_RTR_FRAME; Can_Init_Flags = & _CAN_CONFIG_SAMPLE_THRICE / valor / formulário a ser utilizado _CAN_CONFIG_PHSEG2_PRG_ON E / com CANInit _CAN_CONFIG_XTD_MSG & _CAN_CONFIG_DBL_BUFFER_ON & _CAN_CONFIG_VALID_XTD_MSG &
CANInitialize (1,3,3,3,1, Can_Init_Flags); / / inicializa o módulo CAN externa CANSetOperationMode (_CAN_MODE_CONFIG, 0xFF); / / modo de configuração definidas CANSetMask (_CAN_MASK_B1, -1, _CAN_CONFIG_XTD_MSG); / / configura todos mask1 bits para os
254
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC
Bibliotecas
CANSetMask (_CAN_MASK_B2, -1, _CAN_CONFIG_XTD_MSG); / / configura todos mask2 bits para os CANSetFilter (_CAN_FILTER_B2_F3, ID_1st, _CAN_CONFIG_XTD_MSG); / set / ID da B2_F3 filtro para 1 nó ID CANSetOperationMode (_CAN_MODE_NORMAL, 0xFF); / / o modo NORMAL enquanto (1) {/ / faz um loop infinito Msg_Rcvd CanRead = (& Rx_ID, RxTx_Data & Rx_Data_Len, & Can_Rcv_Flags); / receber mensagens se ((Rx_ID == ID_1st) & & Msg_Rcvd) {/ / se a mensagem recebida de seleção ID PORTC RxTx_Data = [0]; / / id corrigir os dados, a produção a PORTC RxTx_Data [0] + +; / / incrementa os dados recebidos CanWrite (ID_2nd, RxTx_Data, 1, Can_Send_Flags); / / envia incredados documentados de volta } }
Conexão HW
Exemplo de interface CAN transceptor com MCU e ônibus Mikroelektronika - Soluções de software e hardware para o mundo embutido
255
CAPÍTULO 7
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Bibliotecas CANSPI BIBLIOTECA
O módulo SPI está disponível com uma série de microcontroladores PIC compatível. O mikroC PRO para PIC oferece uma biblioteca (driver) para trabalhar com CANSPI mikroElektronika's Placas de expansão (com ou MCP2515 MCP2510) via interface SPI. O CAN é um protocolo muito robusto que a detecção de erros e sinalização, de auto-verificação e confinamento de falhas. dados defeituoso pode e quadros remoto são retransmitidas automaticamente, semelhante ao Ethernet.
taxas de transferência de dados dependem da distância. Por exemplo, 1 Mbit / s pode ser obtida em netcomprimentos de trabalho abaixo de 40m, enquanto 250 Kbit / s pode ser obtida em comprimentos de rede abaixo 250m. Quanto maior a distância menor bitrate máximo que pode ser alcançado. O menor bitrate definido pelo padrão é 200Kbit / s. Os cabos utilizados são pares de fios trançados. CAN suporta dois formatos de mensagens: formato padrão, com 11 bits de identificador e Extensão formato, com 29 bits identificador. Nota: Consulte a norma CAN CAN sobre a resistência de terminação de ônibus. Uma velocidade de comunicação eficaz CANSPI depende SPI e, certamente, é mais lento do que "Real" CAN. A biblioteca utiliza o módulo de comunicação SPI. O usuário deve inicializar SPI módulo antes de usar o SPI LCD Gráfico Biblioteca. Para MCUs com dois módulos SPI é possível inicializar ambos e, em seguida, switch usando o SPI_Set_Active () rotina. CANSPI módulo refere-se a CANSPI mikroElektronika do Add-on board conectado ao módulo SPI de MCU. As seguintes variáveis das dependências externas de CANSPI Biblioteca deve ser definida na todos projetos usando CANSPI sbit sfr extern
Exemplo:
Chip linha Select.
sbit CanSpi_CS em RC0_bit;
sbit sfr extern CanSpi_Rst;
linha de reposição.
sbit CanSpi_Rst em RC2_bit;
sbit sfr extern CanSpi_CS_Direction;
Direção do Chip Selecione pino.
sbit CanSpi_CS_Direction em TRISC0_bit;
sbit sfr extern CanSpi_Rst_Direction;
Direção do pino de Reset. sbit CanSpi_Rst_Direction
CanSpi_CS;
256
Descrição:
em TRISC2_bit;
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 7
Bibliotecas
Rotinas da biblioteca - CANSPISetOperationMode - CANSPIGetOperationMode - CANSPIInitialize - CANSPISetBaudRate - CANSPISetMask - CANSPISetFilter - CANSPIread - CANSPIWrite As rotinas a seguir são para um uso interno da biblioteca, apenas: - RegsToCANSPIID - CANSPIIDToRegs Certifique-se de verificar constantes CANSPI necessário para utilizar algumas das funções.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
257
CAPÍTULO 7
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Nada. Define o módulo CANSPI para o modo solicitado. Parâmetros:
Descrição
- modo: CANSPI modo de operação do módulo. Valores válidos: CANSPI_OP_MODE conbalcões de (ver constantes CANSPI). - ESPERA: CANSPI modo de comutação pedido de verificação. Se WAIT == 0, a chamada não é
bloqueio. A função não verifica se o módulo está ligado a CANSPI solicitadas modo ou não. Chamador deve usar CANSPIGetOperationMode para verificar a cormodo de operação rect antes da operação de modo a realização específica. Se AGUARDE! = 0, o
Requer
Exemplo
As rotinas CANSPI são suportados apenas pelo MCUs com o módulo SPI. MCU tem de ser devidamente conectado a mikroElektronika de CANSPI Extra Câmara ou h lh t CANSPI V j no modo de l configuração d ã(aguardar tdentro i f i d t á i / / dConfigurar o módulo CANSPISetOperationMode até este modo estiver definido) CANSPISetOperationMode (_CANSPI_MODE_CONFIG, 0xFF);
CANSPIGetOperationMode Protótipo
char CANSPIGetOperationMode ();
Retorna
modo de operação atual.
Descrição
Requer
Exemplo
258
A função retorna o modo de operação atual do módulo CANSPI. Confira CANSPI_OP_MODE constantes (ver constantes CANSPI) ou folha de dados do dispositivo para ópera Modo de códigos ção A rotinas CANSPI são suportados apenas pelo MCUs com o módulo SPI. MCU tem de ser devidamente conectado a mikroElektronika de CANSPI Extra Câmara ou hardware semelhante Veja o exemplo de conexão na parte inferior desta página / / Verifica se o módulo CANSPI está no modo normal e se é fazer alguma coisa. if (CANSPIGetOperationMode () == _CANSPI_MODE_NORMAL) { ... }
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Nada. Inicializa o módulo CANSPI. Stand-Alone controlador CAN no módulo CANSPI é definido como:
Descrição
- Desabilite pode capturar - Continuar a CAN operação em modo de Espera - Não interromper as transmissões pendentes - Fcan relógio: 4 * Países Terceiros (FOSC) - Taxa de transmissão é definida de acordo com determinados parâmetros - Modo CAN: Normal - Filtro e as identificações de registros máscara são definidos como zero - Filtro e uma máscara tipo de estrutura da mensagem é definido de acordo com CAN_CONFIG_FLAGS valor SAM, SEG2PHTS, WAKFIL e DBEN bits são definidos de acordo toCANSPI_CONFIG_FLAGS valor.
Parâmetros: - SJW conforme definido na ficha técnica do controlador CAN - BRP conforme definido na ficha técnica do controlador CAN - PHSEG1 tal como definido no controlador CAN datasheet - PHSEG2 conforme definido na ficha técnica do controlador CAN - PROPSEG conforme definido na ficha técnica do controlador CAN - CAN_CONFIG_FLAGS é formado a partir de constantes predefinidas (ver CANSPI conbalcões de) As variáveis globais: - CanSpi_CS: Chip Selecionar linha
Requer
- CanSpi_Rst: linha de reset - CanSpi_CS_Direction: Direção do pino de Chip Select - CanSpi_Rst_Direction: Direção do pino de Reset
devem ser definidas antes de utilizar esta função. As rotinas CANSPI são suportados apenas pelo MCUs com o módulo SPI. O SPI módulo precisa ser inicializado. Veja o SPI1_Init e SPI1_Init_Advanced rotinas. MCU tem de ser devidamente conectado a mikroElektronika de CANSPI Extra Câmara ou simhomólogos de hardware. Veja o exemplo de conexão na parte inferior desta Mikroelektronika - Soluções de software e hardware para o mundo embutido
259
CAPÍTULO 7
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Bibliotecas / / Conexões CANSPI módulo RC0_bit; sbit CanSpi_CS em sbit CanSpi_CS_Direction em TRISC0_bit; sbit CanSpi_Rst em RC2_bit; sbit CanSpi_Rst_Direction em TRISC2_bit; / / Fim conexões CANSPI módulo
Exemplo
260
/ / Inicializa o módulo CANSPI com a taxa de transmissão e bandeiras de aceitação de mensagens, juntamente com as regras de amostragem char CanSPi_Init_Flags; ... CanSPi_Init_Flags = _CANSPI_CONFIG_SAMPLE_THRICE e / form / valor a ser utilizado _CANSPI_CONFIG_PHSEG2_PRG_ON & / / Com CANSPIInitialize _CANSPI_CONFIG_XTD_MSG & _CANSPI_CONFIG_DBL_BUFFER_ON & _CANSPI_CONFIG_VALID_XTD_MSG; ... SPI1_Init (); / / inicializa o módulo SPI CANSPIInitialize (1,3,3,3,1, CanSpi_Init_Flags); / / inicializa CANSPI módulo externo
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Nada. Define a taxa de CANSPI módulo de transmissão. Devido à complexidade do protocolo CAN, você não pode simplesmente forçar um valor bps. Em vez disso, use esta função quando o CANSPI módulo está em modo de configuração.
Descrição
SAM, SEG2PHTS e WAKFIL bits são definidos de acordo com CANSPI_CONFIG_FLAGS
valor. Consulte a ficha técnica para mais detalhes. Parâmetros: -
Requer
SJW como definidos na ficha técnica do controlador CAN BRP conforme definido na ficha técnica do controlador CAN PHSEG1 conforme definido na ficha técnica do controlador CAN PHSEG2 conforme definido na ficha técnica do controlador CAN
f d fi estar id nofimodo h téde iconfiguração, d t l caso d CAN O módulo CANSPI deve contrário, a função será ignorados. Veja CANSPISetOperationMode. As rotinas CANSPI são suportados apenas pelo MCUs com o módulo SPI. MCU tem para ser conectado corretamente mikroElektronika de CANSPI Extra
Exemplo
/ / Necessário definir taxa de transmissão e regras de amostragem char canspi_config_flags; ... CANSPISetOperationMode (CANSPI_MODE_CONFIG, 0xFF); / CONFIGURAÇÃO / setModo de ração (CANSPI mastro módulo de estar em modo de configuração para a taxa de transmissão configurações) canspi_config_flags = & _CANSPI_CONFIG_SAMPLE_THRICE _CANSPI_CONFIG_PHSEG2_PRG_ON & _CANSPI_CONFIG_STD_MSG & _CANSPI_CONFIG_DBL_BUFFER_ON & _CANSPI_CONFIG_VALID_XTD_MSG & _CANSPI_CONFIG_LINE_FILTER_OFF; CANSPISetBaudRate (1, 1, 3, 3, 1, canspi_config_flags);
Mikroelektronika - Soluções de software e hardware para o mundo embutido
261
CAPÍTULO 7
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Bibliotecas CANSPISetMask Protótipo
vazio CANSPISetMask (char CANSPI_MASK, tempo val, char CANSPI_CONFIG_FLAGS);
Retorna
Nada. Configura uma máscara de filtragem avançada de mensagens. O parâmetro valor é pouco ajustadas aos registos máscara apropriada. Parâmetros:
Descrição
- CAN_MASK: CANSPI número de máscara de módulo. Valores válidos: CANSPI_MASK costants (Ver constantes CANSPI) - máscara de valor do registo: val - CAN_CONFIG_FLAGS: seleciona o tipo de mensagem para filtrar. Valores válidos: CANSPI_CONFIG_ALL_VALID_MSG, CANSPI_CONFIG_MATCH_MSG_TYPE e CANSPI_CONFIG_STD_MSG, CANSPI_CONFIG_MATCH_MSG_TYPE e CANSPI_CONFIG_XTD_MSG.
(Ver constantes CANSPI) O módulo CANSPI deve estar no modo de configuração, caso contrário, a função Requer
será ignorados. Veja CANSPISetOperationMode. As rotinas são suportados CANSPI apenas por MCUs com o módulo SPI. MCU tem de ser devidamente conectado a mikroElektronika de CANSPI Extra
Exemplo
/ / Definir a máscara de filtro adequado e valor tipo de mensagem CANSPISetOperationMode (_CANSPI_MODE_CONFIG, 0xFF); / / Modo conjunto de configurações (módulo CANSPI deve estar no modo de config para as configurações de máscara) / / Set B1 todos os bits de máscara a 1 (todos os bits são filtrados relevante): / / Observe que -1 é apenas uma maneira mais barata de escrever 0xFFFFFFFF. / / Complemento irá fazer o truque e encha-o com os entes. CANSPISetMask (_CANSPI_MASK_B1, -1, _CANSPI_CONFIG_MATCH_MSG_TYPE & _CANSPI_CONFIG_XTD_MSG);
262
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC
Bibliotecas
CANSPISetFilter Protótipo
vazio CANSPISetFilter (char CANSPI_FILTER, tempo val, char CANSPI_CONFIG_FLAGS);
Retorna
Nada. Configura a mensagem de filtro. O parâmetro valor é pouco adaptado ao discomeu registros filtro. Parâmetros:
Descrição
- CAN_FILTER: módulo de filtro CANSPI número. Valores válidos: CANSPI_FILTER constantes (ver constantes CANSPI) - valor do registro do filtro: val - CAN_CONFIG_FLAGS: seleciona o tipo de mensagem para filtrar. Valores válidos: CANSPI_CONFIG_ALL_VALID_MSG, CANSPI_CONFIG_MATCH_MSG_TYPE e CANSPI_CONFIG_STD_MSG, CANSPI_CONFIG_MATCH_MSG_TYPE e CANSPI_CONFIG_XTD_MSG.
(Ver constantes CANSPI) O módulo CANSPI deve estar no modo de configuração, caso contrário, a função Requer
será ignorados. Veja CANSPISetOperationMode. As rotinas CANSPI são suportados apenas pelo MCUs com o SPI módulo. MCU tem de ser devidamente conectado a mikroElektronika de CANSPI Extra
Exemplo
/ / Definir o valor do filtro adequado e tipo de mensagem CANSPISetOperationMode (_CANSPI_MODE_CONFIG, 0xFF); / / Modo conjunto de configurações (módulo CANSPI deve estar no modo de config para as definições do filtro) / * Defina id B1_F1 filtro para 3: * / CANSPISetFilter (_CANSPI_FILTER_B1_F1, 3, _CANSPI_CONFIG_XTD_MSG);
Mikroelektronika - Soluções de software e hardware para o mundo embutido
- 0 se nada for recebido - 0xFF se um dos buffers de recepção está cheio (mensagem recebidos) Se pelo menos um buffer de recebimento integral for encontrado, ele será processado nas seguintes maneira: - ID da mensagem é recuperada e armazenada na localização fornecidas pela id
Descrição
parâmetro - Mensagem dados são recuperados e armazenados em um buffer fornecido pelo o rd_data parâmetro - Tamanho da mensagem é recuperada e armazenada a localização fornecida pela data_len parâmetro - Mensagem bandeiras são recuperados e armazenados para a localização fornecida pela CAN_RX_MSG_FLAGS parâmetro O módulo CANSPI deve estar em um modo no qual é possível receber. Veja CANSPISetOperationMode.
Requer
As rotinas CANSPI são suportados apenas pelo MCUs com o módulo SPI. MCU tem de ser devidamente conectado a mikroElektronika de CANSPI Extra Câmara ou
Exemplo
264
/ / Verificação o módulo CANSPI para mensagens recebidas. Se algum foi receberam fazer alguma coisa. char msg_rcvd, rx_flags, data_len; char dados [8]; tempo msg_id; ... CANSPISetOperationMode (CA_NSPI_MODE_NORMAL, 0xFF); / / Definir o modo normal (módulo CANSPI deve estar no modo em que receber é possível) ... rx_flags = 0; / / Limpa bandeiras de mensagem if (= msg_rcvd CANSPIRead (msg_id, dados data_len, rx_flags)) { ... }
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
- 0 Se todos os buffers de transmissão estão ocupados - 0xFF se pelo menos um buffer de transmissão está disponível Se pelo menos um vazio buffer de transmissão for encontrado, a função envia mensagem em fila para a transmissão.
Descrição
Parâmetros: - id: identificador de mensagem CAN. Valores válidos: 11 ou 29 valores pouco, dependendo de
tipo de mensagem (padrão ou estendida) O módulo CANSPI deve estar no modo em que a transmissão seja possível. Veja CANSPISetOperationMode. Requer
As rotinas CANSPI são suportados apenas pelo MCUs com o módulo SPI. MCU tem de ser devidamente conectado ao mikroElektronika de CANSPI Extra Câmara ou
Exemplo
/ / Envia mensagem prorrogado mensagem CAN com a identificação adequada e dados char tx_flags; char dados [8]; tempo msg_id; ... CANSPISetOperationMode (_CANSPI_MODE_NORMAL, 0xFF); / / Definir o modo normal (CANSPI deve estar no modo em que a transmissão é possível) tx_flags = _CANSPI_TX_PRIORITY_0 & _CANSPI_TX_XTD_FRAME; / / Mensagem de flags CANSPIWrite (msg_id, dados, 2, tx_flags);
Mikroelektronika - Soluções de software e hardware para o mundo embutido
265
CAPÍTULO 7
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Bibliotecas CANSPI Constantes
Há um número de constantes predefinidas na biblioteca CANSPI. Você precisa ser familiarizado com eles, a fim de ser capaz de usar a biblioteca eficazmente. Check-exame plo, no final do capítulo.
CANSPI_OP_MODE A CANSPI_OP_MODE CANSPI constantes definem o modo de operação. Função CANSPISetOperationMode espera uma destas como é argumento: const char _CANSPI_MODE_BITS _CANSPI_MODE_NORMAL _CANSPI_MODE_SLEEP _CANSPI_MODE_LOOP _CANSPI_MODE_LISTEN _CANSPI_MODE_CONFIG
= 0xE0, = 0x00, = 0x20, = 0x40, = 0x60, = 0x80;
/ / Utilize esta opção para acesso opmode
bits
CANSPI_CONFIG_FLAGS A CANSPI_CONFIG_FLAGS constantes definem bandeiras relacionadas com o módulo CANSPI configuração. As funções CANSPIInitialize, CANSPISetBaudRate, CANSPISetMask e CANSPISetFilter esperar um desses (ou uma combinação bit a bitção), como seu argumento:
Você pode usar AND bit a bit (&) para formar config byte fora desses valores. Por exemplo: init = & _CANSPI_CONFIG_SAMPLE_THRICE _CANSPI_CONFIG_PHSEG2_PRG_ON & _CANSPI_CONFIG_STD_MSG & _CANSPI_CONFIG_DBL_BUFFER_ON & _CANSPI_CONFIG_VALID_XTD_MSG & _CANSPI_CONFIG_LINE_FILTER_OFF; ... CANSPIInitialize (1, 1, 3, 3, 1, o init);
/ / Inicializa CANSPI
CANSPI_TX_MSG_FLAGS CANSPI_TX_MSG_FLAGS são flags relacionados com a transmissão de uma mensagem CAN: const char _CANSPI_TX_PRIORITY_BITS _CANSPI_TX_PRIORITY_0 _CANSPI_TX_PRIORITY_1 _CANSPI_TX_PRIORITY_2 _CANSPI_TX_PRIORITY_3 _CANSPI_TX_FRAME_BIT _CANSPI_TX_STD_FRAME _CANSPI_TX_XTD_FRAME
Você pode usar AND bit a bit (&) para ajustar os sinalizadores apropriados. Por exemplo: / * Valor de forma a ser usado como sinalizador de mensagem de envio: * / send_config = _CANSPI_TX_PRIORITY_0 & _CANSPI_TX_XTD_FRAME & _CANSPI_TX_NO_RTR_FRAME; ... CANSPIWrite (id, dados, 1, send_config);
Mikroelektronika - Soluções de software e hardware para o mundo embutido
267
CAPÍTULO 7
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Bibliotecas CANSPI_RX_MSG_FLAGS
CANSPI_RX_MSG_FLAGS são flags relacionados com a recepção da mensagem CAN. Se um particubit lar estiver definido, então correspondente significado é TRUE ou então ele será FALSE. const char _CANSPI_RX_FILTER_BITS _CANSPI_RX_FILTER_1 _CANSPI_RX_FILTER_2 _CANSPI_RX_FILTER_3 _CANSPI_RX_FILTER_4 _CANSPI_RX_FILTER_5 _CANSPI_RX_FILTER_6
= = = = = = =
0x07, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
/ / Utilize esta opção para filtrar o acesso bits
_CANSPI_RX_OVERFLOW = 0x08 / / Defina se Overflowed mais limpo _CANSPI_RX_INVALID_MSG = 0x10, / / Define se inválido mais limpo _CANSPI_RX_XTD_FRAME = 0x20 / / mensagem Defina se XTD mais apuradas _CANSPI_RX_RTR_FRAME = 0x40 / / mensagem Defina se RTR mais apuradas _CANSPI_RX_DBL_BUFFERED = 0x80 / / Define se a mensagem foi difícil ware buffer duplo
Você pode usar AND bit a bit (&) para ajustar o sinalizadores apropriados. Por exemplo: se (MsgFlag & _CANSPI_RX_OVERFLOW! = 0) { ... / / Receptor estouro ocorreu. / / Nós perdemos a nossa mensagem anterior. }
CANSPI_MASK A CANSPI_MASK constantes definem códigos máscara. Função CANSPISetMask espera um desses como é argumento: const char _CANSPI_MASK_B1 = 0, _CANSPI_MASK_B2 = 1;
CANSPI_FILTER A CANSPI_FILTER constantes definir códigos de filtro. Funções CANSPISetFilter espera que um destes, como é o argumento: const char _CANSPI_FILTER_B1_F1 _CANSPI_FILTER_B1_F2 _CANSPI_FILTER_B2_F1 _CANSPI_FILTER_B2_F2
268
= = = =
0; 1, 2, 3 º,
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Exemplo Biblioteca Esta é uma simples demonstração de CANSPI Biblioteca de rotinas de utilização. Primeiro nó iniAtes a comunicação com o segundo nó, enviando alguns dados para o seu endereço. O segundo nó responde enviando de volta os dados incrementado em 1. Primeiro nó em seguida, faz o mesmo e envia os dados de volta para incrementado segundo nó, etc Código para o nó CANSPI primeiro: unsigned char Can_Init_Flags, Can_Send_Flags, Can_Rcv_Flags / / pode bandeiras unsigned char Rx_Data_Len / / recebidos comprimento de dados em bytes char RxTx_Data [8] / / pode rx / tx buffer de dados char Msg_Rcvd / / pavilhão de recepção const longo ID_1st = 12111, ID_2nd = 3; IDs / node / tempo Rx_ID; / / Conexões CANSPI módulo em sbit CanSpi_CS sbit CanSpi_CS_Direction em sbit CanSpi_Rst em sbit CanSpi_Rst_Direction em / / Fim conexões CANSPI módulo
Can_Send_Flags = & _CANSPI_TX_PRIORITY_0 / valor / form a ser usado _CANSPI_TX_XTD_FRAME E / com CANSPIWrite _CANSPI_TX_NO_RTR_FRAME; Can_Init_Flags = & _CANSPI_CONFIG_SAMPLE_THRICE / valor / Formulário a ser utilizado _CANSPI_CONFIG_PHSEG2_PRG_ON E / com CANSPIInit _CANSPI_CONFIG_XTD_MSG & _CANSPI_CONFIG_DBL_BUFFER_ON & _CANSPI_CONFIG_VALID_XTD_MSG;
Mikroelektronika - Soluções de software e hardware para o mundo embutido
269
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC
Bibliotecas SPI1_Init ();
/ / inicializar o módulo SPI1
CANSPIInitialize (1,3,3,3,1, Can_Init_Flags); / / Inicializar CANSPI externa módulo CANSPISetOperationMode (_CANSPI_MODE_CONFIG, 0xFF); / / modo de configuração definidas CANSPISetMask (_CANSPI_MASK_B1, -1, _CANSPI_CONFIG_XTD_MSG); / / set todos mask1 bits para os CANSPISetMask (_CANSPI_MASK_B2, -1, _CANSPI_CONFIG_XTD_MSG); / / set todos mask2 bits para os CANSPISetFilter (_CANSPI_FILTER_B2_F4, ID_2nd, _CANSPI_CONFIG_XTD_MSG); / / Set id B2_F4 de filtro para segundo nó ID CANSPISetOperationMode (_CANSPI_MODE_NORMAL, 0xFF); / / o modo NORMAL RxTx_Data [0] = 9;
while (1) {/ / faz um loop infinito Msg_Rcvd CANSPIRead = (& Rx_ID, RxTx_Data & Rx_Data_Len, Can_Rcv_Flags); / receber mensagens se ((Rx_ID == ID_2nd) & & Msg_Rcvd) { / Mensagem se cheque recebido id PORTB RxTx_Data = [0]; / Id saída de dados, corrigir a PORTC RxTx_Data [0] + +; / Incremento de dados recebidos Delay_ms (10); CANSPIWrite (ID_1st, RxTx_Data, 1, Can_Send_Flags); / Incrementado enviar dados de volta } }
}
270
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC
Bibliotecas
Código para o nó CANSPI segundo: unsigned char Can_Init_Flags, Can_Send_Flags, Can_Rcv_Flags / / pode bandeiras unsigned char Rx_Data_Len / / recebidos comprimento de dados em bytes char RxTx_Data [8] / / pode rx / tx de dados buffer char Msg_Rcvd; sinalizador / recepção / const longo ID_1st = 12111, ID_2nd = 3; IDs / node / tempo Rx_ID; / / Conexões CANSPI módulo em sbit CanSpi_CS em sbit CanSpi_CS_Direction em sbit CanSpi_Rst sbit CanSpi_Rst_Direction em / / Fim conexões CANSPI módulo
Can_Send_Flags _CANSPI_TX_PRIORITY_0 = & / Valor / formulário a ser utilizado _CANSPI_TX_XTD_FRAME E / com CANSPIWrite _CANSPI_TX_NO_RTR_FRAME; Can_Init_Flags = & _CANSPI_CONFIG_SAMPLE_THRICE / valor / Formulário a ser utilizado _CANSPI_CONFIG_PHSEG2_PRG_ON E / com CANSPIInit _CANSPI_CONFIG_XTD_MSG & _CANSPI_CONFIG_DBL_BUFFER_ON & _CANSPI_CONFIG_VALID_XTD_MSG & _CANSPI_CONFIG_LINE_FILTER_OFF; SPI1_Init ();
/ / Inicializa SPI1 módulo
CANSPIInitialize (1,3,3,3,1, Can_Init_Flags); / / Inicializa externa módulo CANSPI CANSPISetOperationMode (_CANSPI_MODE_CONFIG, 0xFF); / CONFIGURAÇÃO / setModo de Ração CANSPISetMask (_CANSPI_MASK_B1, -1, _CANSPI_CONFIG_XTD_MSG); / / set todos mask1 bits para os CANSPISetMask (_CANSPI_MASK_B2, -1, _CANSPI_CONFIG_XTD_MSG); / / set
Mikroelektronika - Soluções de software e hardware para o mundo embutido
271
CAPÍTULO 7
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Bibliotecas todos mask2 bits para os
CANSPISetFilter (_CANSPI_FILTER_B2_F3, ID_1st, _CANSPI_CONFIG_XTD_MSG); / / Configura id do B2_F3 filtro para 1 ID do nó CANSPISetOperationMode (_CANSPI_MODE_NORMAL, 0xFF); / / o modo NORMAL enquanto (1) {/ / faz um loop infinito Msg_Rcvd CANSPIRead = (& Rx_ID, RxTx_Data & Rx_Data_Len, & Can_Rcv_Flags); / receber mensagens se ((Rx_ID == ID_1st) & & Msg_Rcvd) {/ / se a mensagem recebida de seleção ID PORTB = RxTx_Data [0] / / id de saída de dados, corrigir a PORTC RxTx_Data [0] + +; / / incrementa os dados recebidos CANSPIWrite (ID_2nd, RxTx_Data, 1, Can_Send_Flags); / / envia dados incrementado de volta } } }
Conexão HW
Exemplo de interface CAN MCP2510 transceptor com MCU via interface SPI
272
Mikroelektronika - Software e Soluções de hardware para Embedded World
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 7
Bibliotecas
COMPACT FLASH BIBLIOTECA O Compact Flash Biblioteca fornece rotinas para acessar dados em Compact Flash cartão (abrev. CF ainda no texto). Os cartões CF são amplamente utilizados elementos de memória, comcomumente usados com câmeras digitais. Grande capacidade e tempo de acesso excelente de apenas alguns microssegundos torná-los muito atrativos para aplicações de microcontroladores.
No cartão CF, os dados são divididos em setores. Um setor compreende geralmente 512 bytes. Rotinas para manipulação de arquivos, o Cf_Fat rotinas, não são executadas diretamente, mas susivamente através 512B buffer. Nota: As rotinas para manipulação de arquivos só podem ser utilizados com sistema de arquivos FAT16. Nota: As funções Biblioteca criar e ler arquivos no diretório raiz só. Nota: As funções Biblioteca preencher ambas as tabelas e FAT1 FAT2 ao escrever em arquivos, mas o arquivo de dados está sendo leitura da tabela FAT1 só, ou seja, não há recuperação, se a tabela FAT1 fica corrompido.
Nota: Se o cartão SD / MMC tem Master Boot Record (MBR), a biblioteca funcionará com a primeiro disponível partição (lógica) primário que tem tamanho diferente de zero. Se o MMC / SD placa tem Volume Boot Record (ou seja, há apenas uma partição lógica e não MBR), a biblioteca trabalha com cartão de inteira como uma única partição. Para mais informações sobre MBR, física e unidades lógicas, primário / secundário partições e tabelas de partições, consulte outros recursos, por exemplo, Wikipedia e similares. Nota: Antes de escrever a operação, certifique-se de não substituir ou setor de inicialização FAT como poderia fazer o seu cartão no PC ou câmera digital ilegível. ferramentas de mapeamento de unidade, como Winhex, pode ser de grande ajuda.
Mikr oele ktro nika Solu ções de soft
www.mecatronicadegaragem.blogspot.com
ware e hardware para o mundo embutido
273
CAPÍTULO 7
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Bibliotecas As seguintes variáveis deve ser definida em Descrição: todos os projetos usando Compact Bibli t d Fl h sfr extern char Compact Flash Porta de CF_Data_Port; sbit sfr extern CF_RDY;
char CF_Data_Port em PORTD; sbit CF_RDY em RB7_bit;
sbit sfr extern CF_WE;
Write Enable linha de sinal.
sbit CF_WE em RB6_bit;
sbit sfr extern CF_OE;
Habilitar saída de linha do
sbit CF_OE em RB5_bit;
sbit sfr extern CF_CD1;
274
d d Pronto linha de sinal.
Exemplo:
i l Chip detecta sinal de linha.
sbit CF_CD1 em RB4_bit;
sbit sfr extern CF_CE1;
Chip linha de sinal Enable.
sbit CF_CE1 em RB3_bit;
sbit sfr extern CF_A2;
Endereço pino 2.
sbit CF_A2 em RB2_bit;
sbit sfr extern CF_A1;
Endereço pino 1.
sbit CF_A1 em RB1_bit;
sbit sfr extern CF_A0;
Endereço pino 0.
sbit CF_A0 em RB0_bit;
sbit sfr extern CF_RDY_direction;
Direção da o pino Ready.
sbit CF_RDY_direcção em TRISB7_bit;
sbit sfr extern CF_WE_direction;
Direção do Write Enable alfinete.
sbit CF_WE_direction em TRISB6_bit;
sbit sfr extern CF_OE_direction;
Direção da Saída Habilitar pino.
sbit CF_OE_direction em TRISB5_bit;
sbit sfr extern CF_CD1_direction;
Direção do Chip detecta alfinete.
sbit CF_CD1_direcção em TRISB4_bit;
sbit sfr extern CF_CE1_direction;
Direção do Chip Enable alfinete.
sbit CF_CE1_direcção em TRISB3_bit;
sbit sfr extern CF_A2_direction;
Direção do endereço 2 alfinete.
sbit CF_A2_direction em TRISB2_bit;
sbit sfr extern CF_A1_direction;
Direção do endereço 1 alfinete.
sbit CF_A1_direction em TRISB1_bit;
sbit sfr extern CF_A0_direction;
Direção do endereço 0 alfinete.
sbit CF_A0_direction em TRISB0_bit;
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 7
Bibliotecas
Rotinas da biblioteca - Cf_Init - Cf_Detect - Cf_Enable - Cf_Disable - Cf_Read_Init - Cf_Read_Byte - Cf_Write_Init - Cf_Write_Byte - Cf_Read_Sector - Cf_Write_Sector Rotinas para manipulação de arquivos: - Cf_Fat_Init - Cf_Fat_QuickFormat - Cf_Fat_Assign - Cf_Fat_Reset - Cf_Fat_Read - Cf_Fat_Rewrite - Cf_Fat_Append - Cf_Fat_Delete - Cf_Fat_Write - Cf_Fat_Set_File_Date - Cf_Fat_Get_File_Date - Cf_Fat_Get_File_Size - Cf_Fat_Get_Swap_File A rotina a seguir é para o uso interno do compilador apenas: - Cf_Issue_ID_Command
Mikroelektronika - Soluções de software e hardware para o mundo embutido
275
CAPÍTULO 7
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Bibliotecas Cf_Init Protótipo
vazio Cf_Init ();
Retorna
Nada.
Descrição
Inicializa as portas de forma adequada para a comunicação com o cartão CF. As variáveis globais:
Requer
-
CF_Data_Port : Compact Flash porta de dados CF_RDY : Linha de sinal Ready CF_WE Escrever habilitar a linha de sinal CF_OE Saída: permitir que o sinal de linha CF_CD1 : Chip detecta sinal de linha CF_CE1 : Linha de sinal Enable CF_A2 : Endereço 2 pinos CF_A1 : Pino Endereço 1 CF_A0 : Pino endereço 0 CF_RDY_direction : Direção do pino Ready CF_WE_direction : Direção do Write enable pinos CF_OE_direction : Direção de permitir a saída do pino CF_CD1_direction : Direção da Chip detecta o pino CF_CE1_direction : Direção da Chip permitirá pin CF_A2_direction : Direção do pino de endereço 2 CF_A1_direction : Direção da Endereço pino 1 CF_A0_direction : Direção do endereço 0 pin
devem ser definidas antes de utilizar esta função. / / Set pinagem compact flash char Cf_Data_Port em PORTD;
Exemplo
sbit sbit sbit sbit sbit sbit sbit sbit
CF_RDY em RB7_bit; CF_WE em RB6_bit; CF_OE em RB5_bit; CF_CD1 em RB4_bit; CF_CE1 em RB3_bit; CF_A2 em RB2_bit; CF_A1 em RB1_bit; CF_A0 em RB0_bit;
sbit CF_RDY_direction em TRISB7_bit; sbit CF_WE_direction em TRISB6_bit; sbit CF_OE_direction em TRISB5_bit; sbit CF_CD1_direction em TRISB4_bit; sbit CF_CE1_direction em TRISB3_bit; sbit CF_A2_direction em TRISB2_bit; sbit CF_A1_direction em TRISB1_bit; sbit CF_A0_direction em TRISB0_bit; / / Fim do pinout compact flash ... Cf_Init (); / / inicializa CF
276
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 7
Bibliotecas
Cf_Detect Protótipo
unsigned short Cf_Detect (void);
Retorna
- 1 - Se o cartão CF foi detectada - 0 - Caso contrário
Descrição
Verifica se há presença de cartão CF, lendo o chip detectar alfinete.
Requer
As portas MCU correspondente deverá ser devidamente inicializado para o cartão CF. Veja
Exemplo
/ / Espera até o cartão CF está inserido: fazer nop asm; enquanto (! Cf_Detect ());
Cf_Enable Protótipo
vazio Cf_Enable (void);
Retorna
Nada.
Descrição
Requer Exemplo
Ativa o dispositivo. Rotina deve ser chamado somente se você tiver desativado o dispositivo por meio da rotina Cf_Disable. Estas duas rotinas em conjunto permitir você livre / ocupam linha de dados quando se trabalha com vários di portas iti MCU correspondente deverá ser devidamente inicializado para cartão CF. As Veja / / Ativar o flash compacto Cf_Enable ();
Cf_Disable Protótipo
vazio Cf_Disable (void);
Retorna
Nada.
Descrição
Rotina desativa o dispositivo e libera as linhas de dados para outros dispositivos. Para ativar o dispositivo novamente, chame Cf_Enable. Estas duas rotinas em conjunto permitem livre / ocupam linha de dados quando se trabalha com vários dispositivos.
Requer
As portas MCU correspondente deverá ser devidamente inicializado para cartão CF. Veja
Exemplo
/ / Desativar flash compacto Cf_Disable ();
Mikroelektronika - Soluções de software e hardware para o mundo embutido
277
CAPÍTULO 7
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Bibliotecas Cf_Read_Init Protótipo
vazio Cf_Read_Init (unsigned long endereço, unsigned short sector_count);
Retorna
Nada. Inicializa cartão CF para leitura.
Descrição
Parâmetros: - endereço: o primeiro setor a ser preparado para operação de leitura. - sector_count: número de setores a serem preparados para a leitura de ã
Requer Exemplo
As portas MCU correspondente deverá ser devidamente inicializado para cartão CF. Veja i /Cf/ IInicializa o flash compacto para a leitura do setor 590 Cf_Read_Init (590, 1);
Cf_Read_Byte Protótipo
unsigned short Cf_Read_Byte (void);
Retorna um byte lido do buffer sector Compact Flash. Retorna Nota: Superior byte do não assinado valor de retorno está desmarcada. Descrição
Lê um byte de Compact Flash sector Local de buffer atualmente apontado pelos ponteiros internos ler. Estas indicações serão autoicremented da leitura.
Requer
As portas MCU correspondente deverá ser devidamente inicializado para cartão CF. Veja Cf_Init. cartão CF deve ser inicializado para a leitura operação Veja Cf Read Init
Exemplo
278
/ / Lê um byte de memória Compact Flash: dados char; ... = dados Cf_Read_Byte ();
Mikroelektronika - Software e hardware SOLUÇÕES PARA mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 7
Bibliotecas
Cf_Write_Init Protótipo
vazio Cf_Write_Init (unsigned long endereço, unsigned short sectcnt);
Retorna
Nada. Inicializa cartão CF para a escrita.
Descrição
Parâmetros: - endereço: o primeiro setor a ser preparado para operação de escrita. - sectcnt: número de setores a serem preparados para a escrita operação.
Requer Exemplo
As portas MCU correspondente deverá ser devidamente inicializado para cartão CF. Veja Cf i / / IInicializa o flash compacto para escrever para o setor 590 Cf_Write_Init (590, 1);
Cf_Write_Byte Protótipo
vazio Cf_Write_Byte (unsigned short data_);
Retorna
Nada.
Descrição
Grava um byte no buffer local Compact Flash sector actualmente apontada pelo escrito ponteiros. Estas indicações serão autoicremented da leitura. Quando buffer sector está cheio, seu conteúdo será transferido para a memória flash apropriado sector. Parâmetros: - Data : byte a ser escrito
As portas MCU correspondente deverá ser devidamente inicializado para cartão CF. Requer
Veja Cf_Init. cartão CF deve ser inicializado para escrever a operação Veja Cf Write Init
Exemplo
char = dados 0xAA; ... Cf_Write_Byte (dados);
Mikroelektronika - Soluções de software e hardware para o mundo embutido
279
CAPÍTULO 7
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Bibliotecas Cf_Read_Sector Protótipo
vazio Cf_Read_Sector (unsigned long sector_number, unsigned short * Buffer);
Retorna
Nada. Lê um setor (512 bytes). Ler dados são armazenados em buffer desde pela buffer parâmetro.
Descrição
Parâmetros: sector_number: o setor a ser lido. buffer: buffer de dados de pelo menos 512 bytes de comprimento.
Requer
Exemplo
As portas MCU correspondente deverá ser devidamente inicializado para cartão CF. Veja Cf i / /I Ler o setor 22 unsigned short dados [512]; ... Cf_Read_Sector (22, dados);
Cf_Write_Sector Protótipo
vazio Cf_Write_Sector (unsigned long sector_number, unsigned short * Buffer);
Retorna
Nada. Grava 512 bytes de dados fornecidos pelo buffer parâmetro para um sector da CF.
Descrição
Parâmetros: - Sector_number: setor a ser escrito. - Buffer: buffer de dados de 512 bytes de comprimento.
280
Requer
As portas MCU correspondente deverá ser devidamente inicializado para cartão CF. Veja
Exemplo
/ / Escreve para o setor 22 unsigned short dados [512]; ... Cf_Write_Sector (22, dados);
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 7
Bibliotecas
Cf_Fat_Init Protótipo
unsigned short Cf_Fat_Init ();
Retorna
- 0 - Se o cartão CF foi detectado e inicializado com sucesso - 1 - Se o setor de inicialização FAT16 não foi encontrado - 255 - Caso o cartão não foi detectado
Descrição
Inicializa cartão CF, lê CF setor de inicialização FAT16 e extrai os dados necessários
Requer
Nada.
Exemplo
/ / Inicia a biblioteca do FAT se (! Cf_Fat_Init ()) {/ / Inicia a biblioteca do FAT ... }
- 0 - Se o cartão CF foi detectado, formatei e inicializado com sucesso - 1 - se o formato FAT16 foi unseccessful - 255 - Caso o cartão não foi detectado
Formatos para FAT16 e inicializa o cartão CF. Parâmetros: - Cf_fat_label: rótulo de volume (11 caracteres). Se menos de 11
Descrição
caracteres são prestadas, a etiqueta será preenchido com espaços. Se a string é null passado, o volume não será identificado. Nota: Esta rotina pode ser utilizado em substituição ou em conjunto com a rotina Cf_Fat_Init.
Requer Exemplo
Nota: Se o cartão CF já contém um setor de inicialização válido, ela Nada. //--- Formato e inicializar a biblioteca do FAT se (! Cf_Fat_QuickFormat (& cf_fat_label)) { ... }
Mikroelektronika - Soluções de software e hardware para o mundo embutido
281
CAPÍTULO 7
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Bibliotecas Cf_Fat_Assign Protótipo
unsigned short Cf_Fat_Assign (char * Nome do arquivo, char file_cre_attr);
Retorna
- 0 se o arquivo não existe e nenhum arquivo novo é criado. - 1 se o arquivo já existe ou o arquivo não existe, mas um novo arquivo é criado.
Atribui arquivo para operações de arquivo (ler, escrever, apagar ...). Todos ópera arquivo subseqüenteções será aplicado sobre o arquivo designado. Parâmetros: - filename: nome do arquivo que deve ser atribuído para operações de arquivo. O nome do arquivo
Descrição
Requer Exemplo
282
devem estar em formato DOS 8.3 (Nome_do_arquivo.extensão). O nome do arquivo e extensão ser automaticamente preenchido com espaços pela biblioteca, se tiverem menos de comprimento necessária ("mikro.tx", ou seja - ". mikro tx">), para que o usuário não tem que cuidar disso. O nome do arquivo e extensão são maiúsculas e minúsculas. A biblioteca irá convertê-los para sustentarcaso er automaticamente, assim que o usuário não tem que tomar cuidado com isso. Além disso, a fim de manter a compatibilidade com a primeira versão desta biblioteca, Bitde arquivo Másc pode ser inserido como cadeia Descrição nomes MAIÚSCULAS de 11 bytes de comprimento, sem 0 0x01 Leia apenas caractere ponto entre o nome do arquivo e extensão (ie "MIKROELETXT" -> 1 0x02 Neste caso, os 3 últimos caracteres Oculto da string são considerados MIKROELE.TXT). a extensão de arquivo. 2 0x04 Sistema - file_cre_attr: bandeiras e criação do arquivo attributs. Cada bit corresponde 3 0x08 Volume Label à atribuíveis arquivo apropriado: 4 0x10 Subdiretório 5
0x20
Arquivo
6
0x40
7
0x80
Dispositivo (uso interno somente, nunca encontrado di ) criação. Se o arquivo não existe e essa Arquivo bandeira bandeira é
Cartão CF e FC biblioteca deve ser inicializado para operações de arquivo. Veja Cf F t I it / / Cria arquivo com os atributos de arquivo se ele já não existe Cf_Fat_Assign ("MIKRO007.TXT", 0xA0);
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 7
Bibliotecas
Cf_Fat_Reset Protótipo
vazio Cf_Fat_Reset (unsigned long * Tamanho);
Retorna
Nada. Abre atualmente atribuídos arquivo para leitura.
Descrição
Parâmetros: - Size: tamanho do buffer para armazenar arquivo. Após o arquivo foi aberto para leitura de seu tamanho é
Requer Exemplo
Cartão CF e FC biblioteca deve ser inicializado para operações de arquivo. Veja Cf_Fat_Init. O i dlong tamanho; i d fi id V j Cf F A i unsigned ... Cf_Fat_Reset (tamanho);
Cf_Fat_Read Protótipo
vazio Cf_Fat_Read (unsigned short * Bdata);
Retorna
Nada. Lê um byte do arquivo atualmente atribuídos aberto para leitura. Ao exe-função ponteiros de arquivo cução será definido para o próximo caractere no arquivo.
Descrição
Parâmetros: - Bdata: buffer para armazenar ler byte. Após esta execução função de leitura d
b t
é
Cartão CF e FC biblioteca deve ser inicializado para operações de arquivo. Veja Requer
Exemplo
Cf_Fat_Init. O arquivo deve ser previamente definidos. Veja Cf_Fat_Assign. char caráter; ... Cf_Fat_Read (e personagem);
Mikroelektronika - Soluções de software e hardware para o mundo embutido
283
CAPÍTULO 7
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Bibliotecas Cf_Fat_Rewrite Protótipo
vazio Cf_Fat_Rewrite ();
Retorna
Nada.
Descrição
Abre atualmente atribuídos arquivo para gravação. Se o arquivo não está vazio o seu conteúdo será d Cartão CF e FC biblioteca deve ser inicializado para o arquivo operações. Veja
Requer Exemplo
Cf_Fat_Init. O i do arquivo ibpara íd escrita i / / Abre
V j Cf F
A i
Cf_Fat_Rewrite ();
Cf_Fat_Append Protótipo
vazio Cf_Fat_Append ();
Retorna
Nada.
Descrição
Requer
Abre atualmente atribuídos arquivo para acrescentar. Após este ficheiro execução da função ponteiros será posicionado após o último byte no arquivo, então qualquer mandado de i CFb e FC biblioteca deve ser inicializado para operações de arquivo. Veja Cartão Cf_Fat_Init.
Exemplo
/ / Abre o arquivo para anexando Cf_Fat_Append ();
Cf_Fat_Delete Protótipo
vazio Cf_Fat_Delete ();
Retorna
Nada.
Descrição
Exclui atualmente atribuídos arquivo do cartão CF.
Requer
Cartão CF e FC biblioteca deve ser inicializado para operações de arquivo. Veja
Exemplo
284
Cf_Fat_Init. O i d o arquivo i atuald fi id / / Deletar
V j Cf F
A i
Cf_Fat_Delete ();
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 7
Bibliotecas
Cf_Fat_Write Protótipo
vazio Cf_Fat_Write (char * FData, não assinado data_len);
Retorna
Nada. Grava solicitado o número de bytes para arquivo atualmente aberto para gravação atribuída.
Descrição Parâmetros: - FData: dados a serem gravados.
Cartão CF e FC biblioteca deve ser inicializado para operações de arquivo. Veja Requer
Exemplo
Cf_Fat_Init. Arquivo devem ser previamente definidos. Veja Cf_Fat_Assign. char file_contents [42]; ... Cf_Fat_Write (file_contents, 42) / / gravar dados no atribuída arquivo
Cf_Fat_Set_File_Date Protótipo
vazio Cf_Fat_Set_File_Date (unsigned int ano, unsigned short mês, unsigned short dia, unsigned short horas, unsigned short minutos, unsigned short segundos);
Retorna
Nada. Define a data / hora. Qualquer operação de arquivo posteriores escrita vou escrever essa selo de tempo de arquivo atualmente atribuídos's / attributs data.
Cartão CF e FC biblioteca deve ser inicializado para operações de arquivo. Veja Requer
Exemplo
Cf_Fat_Init. O arquivo deve ser previamente atribuído. Veja Cf_Fat_Assign. Cf_Fat_Set_File_Date (2005,9,30,17,41,0);
Mikroelektronika - Soluções de software e hardware para o mundo embutido
285
CAPÍTULO 7
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Bibliotecas Cf_Fat_Set_File_Date Protótipo
vazio Cf_Fat_Get_File_Date (unsigned int * Ano, unsigned short * Mês, unsigned short * Dia, unsigned short * horas, não assinado curto * Min);
Retorna
Nada. Lê data / hora atributos de arquivo atualmente atribuído. Parâmetros: - Ano: buffer para armazenar atributo ano para. Após a função de atributo ano de execução
Descrição
é retornado por esse parâmetro. - Mês: buffer para armazenar atributo mês para. Após meses de execução da função
atributo é retornado por esse parâmetro. - Dia: buffer para armazenar atributo dia para. Após a função de atributo é dia de execução
devolvido através deste parâmetro. - Horário: de buffer para armazenar horas atributo. Após horas de d f
Requer
Cartão CF e FC biblioteca deve ser inicializado para operações de arquivo. Veja Cf_Fat_Init. O i d não assinado ano;
Exemplo
i
d
i
d
V j Cf F
A i
char mês, dia, horas, minutos; ... Cf_Fat_Get_File_Date (& anos, & meses, & dias, e horas, e minutos);
Cf_Fat_Set_File_Size Protótipo
unsigned long Cf_Fat_Get_File_Size ();
Retorna
Tamanho do arquivo atualmente atribuídos em bytes.
Descrição
Esta função lê o tamanho de arquivo atualmente atribuído, em bytes.
Requer
Cartão CF e FC biblioteca deve ser inicializado para operações de arquivo. Veja Cf_Fat_Init. O i dlong my_file_size; i d fi id V j Cf F A i unsigned
Exemplo
286
... Cf_Fat_Get_File_Size my_file_size = ();
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 7
Bibliotecas
Cf_Fat_Get_Swap_File Protótipo Retorna
Descrição
unsigned long Cf_Fat_Get_Swap_File (unsigned long sectors_cnt, char * Nome do arquivo, char file_attr);
- Número do setor de partida para o arquivo de swap recém-criado, se houver espaço livre suficiente no cartão CF para criar um arquivo de tamanho necessário. á i para criar um arquivo de swap de pré-nome e tamanho da CF Esta função é usada mídia. Se um arquivo com o nome especificado já existe na mídia, busca de consetores consecutivos irá ignorar setores ocupados por esse arquivo. Portanto, recomenda-se recomenda-se a apagar o arquivo como se ele existe antes de chamar essa função. Se ele não é apagado e há é ainda bastante espaço para um novo arquivo de permuta, esta função irá eliminá-las depois alocação de espaço de memória novo para um novo arquivo swap. O objetivo do arquivo de swap é fazer com que a leitura ea escrita aos meios de comunicação do FC o mais rápido possível, usando o Cf_Read_Sector () e Cf_Write_Sector () funções diretamente, sem que possa causar danos ao sistema FAT. Trocar arquivos podem ser considerado como uma "janela" na mídia, onde o usuário pode livremente escrever / ler os dados. É objetivo principal na biblioteca do mikroC é ser usado para a aquisição rápida de dados, quando a aquisição de tempo crítico foi concluída, os dados podem ser re-escrita em um "normal" arquivo, e formatado da maneira mais adequada. Parâmetros: - Sectors_cnt: número de setores consecutivos que o usuário quer que o arquivo de troca para ter. - Filename: nome do arquivo que deve ser atribuído para operações de arquivo. O nome do arquivo
devem estar em formato DOS 8.3 (Nome_do_arquivo.extensão). O nome do arquivo e extensão será automaticamente preenchido com espaços pela biblioteca, se tiverem menos de Bit Másc Descrição comprimento necessária ("mikro.tx", ou seja ". mikro tx">), para o usuário não tem que cuidar disso. 0 0x01 Leiaque apenas O nome do arquivo e extensão são maiúsculas e minúsculas. A biblioteca irá convertê-los 0x02 Oculto para 1 caso2apropriado não tem que tomar cuidado com 0x04automaticamente, assim que o usuário Sistema isso. Além disso, a fim Volume Label para 3manter0x08 compatibilidade com a primeira versão desta biblioteca, nomes de arquivos podem ser 4 0x10 Subdiretório entrou como uma string em maiúsculas de 11 bytes de comprimento, com nenhum ponto 5 0x20 Arquivo chsaracter entre o nome do arquivo e extensão (ie "MIKROELETXT" -> somente, MIKROELE.TXT). Neste caso 6 0x40 Dispositivo (uso interno nunca encontrado os 3 últimos caracteres da cadeia são consideradas como extensão de arquivo. ) 7 0x80 criação de diarquivos Não utilizado - File_attr: e bandeiras attributs. Cada bit corresponde à
atribuíveis arquivo apropriado:
Mikroelektronika - Soluções de software e hardware para o mundo embutido
287
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC
Bibliotecas Requer
Cartão CF e FC biblioteca deve ser inicializado para operações de arquivo. Veja Cf F I i //-------------Tente criar um arquivo de swap com o arquivo atributo, cujo tamanho será de pelo menos 1.000 setores. / / Se for bem sucedido, ele envia o n º do setor de começar tudo de UART unsigned long tamanho; ... size = Cf_Fat_Get_Swap_File (1000, "mikroE.txt", 0x20); if (tamanho) { UART_Write (0xAA); UART_Write (Lo (tamanho)); UART_Write (Hi (tamanho)); UART_Write (Superior (tamanho)); UART_Write (Máxima (tamanho)); UART_Write (0xAA); }
Exemplo
Exemplo Biblioteca
O exemplo a seguir demonstra vários aspectos da biblioteca Cf_Fat16: Criação do novo arquivo e escrever para baixo; Abertura de arquivos existentes e reescrevê-lo (a escrita de iniciar-de-arquivo); Abertura arquivo de dados existentes e acrescentando a ele (a escrita de ponta-de-arquivo): abrir um arquivo e ler dados de lo (enviá-lo ao terminal USART); Criar e modificar vários arquivos de uma só vez; / / Set pinagem compact flash char Cf_Data_Port em PORTD; sbit sbit sbit sbit sbit sbit sbit sbit
const LINE_LEN = 39; char err_txt [20] = "FAT16 não encontrado"; char file_contents [LINE_LEN] = "XX CF FAT16 biblioteca por Anton Rieckertn ";
288
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC nome [14] = "MIKRO00x.TXT"; char unsigned short loop, loop2; i, tamanho; unsigned long Buffer [512]; char
CAPÍTULO 7
Bibliotecas / / Os nomes de arquivos
/ / UART1 escrever um texto e nova linha (alimentação de linha de retorno + transporte) vazio UART1_Write_Line (char * Uart_text) { UART1_Write_Text (uart_text); UART1_Write (13); UART1_Write (10); } / / Cria novo arquivo e grava alguns dados a ele vazio M_Create_New_File () { filename [7] = 'A'; Cf_Fat_Assign (e nome do arquivo, 0xA0) / / File Find existente ou criar um uma nova Cf_Fat_Rewrite () / / Para limpar o arquivo e começar com os novos dados for (loop = 1; loop <= 99; loop + +) { UART1_Write ('.'); file_contents [0] = loop / 10 + 48; file_contents [1%] loop = 10 + 48; Cf_Fat_Write (file_contents, LINE_LEN-1) / / gravar dados para o atribuído arquivo } } / / Cria muitos novos arquivos e grava os dados que lhes vazio M_Create_Multiple_Files () { para (loop2 = 'B'; loop2 <= 'Z'; loop2 + +) { UART1_Write (loop2) / / o sinal de progresso filename [7] = loop2 / / definir nome Cf_Fat_Assign (e nome do arquivo, 0xA0) / / encontrar o arquivo existente ou criar um novo Cf_Fat_Rewrite () / / Para limpar o arquivo e começar com os novos dados for (loop = 1; loop <= 44; loop + +) { file_contents [0] loop = 10 + 48; file_contents [1%] loop = 10 + 48; Cf_Fat_Write (file_contents, LINE_LEN-1) / / gravar dados para o atribuído arquivo } } } / / Abre um arquivo existente e reescreve-lo vazio M_Open_File_Rewrite () { filename [7] = 'C'; Cf_Fat_Assign (& Nome, 0); Cf_Fat_Rewrite (); for (loop = 1; loop <= 55; loop + +) {
Mikroelektronika - Soluções de software e hardware para o mundo embutido
/ / Abre um arquivo existente e acrescenta dados a ele / / (E altera a data / hora) vazio M_Open_File_Append () { filename [7] = 'B'; Cf_Fat_Assign (& Nome, 0); Cf_Fat_Set_File_Date (2005,6,21,10,35,0); Cf_Fat_Append (); / arquivo / Prepare-se para anexar Cf_Fat_Write ("para 2005n mikroElektronika", 27); / / Gravar dados atribuído arquivo } / / Abre um arquivo existente, lê os dados a partir dele e coloca-UART vazio M_Open_File_Read () { caráter char; filename [7] = 'B'; Cf_Fat_Assign (& Nome, 0); Cf_Fat_Reset (e tamanho); / / Para ler o arquivo, tamanho do procedimento de retorno de arquivo for (i = 1;
290
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 7
Bibliotecas
se (Cf_Fat_Assign (Nome, 0)) { arquivo //--- foi encontrado - obter a sua data Cf_Fat_Get_File_Date (& anos, & meses, & dia, & hora e minuto); WordToStr (ano, outstr); UART1_Write_Text (outstr); ByteToStr (outstr mês); UART1_Write_Text (outstr); WordToStr (outstr, dia); UART1_Write_Text (outstr); WordToStr (outstr horas); UART1_Write_Text (outstr); WordToStr (outstr minutos); UART1_Write_Text (outstr); //--- Obter o tamanho do arquivo Cf_Fat_Get_File_Size fsize = (); LongToStr ((long assinado) fsize, outstr); UART1_Write_Line (outstr); } mais { //--- arquivo não foi encontrado - sinal que ele UART1_Write (0x55); Delay_ms (1000); UART1_Write (0x55); } } / / Tenta criar um arquivo de swap, cujo tamanho será de pelo menos 100 / / Setores (consulte a Ajuda para mais detalhes) vazio M_Create_Swap_File () { unsigned int i; for (i = 0; i <512; i + +) Buffer [i] = i; size = Cf_Fat_Get_Swap_File (5000, "mikroE.txt", 0x20); / ver a ajuda sobre esta função para obter detalhes se (Tamanho) { LongToStr ((long assinado) err_txt, tamanho); UART1_Write_Line (err_txt); for (i = 0; i <5000; i + +) { Cf_Write_Sector (tamanho + +, buffer); UART1_Write ('.'); } } } / / Main. Descomente a função (s) para testar a operação desejada (s) vazio main () { # Define COMPLETE_EXAMPLE / comentar essa linha para fazer simexemplo pler / menor
Mikroelektronika - Soluções de software e hardware para EMBEDDED MUNDO
291
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC
Bibliotecas ADCON1 | = 0x0F; CMCON | = 7;
/ / Configurar um pinos como digital / / Desligue comparadores
/ / Inicializar UART1 módulo UART1_Init (19200); Delay_ms (10); UART1_Write_Line ("PIC-Started"); / relatório da CPI presentes / / Use fat16 formatação rápida, em vez de rotina init se uma formatação é necessário se (Cf_Fat_Init () == 0) { Delay_ms (2000); / / espera por um tempo até que o cartão é estabilizado / / Período depende usado cartão CF //--- Iniciar o teste UART1_Write_Line ("Iniciar teste."); //--- Teste rotinas. Descomente-los um por um para testar certos recursos M_Create_New_File (); # Ifdef COMPLETE_EXAMPLE M_Create_Multiple_Files (); M_Open_File_Rewrite (); M_Open_File_Append (); M_Open_File_Read (); M_Delete_File (); M_Test_File_Exist (); M_Create_Swap_File (); # Endif UART1_Write_Line ("O Fim do teste."); } mais { UART1_Write_Line (err_txt) / / Nota: Cf_Fat_Init tenta inicialize um cartão mais de uma vez. / / Se o cartão não estiver presente, initialização pode durar mais tempo (dependendo da velocidade do clock) } }
292
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 7
Bibliotecas
Conexão HW
Pin diagrama de cartão de memória CF
Mikroelektronika - Soluções de software e hardware para o mundo embutido
293
CAPÍTULO 7
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Bibliotecas EEPROM BIBLIOTECA
Memória EEPROM de dados está disponível com uma série de microcontroladores PIC. mikroC PRO para PIC inclui biblioteca para o trabalho confortável com EEPROM.
Rotinas da biblioteca - Eeprom_Read - Eeprom_Write
EEPROM_Read Protótipo
unsigned short EEPROM_Read (unsigned int endereço);
Retorna
Retorna byte do endereço especificado.
Descrição
Lê dados a partir de determinado endereço. endereço do parâmetro é do tipo inteiro, o que significa que ele suporta MCUs com mais de 256 bytes de EEPROM.
Requer
Requer módulo EEPROM. Certifique-se de um atraso mínimo de 20ms entre o uso sucessivo de rotinas EEPROM_Write e EEPROM_Read. Embora PIC irá escrever o valor correto, EEPROM_Read pode retornar um resultado indefinido.
Exemplo
unsigned short ter; ... ter = EEPROM_Read (0x3F);
EEPROM_Write Protótipo
vazio EEPROM_Write (unsigned int endereço, unsigned short de dados);
Retorna
Nada. Grava dados ao especificado endereço. endereço do parâmetro é do tipo inteiro,
Descrição
que
significa que ele suporta MCUs com mais de 256 bytes de EEPROM. Esteja ciente de que todas as interrupções serão desabilitados durante a execução do EEPROM_Write
294
Requer
ti (bit GIE d i t INTCON ã d ) R ti i á t PREVI Requer módulo EEPROM. Certifique-se de um atraso mínimo de 20ms entre o uso sucessivo de rotinas EEPROM_Write e EEPROM_Read. Embora PIC irá escrever o valor correto, EEPROM_Read pode retornar um resultado indefinido.
Exemplo
EEPROM_Write (0x32, 19);
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC
Bibliotecas
Exemplo Biblioteca O exemplo demonstra o uso de EEPROM Biblioteca. char II;
/ / Blink PORTB e diodos PORTC / / Para indicar início de leitura
PORTB mostrar PORTC mostrar
EEPROM_Read = (0x02); lo em PORTB EEPROM_Read = (0x50); lo em PORTC
/ / Lê os dados de endereço 2 e / / Lê os dados de endereço 0x50 e
Delay_ms (1000); de (ii = 0; ii <32; ii + +) {/ / Ler bloco de 32 bytes de 0x80 endereço PORTD EEPROM_Read = (0x80 + II) / / dados e exibição em PORTD Delay_ms (250); } }
Mikroelektronika - Soluções de software e hardware para o mundo embutido
295
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC
Bibliotecas Biblioteca Ethernet PIC18FXXJ60
PIC18FxxJ60 família de microcontroladores apresentam um módulo controlador Ethernet incorporado. Esta é
uma solução completa de conectividade, incluindo implementações completas de ambos os Media Access Control (MAC) e Física transceptor Layer (PHY) módulos. Dois transformadores de pulso e um passivo poucos componentes são todos que são necessários para conectar o microcontrolador diretamente a uma rede Ethernet de trabalho. O módulo Ethernet atende a todas as especificações IEEE 802.3 para conectividade de 10-BaseT para um par trançado de rede. É incorpora uma série de sistemas de filtragem de pacotes para limitar o pacote de entradaets. Ele também oferece um módulo de DMA interna para transferência rápida de dados e hardware IP assistida cálculos de soma de verificação. Provisões são feitas também para duas saídas de LED para indicar link e rede atividade Esta biblioteca fornece a posibilidade de utilizar facilmente recurso de ethernet do MCUs acima mencionados. Ethernet biblioteca PIC18FxxJ60 suporta: - O protocolo IPv4. - Requisições ARP. - ICMP echo requests. - Os pedidos UDP. - Os pedidos TCP (sem pilha, sem reconstrução de pacotes). - O cliente com cache ARP. - O cliente DNS. - Cliente UDP. - O cliente DHCP. - Fragmentação do pacote não é suportado. Nota: A variável biblioteca Global Ethernet_userTimerSec é usado para manter trilha de tempo para todos os clientes implementações (ARP, UDP de DNS e DHCP). É de responsabilidade do usuário para incrementar essa variável cada segundo em que o código se algum dos clientes é usado. Nota:
Para usuários avançados, existem arquivos de cabeçalho ("eth_j60LibDef.h"
e
"Eth_j60LibPrivate.h") em P18 usa \ pasta do compilador, com descrição de todas as rotinas e
variáveis globais, relevantes para o usuário, implementado no PIC18FxxJ60 Ethernet Biblioteca.
296
Mikroelektroni ka - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Nada. Esta é a rotina MAC do módulo. Ele inicializa controlador Ethernet. Esta função é internamente subdividida em 2 partes para ajudá-vinculador quando vem com pouca memória. configurações do controlador Ethernet (parâmetros não mencionados aqui são definidos como padrão):
Descrição
- Recebe o endereço inicial do buffer: 0x0000. - Receber endereço final buffer: 0x19AD. - Transmitir o endereço inicial do buffer: 0x19AE. - Transmitir endereço final buffer: 0x1fff. - Buffer RAM de leitura / gravação ponteiros no modo de auto-incremento. - Receber filtros definidos como padrão: CRC + MAC + MAC Unicast Broadcast na OU modo. - Controle de fluxo com TX e RX pausa quadros em modo full duplex. - Quadros são preenchidos com 60 + bytes CRC. - Tamanho máximo do pacote é definido como 1518. - Back-to-Back-Inter Packet Gap: 0x15 em modo full duplex; 0x12 em half-duplex modo. - Non-Back-to-Back-Inter Packet Gap: 0x0012 em modo full duplex; 0x0C12 em modo half duplex. - Metade loopback duplex com deficiência. - LED de configuração: padrão (LEDA link-status, atividade LEDB-link). Parâmetros: - Mac: RAM buffer que contém o endereço MAC válido. - IP: memória intermédia que contém o endereço IP válido.
Requer
Nada.
l
(H lf d l
# Define Ethernet_HALFDUPLEX 0 # Define um Ethernet_FULLDUPLEX
Mikroelektronika - Software e hardware SOLUÇÕES PARA mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 7
Bibliotecas
Ethernet_Enable Protótipo
void Ethernet_Enable (enFlt unsigned char);
Retorna
Nada. Esta é a rotina MAC do módulo. Esta rotina permite que o tráfego de rede apropriada no o módulo de MCU Ethernet interna por meio de ela receber filtros (unicast, multicast, broadcast, CDC). Tipo específico de tráfego de rede será ativado se uma bit correspondente do parâmetro essa rotina de entrada está definido. Portanto, mais do que um tipo de tráfego de rede podem ser ativados ao mesmo tempo. Para este efeito, constantes biblioteca predefinida (ver tabela abaixo) pode ser ORed para formar adevalor de entrada apropriado.
Descrição
Bi Másc biblioteca Parâmetros: Descrição t predefinidos - EnFlt: o tráfego de rede / receber bandeiras filtro. Cada bit corresponde MAC tráfego Broadcast / receber bandeira filtro. a 0 apro_Ethernet_BROADCAST 0x01 Quando tráfego de rede adequado / filtro de recepção: j tráfego MAC áf / receber d dif bandeira á filtro. MAC Multicast _Ethernet_MULTICAST 1 0x02 Quando d fi id áf não utilizado li MAC á 2 0x04 none 3
0x08
não utilizado
none
4
0x10
não utilizado
none
5
0x20
6
0x40
7
0x80
CRC marca de verificação. Quando definido, pacotes com CRCnão i álid utilizadoá MAC tráfego Unicast / receber bandeira filtro. Quando j MAC áf i á
_Ethernet_CRC
none _Ethernet_UNICAST
Nota: Advance filtragem disponíveis no MCU módulo Ethernet internas, como a
Pattern Match, Magic Packet e Hash Table não pode ser ativada por este
rotina. Adicionalmente, todos os filtros, exceto CRC, habilitado com esta rotina irá trabalhar em O d i ifi t á bid l d filt Mikroelektronika - Soluções de software e hardware para o mundo embutido
299
CAPÍTULO 7
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Bibliotecas Requer
módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Nada. Esta é a rotina MAC do módulo. Esta rotina desabilita o tráfego de rede apropriada no Módulo MCU Ethernet interna por meio de ela receber filtros (unicast, multicast, transmissão, CRC). Tipo específico de tráfego de rede será desativada se o bit correspondente do parâmetro essa rotina de entrada está definido. Portanto, mais do que um tipo de tráfico de rede fic pode ser desativado, ao mesmo tempo. Para o efeito, constantes predefinidas biblioteca (Ver tabela abaixo) pode ser ORed para formar o valor de entrada apropriado. Parâmetros: - DisFlt: o tráfego de rede / receber bandeiras filtro. Cada bit corresponde biblioteca Másc Descrição a Bit apro-
Descrição
tráfego de rede adequado / filtro de recepção: 0 0x01 MAC tráfego Broadcast / filtro de recepção pavilhão. Quando j MAC áf d dif á 1 0x02 MAC tráfego Multicast / receber bandeira filtro. Quando d fi id áf não lutilizado i MAC á 2 0x04 3 4
predefinidos
_Ethernet_BROADCAST _Ethernet_MULTICAST
0x08 0x10
none none none
não utilizado não usados CRC marca de verificação. Quando definido, _Ethernet_CRC 5 0x20 verificação de CRC será ser desativado e pacotes com CRC inválido 6 0x40 não utilizado none MAC tráfego Unicast / receber bandeira filtro. _Ethernet_UNICAST 7 0x80 Quando j MAC áf i á Nota: Advance filtragem disponíveis no MCU interna Ethernet módulo, como
Pattern Match, Magic Packet e Hash Table não pode ser desativado por esta rotina.
Nota: Esta rotina vai mudar configuração do filtro receber on-the-fly. Não será, no qualquer forma, mexer com ativar / desativar receber / transmitir a lógica ou qualquer outra parte
300
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC Requer
módulo Ethernet deve ser inicializado. Veja Ethernet_Init ..
unsigned char Ethernet_doPacket (); - 0 - Mediante o processamento de pacotes de sucesso (zero pacotes recebidos
Retorna
ou recebidos pacote processado com sucesso). - 1 - Por erro de recepção ou receber corrupção buffer. Ethernet controlador precisa ser reiniciado. - 2 - O pacote recebido não foi enviado para nós (não o nosso IP, nem endereço de broadcast IP). R b d IP f i IP 4 Esta é a rotina MAC do módulo. É processos pacote recebido seguinte se existir. Os pacotes são processados da seguinte forma:
Descrição
- Requisições ARP e ICMP são respondidas automaticamente. - Mediante pedido TCP Ethernet_UserTCP a função é chamada para posterior processamento. - Mediante pedido da UDP Ethernet_UserUDP função é chamado para processamento adicional.
Requer
módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Exemplo
se (Ethernet_doPacket () == 0) {/ / processo pacotes recebidos ... }
Mikroelektronika - Soluções de software e hardware para o mundo embutido
301
CAPÍTULO 7
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Bibliotecas Ethernet_putByte Protótipo
vazio Ethernet_putByte (unsigned char v);
Retorna
Nada.
Descrição
Esta é a rotina MAC do módulo. Ele armazena um byte para endereço apontado pelo curponteiro escrever controlador alugar Ethernet (EWRPT). Parâmetros: V
l
Requer
módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Exemplo
char dados; ... Ethernet_putByte (dados) / / colocar um byte em Ethernet controller buffer
Esta é a rotina MAC do módulo. Ele armazena o número solicitado de bytes em Ethernet RAM do controlador a partir de correntes Ethernet controlador escrever ponteiro (EWRPT) Local. Parâmetros: - Ptr: RAM tampão contendo bytes a serem gravados na memória RAM controlador
302
Requer
módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Exemplo
char * Buffer = "mikroElektronika"; ... Ethernet_putBytes (buffer, 16); / / coloque uma matriz de RAM em Ethernet buffer do controlador
Mikroelektronika - Software e hardware SOLUÇÕES PARA mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Esta é a rotina MAC do módulo. Ele armazena o número de bytes solicitado const em EthRAM a partir do controlador ernet do controlador Ethernet atual ponteiro escrever (EWRPT) local. Parâmetros: - Ptr: const tampão contendo bytes a serem gravados na memória RAM controlador
Requer
módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Exemplo
const char * Buffer = "mikroElektronika"; ... Ethernet_putConstBytes (buffer, 16); / / colocar um array em const buffer do controlador Ethernet
Ethernet_putString Protótipo
unsigned int Ethernet_putString (unsigned char * Ptr);
Retorna
Número de bytes gravados na memória RAM controlador Ethernet.
Descrição
Esta é a rotina MAC do módulo. Ele armazena string todo (excluindo a terminação nula) em RAM Ethernet controller a partir de controlador Ethernet atual ponteiro escrever (EWRPT) local. Parâmetros: - Ptr: string a ser gravado na memória RAM controlador Ethernet.
Requer
módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Exemplo
char * Buffer = "MikroElektronika"; ... Ethernet_putString (buffer); / / coloque uma seqüência de RAM em Ethernet buffer do controlador
Mikroelektronika - Soluções de software e hardware para o mundo embutido
303
CAPÍTULO 7
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Bibliotecas Ethernet_putConstString Protótipo
unsigned int Ethernet_putConstString (const unsigned char * Ptr);
Retorna
Número de bytes gravados na memória RAM controlador Ethernet.
Descrição
Esta é a rotina MAC do módulo. Ele armazena string const todo (excluindo a rescisão nulo ção) para a RAM do controlador Ethernet a partir de controlador Ethernet atual escrever ponteiro (EWRPT) local. Parâmetros:
Requer
módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Exemplo
const char * Buffer = "mikroElektronika"; ... Ethernet_putConstString (buffer); / / colocar um const string em buffer do controlador Ethernet
Ethernet_getByte Protótipo
unsigned char Ethernet_getByte ();
Retorna
Byte lido RAM controlador Ethernet.
Descrição
Esta é a rotina MAC do módulo. Ele busca um byte de endereço apontado pelo atual ponteiro ler Ethernet controller (ERDPT).
Requer
módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Exemplo
char buffer; ... buffer = Ethernet_getByte (); / / lê um byte de con-Ethernet buffer Troller's
Ethernet_getBytes Protótipo
vazio Ethernet_getBytes (unsigned char * Ptr, não assinado int addr, unsigned char n);
Retorna
Nada.
Descrição
Esta é a rotina MAC do módulo. Ele busca equested número de bytes de Ethernet RAM do controlador a partir de determinado endereço. Se o valor de 0xFFFF é passado como o parâmetro de endereço, a leitura início do controlador Ethernet atual leia localização (ERDPT) ponteiro. Parâmetros:
Requer Exemplo
304
- Ptr: buffer para armazenar bytes lidos a partir da RAM controlador Ethernet. Add d d t l d Eth t RAM V l álid
módulo Ethernet deve ser inicializado. Veja Ethernet_Init. char buffer [16]; ... Ethernet_getBytes (buffer, 0x100, 16); / / lê 16 bytes, a partir a partir do endereço 0x100
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 7
Bibliotecas
Ethernet_UserTCP Protótipo Retorna
Descrição
unsigned int Ethernet_UserTCP (unsigned char * RemoteHost, não assinado int RemotePort, unsigned int localPort, unsigned int reqLength); - 0 - Não deveria ser um resposta ao pedido.
- Comprimento do campo de resposta HTTP TCP / dados - caso contrário. Esta é a rotina de módulo TCP. Ele é chamado internamente pela biblioteca. O acesso do usuário es para o pedido de TCP / HTTP usando algumas das rotinas Ethernet_get. A usuário coloca dados no buffer de transmissão usando algumas das rotinas Ethernet_put. A função deve retornar o tamanho em bytes da resposta HTTP TCP / ou 0 se não houver não é nada para transmitir. Se não houver necessidade de responder às solicitações TCP / HTTP, apenas definir esta Função com retorno (0) como uma única instrução. Parâmetros: - RemoteHost: endereço IP do cliente. - RemotePort: porto cliente TCP. - LocalPort: porta para que o pedido é enviado. - ReqLength: TCP / solicitação HTTP comprimento do campo de dados.
Requer
módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Exemplo
Essa função é chamado internamente pela biblioteca e não deve ser chamado pelo código de usuário.
Mikroelektronika - SOLUÇÕES EM SOFTWARE E HARDWARE Para embutidos mundo
305
CAPÍTULO 7
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Bibliotecas Ethernet_UserUDP Protótipo Retorna
Descrição
unsigned int Ethernet_UserUDP (unsigned char * RemoteHost, não assinado int RemotePort, unsigned int destPort, unsigned int reqLength); - 0 - não deve haver uma resposta ao pedido.
- Comprimento do campo de dados UDP resposta - outra forma. Esta é a rotina de módulo UDP. Ele é chamado internamente pela biblioteca. O acesso do usuário es para o pedido UDP usando algumas das rotinas Ethernet_get. O usuário coloca dados no buffer de transmissão usando algumas das rotinas Ethernet_put. A função deve retornar o tamanho em bytes da resposta UDP, ou 0 se nada para transmitir. Se você não precisa responder às solicitações UDP, basta definir esta função com um return (0) como única instrução. Parâmetros: - RemoteHost: endereço IP do cliente. - RemotePort: porta do cliente. - DestPort: porta para que o pedido é enviado. - ReqLength: solicitação UDP comprimento do campo de dados.
Requer Exemplo
Nota: O código fonte da função é fornecida com exemplos de projetos módulo Ethernet deve ser inicializado. Veja Ethernet_Init. Essa função é chamado internamente pela biblioteca e não deve ser chamado pelo código de ái
Ethernet_getlpAddress Protótipo
unsigned char * Ethernet_getIpAddress ();
Retorna
Ponter para a variável global exploração endereço IP. Essa rotina deve ser utilizada quando o servidor DHCP está presente na rede para buscar endereço IP atribuído.
Descrição Nota: Usuário deve sempre copiar o endereço IP do local de RAM retornado por esta rotina em que é buffer próprio endereço IP. Estes locais não devem ser alterados pelo usuário, em qualquer caso!
306
Requer
módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Exemplo
unsigned char endereçoip [4] / / endereço IP do usuário buffer ... memcpy (ipaddr, Ethernet_getIpAddress (), 4); / / recupera o endereço IP
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
CAPÍTULO 7
Bibliotecas
Ethernet_getGwlpAddress Protótipo
unsigned char * Ethernet_getGwIpAddress ();
Retorna
Ponter para a variável global exploração endereço IP do gateway. Esta rotina deve ser usado quando o servidor DHCP está presente na rede para buscar atribuído o endereço IP do gateway.
Descrição Nota: O usuário deve sempre copiar o endereço IP do local de RAM retornado por esta rotina em seu próprio gateway buffer endereço IP. Estes locais não devem ser alteradas pelo usuário, em qualquer caso! Requer
módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Exemplo
unsigned char gwIpAddr [4]; / / user gateway buffer endereço IP ... memcpy (gwIpAddr, Ethernet_getGwIpAddress (), 4); / / busca gateway endereço IP
Ethernet_getDnslpAddress (); Protótipo
unsigned char * Ethernet_getDnsIpAddress
Retorna
Ponter para a variável global exploração DNS o endereço IP. Essa rotina deve ser utilizada quando o servidor DHCP está presente na rede para buscar atribuído endereço IP do DNS.
Descrição Nota: O usuário deve sempre copiar o endereço IP de a localização RAM retornado por esta rotina em seu próprio buffer DNS o endereço IP. Estes locais não devem ser alteradas pelo usuário, em qualquer caso! Requer
módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Exemplo
unsigned char dnsIpAddr [4]; / user / Buffer DNS o endereço IP ... memcpy (dnsIpAddr, Ethernet_getDnsIpAddress (), 4); / / busca de DNS endereço do servidor
Mikroelektronika - Soluções de software e hardware para o mundo embutido
307
CAPÍTULO 7
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Bibliotecas Ethernet_getlpMask Protótipo
unsigned char * Ethernet_getIpMask ()
Retorna
Ponter para a variável global exploração IP, máscara de sub-rede. Essa rotina deve ser utilizada quando o servidor DHCP está presente na rede para buscar atribuído máscara sub-rede IP.
Descrição Nota: O usuário deve sempre copiar o endereço IP do Local de RAM retornado por esta rotina em seu próprio IP buffer máscara. Estes locais não devem ser alteradas pelo usuário, em qualquer caso! Requer
módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Exemplo
unsigned char IPMask [4]; / user / IP buffer máscara ... memcpy (IPMask, Ethernet_getIpMask (), 4); / / recupera IP máscara
- Endereço MAC para trás o endereço IP - o endereço IP solicitado foi resolvido. - 0 - De outra forma.
Descrição
Esta é a rotina do módulo ARP. Ele envia uma solicitação ARP para determinado endereço IP e aguarda ARP resposta. Se o endereço IP solicitado foi resolvido, um ARP entrada de dinheiro é usada para armazenação da configuração. dinheiro ARP pode armazenar até 3 entradas. Para ARP referem-se a estrutura de caixa "Eth_j60LibDef.h" cabeçalho do arquivo na pasta do compilador Uses/P18. Parâmetros: - IP: endereço IP a ser resolvido. - Tmax: tempo em segundos para esperar por uma resposta.
Requer
módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Exemplo
não assinado char IpAddr [4] = {192, 168, 1, 1} / / endereço IP ... Ethernet_arpResolve (IpAddr, 5); / / pega o endereço MAC por trás da acima do endereço IP, aguarde 5 segundos para a resposta
Ethernet_sendUDP Protótipo
unsigned char Ethernet_sendUDP (unsigned char * DestIP, não assinado int sourcePort, unsigned int destPort, unsigned char * Pkt, unsigned int pktLen);
Retorna
- 1 - Pacote UDP foi enviada com sucesso. - 0 - De outra forma.
Esta é a rotina de módulo UDP. Ele envia um pacote UDP na rede. Parâmetros: Descrição
-
Requer
módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Exemplo
unsigned char IpAddr [4] = {192, 168, 1, 1} / / endereço IP remoto ... Ethernet_sendUDP (IpAddr, 10001, 10001, "Olá", 5); / / envia Olá messábio, para o endereço IP acima, de porta UDP 10001 para a porta UDP 10001
DestIP: remoto endereço IP do host. SourcePort: número da porta UDP local de origem. DestPort: destino número da porta UDP. Pkt: pacotes para transmitir. PktLen: comprimento em bytes do pacote para transmitir.
Mikroelektronika - Soluções de software e hardware para o mundo embutido
309
CAPÍTULO 7
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
- Ponteiro para o local onde o endereço IP - o nome do host solicitado foi resolvido. - 0 - De outra forma.
Descrição
Este é o DNS módulo de rotina. Ele envia um pedido DNS para determinado nome de host e aguarda resposta do DNS. Se o nome do host solicitado foi resolvido, o seu endereço IP é armazenado na variável global biblioteca e um ponteiro que contém este endereço é retornado pela rotina. UDP porta 53 é usada como porta de DNS. Parâmetros: - Host: nome do host para ser resolvido. - Tmax: tempo em segundos para esperar por uma resposta.
Nota: Os serviços de Ethernet não são interrompidos enquanto esta rotina
Requer
Exemplo
310
aguarda DNS t O t ser d inicializado. t d ãVeja Ethernet_Init. d módulo Ethernet deve
l
unsigned char * RemoteHostIpAddr [4] / / usuário do host buffer endereço IP ... / / Servidor SNTP: / Zurique / Suíça: Laboratório de Sistemas Integráveis, da Suíça Fed. Inst. de Tecnologia / / 129.132.2.21: swisstime.ethz.ch / / Serviços Área: Suíça e Europa memcpy (remoteHostIpAddr, Ethernet_dnsResolve ("swisstime.ethz.ch", 5), 4);
Mikroelektronika - Software e Soluções de hardware para Embedded World
t d
t
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
- 1 - Parâmetros de rede foram obtidos com sucesso. - 0 - De outra forma.
Esta é a rotina de módulo de DHCP. Ele envia um pedido DHCP para os parâmetros de rede (IP, gateway, DNS e endereços IP, máscara de sub-rede) e aguarda pela resposta de DHCP. Se os parâmetros solicitados foram obtidos com sucesso, seus valores são armazenados em a biblioteca de variáveis globais. Estes parâmetros podem ser obtidos usando a biblioteca apropriada, IP começar Descrição
rotinas: - Ethernet_getIpAddress - buscar o endereço IP. - Ethernet_getGwIpAddress - buscar endereço IP do gateway. - Ethernet_getDnsIpAddress - buscar DNS o endereço IP. - Ethernet_getIpMask - buscar IP, máscara de sub-rede. Porta UDP 68 é usado como porta de cliente DHCP e UDP 67 é usado como serv DHCP er porta. Parâmetros: - Tmax: tempo em segundos para esperar por uma resposta.
Nota: Os serviços de Ethernet não são interrompidos enquanto esta rotina Requer
módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Exemplo
... Ethernet_initDHCP (5); / / pega rede configuração do servidor DHCP, aguarde 5 segundos para a resposta ...
Mikroelektronika - Soluções de software e hardware para o mundo embutido
311
CAPÍTULO 7
www.mecatronicadegaragem.blogspot.com mikroC PRO para PIC
Bibliotecas Ethernet_doDHCPLeaseTime Protótipo
unsigned char Ethernet_doDHCPLeaseTime ();
Retorna
- 0 - Tempo de concessão ainda não tenha terminado ainda. - 1 - Tempo de concessão expirou, é hora de renovar.
Descrição
Esta é a rotina de módulo de DHCP. Ela cuida de concessão de endereço IP vez por decretando o tempo de concessão global biblioteca do contador. Quando esse tempo expirar, é
Requer
módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Exemplo
while (1) { ... if (Ethernet_doDHCPLeaseTime ()) ... / / É hora de renovar o IP Endereço de locação }
- 0 - sobre o sucesso (tempo de concessão foi renovada). - 1 - De outra forma (pedido de renovação expirou).
Descrição
Esta é a rotina de módulo de DHCP. Ele envia o endereço IP arrendamento pedido de renovação de tempo para Servidor DHCP. Parâmetros:
312
T
t
d
Requer
módulo Ethernet deve ser inicializado. Veja Ethernet_Init.
Exemplo
while (1) { ... if (Ethernet_doDHCPLeaseTime ()) Ethernet_renewDHCP (5); / / é hora de renovar o endereço IP, com 5 segundos para uma resposta ... }
t
Mikroelektronika - Soluções de software e hardware para o mundo embutido
www.mecatronicadegaragem.blogspot.com
CAPÍTULO 7
mikroC PRO para PIC
Bibliotecas
Exemplo Biblioteca Este código mostra como usar a biblioteca Ethernet PIC18FxxJ60: - O Conselho responderá a ARP e ICMP echo requests - O conselho vai responder aos pedidos em qualquer porta UDP: devolve o pedido de char superior com um cabeçalho feito de IP da máquina remota e número da porta - O conselho vai responder a solicitações HTTP na porta 80, com o método GET caminhos: / Vai retornar a página HTML principal / S irá retornar o status da placa como texto / T0 ... / T7 irá mudar para RD0 RD7 pouco e retornar HTML página principal todos os outros pedidos de retorno também HTML página principal. # Define _Ethernet_HALFDUPLEX # Define Ethernet_FULLDUPLEX
0 1
/************************************************* *********** * Cordas ROM constante * / const unsigned char httpHeader [] = "HTTP/1.1 200 OKnContent tipo:" / / Cabeçalho HTTP httpMimeTypeHTML [] = "text / htmlnn"; const unsigned char / / Tipo de MIME HTML const unsigned char httpMimeTypeScript [] = "text plainnn /"; / / Tipo MIME TEXTO unsigned char HttpMethod [] = "GET /"; / * * Página web, divididos em 2 partes: * Quando chegar curto de ROM, os dados fragmentado é tratado mais eficientemente pelo linker * * Esta página HTML chama as placas para obter o seu estatuto, e constrói se com javascript * / * Indexpage = / / Mude o endereço IP da página para const char ser atualizada "<meta Http-equiv="refresh" content="3;url=http://192.168.20.60"> HEAD>