WinCE port/pt

From Free Pascal wiki
Revision as of 16:37, 29 September 2007 by Antoniog (talk | contribs) (→‎Depurando aplicações WinCE)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search
WinCE Logo.png

This article applies to Windows CE only.

See also: Multiplatform Programming Guide

English (en) italiano (it) português (pt) русский (ru) 中文(台灣)‎ (zh_TW)

O porte do WinCE é bem completo e utilizável. Ele foi iniciado e é mantido por Yury Sidorov. Cabeçalhos Oliver (Oro06) portados da API do WinCE .

Estado atual

  • O compilador 2.1.x dá suporte à compilação para WinCE.
  • ARM CPU tem suporte.
  • As seguintes plataformas têm suporte:
    • Pocket PC 2002 – WinCE versão 3.0
    • Pocket PC 2003 – WinCE versão 4.20
    • Pocket PC 2003 Segunda Edição – WinCE versão 4.21
    • Windows Mobile 5.0 – WinCE versão 5.0
  • RTL e unidades FCL estão funcionando.

Construindo o Tutorial

Durante o tutorial alguns caminhos serão supostos para demonstrar o processo de contrução. Apenas substitua aqueles caminhos pelos do seu sistema.

Passo 1 - Binutils para cross-compilação:

Estas são as ferramentas básicas necessárias para criar executáveis, como: Vinculador (ld), Montador (as), Archiver (ar) (cria arquivos .a do smartlinking), strip e algumas outras.

Você precisa das binutils para cross-compilação para ARM-WinCE, pegue-os em ftp://ftp.freepascal.org/pub/fpc/contrib/cross/arm-wince-binutils.zip for Win32.

Extraia-os em algum diretório no caminho da sua máquina. Vamos supor que você os extraiu em: C:\Programas\arm

Passo 2 - Cross-compilador

Agora você precisa construir o cross-compilador FPC para o processador ARM. Para fazer isso você precisa dos fontes mais recentes do FPC 2.1.x e a instalação do FPC 2.0.4 funcionando para Win32.

Pegue os fontes mais recentes do repositório do 2.1.x no Subversion: http://www.freepascal.org/develop.html#svn

Vamos supor que o seu ompilador FPC para Win32 está localizado em: C:\Programas\fpc\bin\i386-win32

E os seus fontes do Free Pascal 2.1.x estão localizados em: C:\Programas\fpc


Passo 3 - O Processo de Construção

Para construir o cross-compilador é necessário ter uma variável de ambiente PATH correta. No Windows é muito fácil ter um PATH junto com a informação colocada pelos instaladores. Para se certificar de que o seu Path está correto, crie um arquivo de lote do DOS com o seguinte código:

PATH=C:\Programas\fpc\bin\i386-win32;C:\Programas\arm
make cycle CPU_TARGET=arm OS_TARGET=wince

Ponha este arqquivo em C:\Programas\fpc\compiler, abra a linha de comando do Windows, vá para esta pasta e execute o arquivo de lote.

No fim da compilação você não deve ter mensagens de erro.

Você deve ter um ppccrossarm.exe em C:\Programas\fpc\compiler e alguns arquivos .o e .ppu em C:\Programas\fpc\rtl\units\arm-wince

Copie eses arquivos para a sua instalaçãodo Free Pascal. O cross-compilador ppccrossarm.exe deve ir para C:\Programas\fpc\bin\arm-wince e as unidades para C:\Programas\fpc\units\arm-wince

Passo 4 - Arquivo de configuração

Você precisa criar um arquivo de configuração fpc.cfg na pasta C:\Programas\fpc\bin\arm-wince para usar o ppccrossarm.exe com facilidade.

Crie um arquivo fpc.cfg vazio na pasta C:\Programas\fpc\bin\arm-wince e adicione as seguintes linhas:

-Twince
-FuC:\Programas\fpc\units\arm-wince
-XParm-wince-
-FDC:\Programas\arm

Finalmente adicione C:\Programas\fpc\bin\arm-wince e C:\Programas\fpc\bin\i386-win32 à sua variável de ambiente PATH.

Lembre-se de substituir os caminhos pelos do seu sistema.

Compilando um Projeto de Teste

Você compilou o compilador. Agora, o que você pode fazer com ele? Este é um tutorial para criar um projeto "hello world" com o seu novo compilador.

Passo 1 - Instalando e Configurando o Emulador

Você vai precisar de um emulador Windows CE configurado para ActiveSync. O ActiveSync é necessário para instalar o PocketCMD, uma ferramenta de linha de comando para executar o nosso programa ""hello world'.

Baixe o emulador de dispositivo livre Pocket PC da Microsoft. Ele emula o ARM CPU. http://msdn.microsoft.com/mobility/downloads/Emulator/default.aspx

Existe um tutorial de como configurar o emulador para ActiveSync here.

Passo 2 - Instalando a linha de comando

Baixe e instale o PocketCMD da SymbolicTools. Pegue-o aqui

Verifique a seção WinCE port notes abaixo para maioresa detalhes sobre linhas de comando em Pocket PC.

Passo 3 - Compilando

Um arquivo de exemplo para compilar:

program test;

{$apptype console}

var
  Str: string;
begin
  WriteLn('Software Developed with:');
  WriteLn('The Free Pascal Compiler');
  WriteLn('');
  WriteLn('Please, enter your name:');
  ReadLn(Str);
  WriteLn('Your name is: ' + Str);
end.

Sample de linha de comando para compilar test.pas:

ppcrossarm test.pas

Você vai pegar o executável test.exe. Copie-o para o seu dispositivo Windows CE e execute.

Aqui está um screenshot de um programa criado dessa forma.

Depurando aplicações WinCE

O GBD pode ser usado para depurar suas aplicações WinCE remotamente via ActiveSync. Baixe o GDB 6.4 para hots Win32 e arm-wince target aqui: ftp://ftp.freepascal.org/pub/fpc/contrib/cross/gdb-6.4-win32-arm-wince.zip

Algumas dicas:

  • Passe o parâmetro --tui para o GDB para habilitar a interface TUI que faz a depuração mais confortável.
  • Use finais de linha unix (LF only) nos seus fontes Pascal. Senão o GDB vai mostrar os fontes incorretamente.

Como usar:

Primeiro faça a conexão ActiveSync no seu dispositivo Pocket PC.

Então carregue o gdb:

gdb --tui <seu_executavel_no_pc_local>

No prompt do gdb escreva:

run ou só r

GDB vai copiar o seu executável para o seu dispositivo na pasta \gdb e executá-lo.

Aqui está uma pequena lista dos comandos mais necessários do GDB:

  • r args - executa o programa com args argumentos.
  • s - step into.
  • n - step over.
  • ni - step over instrument. Pula instrução assembly .
  • c - continua a execução.
  • br <function_name> - configura um breakpoint em function_name. Usa PASCALMAIN para configurar um breakpoint no início do programa.
  • br <source_file>:<line_number> - configura um breakpoint na linha especificada dos fontes.
  • disas - mostra um disassembly da localização atual.
  • x/fmt address - dump de memória no endereço com formato especial. use "help x" para maiores informações.
  • bt - back trace. imprime back trace da chamada do stack.
  • where - Mostra a linha atual e a função e o stack das chamadas that got you there.
  • q - Sai do gdb.

Para aprender mais sobre como usar o GDB leia sua documentação aqui: http://www.gnu.org/software/gdb/documentation

Construindo bibliotecas do FPC

Se você quer construir bibliotecas disponíveis com o FPC vá para a pasta de bibliotecas e execute:

PATH=C:\Programas\fpc\bin\i386-win32;C:\Programas\fpc\compiler;C:\Programas\arm
make OS_TARGET=wince CPU_TARGET=arm PP=ppcrossarm.exe

Por exemplo você quer construir a FCL. Vá para a pasta fpc\fcl e execute o comando abaixo. Você vai obter as unidades da FCL compiladas em fpc\fcl\units\arm-wince.

Documentação

Algumas notas sobre WinCE

  • Se você estiver obtendo "Uknown error! Error code : 0xc1" e usando dlls, o erro deve haver porque você está usando algumas export entries não encontradas no arquivo da dll. Verifique a seção export da dll e o nome delas e como utilizá-las.

Notas sobre o porte para WinCE

  • Procedimento chdir sempre produz um erro (WinCE não suporta configuração do diretório atual).
  • Todos os arquivos/diretórios precisam ser absolutos (começados com \).
  • WinCE é OS unicode. Todos os parâmetros de seqüência de caracteres para chamadas de API precisam ser PWideChar.
  • WinCE n~~ao tem suuporte para environment strings.
  • WinCE não tem suporte para aplicações de console por padrão. Mas você pode instalar suporte para console você mesmo. Note que o FPC cria aplicações GUI para WinCE target por padrão. Para criar aplicações de console você deve usar -WC compiler switch ou pôr a diretiva {$APPTYPE CONSOLE} nos fontes.
    Para habilitar console em WinCE instale um dos seguintes programas:
    • PocketCMD by SymbolicTools. Essa é a solução recomendada. Pegue-o aqui
    • PPC Command Shell de Microsoft Windows Mobile Developer Power Toys. Pegue-o aqui
      PPC Command Shell tem menos funcionalidades que o PocketCMD. Tem também menos problemas. Um deles - uma nova janela de console é aberta mesmo se uma aplicação é iniciada da linha de comando do console.

Veja também

Links

Aqui estão alguns links relacionados com a arquitetura ARM CPU

Contato

Escreva qualquer pergunta sobre o porte para WinCE para Yury Sidorov