Sopa de Letrinhas

August 28, 2009

Um dos maiores problemas enfrentados no desenvolvimento é de como usar a ajuda. Normalmente, existe um guia de referência de todas as funções, mas ele não é claro o suficiente pra quem chega “agora”.

Particularmente, eu recomendo ao pegar uma plataforma/linguagem nova traçar um objetivo simples (quando estava no colégio técnico, meu objetivo era sempre fazer um programinha que calculava a fórmula de Baskara). Comece do começo, escreva um Hello World, se acostume com a ferramenta, coloque breakpoints. Tente antes de sair perguntando, para que quando você fizer a pergunta, ela já será não tão obvia e ao mesmo tempo você entenderá melhor a resposta pra ela. E leia pelo menos os tutoriais iniciais. Saiba do que a ajuda fala quando está lidando com termos que você nunca viu antes, principalmente acrônimos. E são deles que gostaria de falar aqui:

  • SDK: Software Development Kit; O SDK contém as bibliotecas (*.h, *.lib) para o desenvolvimento específico para aquele hardware que você deseja trabalhar com. No caso do Visual Studio 2005, ele já vem com o SDK para o desenvolvimento em Pocket PC. O SDK pode ou não incluir um emulador (como é o caso do Pocket PC 2003, que vem com um emulador para vários tipos de tela e teclado diferente). Além disso, ao instalar um SDK e escolhe-lo ao iniciar um projeto, ele já acerta o caminho para as headers e libraries, além de várias outras configurações do compilador, tais como, por exemplo, a arquitetura alvo para qual se deseja desenvolver.

Normalmente, é possível utilizar qualquer SDK que tenha a mesma arquitetura de processador para um hardware qualquer.  Por isso que em meu projeto TFTPCE do codeplex eu uso o Windows CE Standard SDK, que me dá a possibilidade de compilar pra qualquer arquitetura. (http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=fa1a3d66-3f61-4ddc-9510-ae450e2318c3)

É vantagem usar um SDK específico quando o fabricante do hardware fornece um, pois além das APIs padrão da Microsoft ele pode colocar mais algumas referências a funções especiais do hardware dele. (Por exemplo, um hardware que tenha uma garra pode ter uma API que controla essa garra)

  • DTK: Developer Tool Kit: O DTK não é comumente usado, esse é o primeiro que eu vejo. Ele constitui de algumas ferramentas extras que dependem do SDK para funcionar. O Link pro DTK do Windows Móbile 6.5 é esse:

http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=20686a1d-97a8-4f80-bc6a-ae010e085a6e

Além desses dois acrônimos, há também os que são mais comuns de ser ouvido quando se trabalha um nível mais baixo, com o Platform Builder, isto é, adaptando o Sistema Operacional para um hardware específico.

  • BSP, OEM e OAL: O BSP vem de Board Support Packager constitue em um conjunto de drivers e configurações que o fabricante de hardware, o OEM (Original Equipment Manufacturer). Além dos drivers, o BSP deve ter uma camada que conecta o processador com o Kernel do CE (pré-compilado). Essa camada é a OAL (OEM Adaptation Layer)

*A imagem ilustrativa foi retirada do flicker de Lucia Freitas, e está sobre a creative commons : http://www.flickr.com/photos/lufreitas/474912291/

0

Tutoriais em Video do Platform Builder 6

August 21, 2009

Essa semana, o pessoal da Adeneo postou alguns videos de treinamento sobre o CE 6 no msdn.

O Conteúdo, em Inglês você pode conferir aqui:

http://msdn.microsoft.com/en-us/windowsembedded/ce/aa731296.aspx

Também recomendo o conteúdo preparatório para a prova 70-571, que eles também postaram gratuitamente na web:

https://profile.microsoft.com/RegSysProfileCenter/wizard.aspx?wizid=55ac51bd-8d59-40d8-aa27-028b8ab0eac7&lcid=1033

E aproveito esse post para lançar a pergunta: Quantos profissionais com a certificação 70-571 existem no Brasil? Espero que logo logo seja pelo menos um (quem vos escreve)!

0

Windows Mobile x Windows CE x Pocket PC

August 18, 2009

É impressionate ver a quantidade de pessoas que confundem o Windows Mobile com o Windows CE na internet. Também pudera, isso não é deixado de forma precisa pelos marketeiros da Microsoft. Isso me faz lembrar de um video…

Ok, videozinhos engraçados á parte:

Windows CE

O Windows CE é um sistema operacional modular, embarcado. Isso significa que você pode pegar apenas as partes que você precisa para fazer com quê ele funcione em dispositivos com fins bem específicos. Por exemplo, nos sistemas de entretenimento em vôo. Ou em uma máquina de café, ou até controlando um elevador em um condomínio. Ou até em uma urna eletrônica (Todos esses são exemplos reais – uma das primeira versões da urna eletrônica rodava em CE); Na maioria dessas aplicações, a pessoa nem sabe que o CE está rodando. (Provavelmente se soubesse ia ficar como mimimi porquê Windows isso, Windows aquilo…)

Utilizando uma aplicação chamada de Platform Builder, você consegue criar imagens do sistema que variam desde minúsculas (baseadas em Tiny-Kernel, que usa 500kb) pra rodar, até imagens com mais de 100MB, com todos os recursos que você deseja, tais como touch screen, aceleração multimídia via hardware, acesso a internet, e por ae vai.

Ao criar um novo projeto no Platform Builder, você pode escolher entre os vários templates (Tiny Kernel, Thin Client, Media Client) de plataforma, e depois ir adicionando/removendo o que precisa. Um desses templates que mais foi utilizado foi o Pocket PC, que é a base do que chamávamos os PDA (Personal Digital Assistant), enquanto eles ainda faziam sentido no mercado (Antes dos smartphones aparecerem).

De olho nesse mercado, a Microsoft aperfeiçoou esse template adicionando algumas API´s bem específicas, sendo a mais importante delas o suporte a telefonia celular.

Então, ela pegou todo esse template específico, e criou uma aplicação chamada de Platform Builder for Windows Mobile, que é distribuido apenas para parceiros que assinam um NDA específico. Essa aplicação gera imagens de Windows Mobile, que é a base de qualquer smartphone no mercado, entre eles o Motorola Q, e o Samsung Omnia.

-Tá, legal bacana, mas possso rodar meu programinha favorito que roda no Windows XP  no Windows CE/Mobile?

Não, são basess de código diferente. O Windows CE tem apenas um subset da API do Windows XP+. Não que isso faça muita diferença, pois a API do Windows é gigantesca devido as várias revisões e funções que foram duplicadas. Além de que o Windows CE pode rodar em arquiteturas de processadores diferentes da X86. Mas se você tiver o código fonte, o porte não é tão complexo, dependendo das tecnologias que você usou. Se você tiver usando QT, C++, o porte é relativamente simples. Mas não se esqueça que você está portando para um sistema operacional com recursos limitados, dado que o seu alvo é bem diferente do Windows XP.

-Humm, ok, se então o Windows Mobile é baseado em Windows CE, posso rodar meu programinha favorito do meu celular no Thin Client que a minha empresa usa.

Provavelmente não, pois os thin clients da empresa são em sua maioria X86, e os smartphones, ARM. Mas, se você tiver um thin client baseado em ARM, provavelmente irá funcionar.

-Mas e a tela, são coisas completamente diferentes!

Sim, são. No caso do programador só ter planejado a aplicação pra funcionar no celular, ela irá ficar limitada em uma janela do tamanho da resolução do celular. E o touch será simulado com os cliques do mouse.

Versões do Windows Mobile/Pocket PC com o CE

PocketPC2003/Windows Mobile 2003 –> Baseado no Windows CE 4.2

Windows Mobile 2005 –> Baseado no Windows CE 5.0

Windows Mobile 6 até o Windows Mobile 6.5 –> Baseado no Windows CE 5.2

Tem uma tabela completíssima aqui: http://www.pocketpcfaq.com/wce/versions.htm

Ah, mais uma coisa. A nova versão do Windows CE não se chama Windows CE oficialmente, e sim Windows Embedded CE

– E o quê raios significa CE?

A explicação oficial da microsoft (http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q166915) é que CE não significa nada específico, e sim uma implicação de um número de preceitos em volta do mesmo, incluíndo  “Compacto”, “Conectável”, “Compatível”,”Companheiro” e “Eficiente”

1

Olá Mundo

August 16, 2009

Olá Mundo. Um tema mais batido que esse para começar esse blog, impossível. Quando estamos de frente a uma nova e inexplorada tecnologia, a pergunta que nos vem a cabeça é: “Por onde eu começo?” Pois eu digo, do começo, dizendo um tímido olá para a nova tecnologia.

Com o Windows CE e o Windows Mobile, não podia ser diferente. Criando e compilando um HelloWorld, já é possível avançar, e mais do que isso, fazer as perguntas corretas para as pessoas que podem te ajudar.

Passo a passo, vamos criar um simples (simples mesmo) Olá Mundo não gerenciado para Pocket PC, que é o antigo nome do Windows Mobile, que é baseado em Windows CE 4.2

Não se preocupem com as palavras grafadas em negrito, no próximo post irei explicar cada uma delas melhor.

Assumindo que o Visual Studio 2005 está instalado corretamente, vamos lá: Comece clicando em File->New Project

NewProject

Agora, Selectione Visual C++ /Smart Device, e finalmente Win32 Smart Device application. Coloque um nome e um caminho para o projeto, e clique em OK.

Na proxima tela, você tem uma descrição basica do que você selecionou. Clique em Platforms.

SelectSDK

Aqui você irá escolher para qual dispositivo(s) seu programa irá rodar. Para fins de demonstração, selecione o Pocket PC 2003

–O quê? Como assim, mas eu quero que rode no Windows Mobile/CE/Genérico X! Por quê devo escolher isso?

Como o Windows CE é um sistema operacional portável, que roda em vários tipos de coisas diferentes, aqui você aqui está escolhendo

1-) A arquitetura do processador (MIPS/ARM/SH/X86) . Por exemplo, na maioria dos celulares e pocket pcs de hoje em dia temos a arquitetura ARM.

2-) As bibliotecas adicionais que você terá acesso. Como o sistema é modular, o seu dispositivo pode ter só algumas partes. (Posso fazer uma torradeira rodar Windows CE,  logo, provavelmente ela não terá tela; será um dispositivo “headless”, então as bibliotecas (APIs) de desenho na tela não estão disponíveis)

Todo esse conjunto de configurações chama-se SDK, ou software development kit. Ele é sempre fornecido pelo fabricante do produto. Junto com ele pode vir, além das APIS, um emulador também, como é o caso do Pocket PC 2003.

Tendo isso claro em mente, vamos prosseguir pro próximo passo. Clique em Application Settings.

Application Settings

Selecione Console Application aqui, e clique em Finish. Nosso Wizard deverá gerar o seguinte código, que é quase igual ao de qualquer hello world em c:

#include “stdafx.h”
#include <windows.h>
#include <commctrl.h>

int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}

– Mas o quê?? Como assim, STDAFX.H??

Não se preocupe com ela agora. Só irei dizer por enquanto que ela é apenas um método para compilação de código pertencente as headers basicas mais rápidamente. Precisaria de um post inteiro para explicar melhor.

–Tá, mas e a <CommCrtl.h>

Ela é referente ao conjunto de controles comuns (para interface). Não imagino por quê a Microsoft colocou ela no wizard para gerar uma aplicação de linha de comando. Você pode retirá-la tranquilamente.

–Humm e o <Windows.h>

Essa é importante, contem todas as definições que o windows usa. E mais, dentro dela ela ainda inclue vários e vários arquivos.

Agora, vamos preencher o nosso Hello World!!

#include “stdafx.h”
#include <windows.h>
//#include <commctrl.h>

int _tmain(int argc, _TCHAR* argv[])
{

_tprintf(_T(”Olá Mundo!\n”));
return 0;
}

-O QUÊ ?? _tprintf, _T e TCHAR* argv[] ? Isso não parece nada com o C que eu aprendi na escola/faculdade! Blasfêmia!

Calma, ainda é cedo pra entrar em pânico, isso piora mais tarde :)

Como o Windows CE é UNICODE, todas as strings são baseadas em caracteres de DOIS BYTES de tamanho. o _tprintf é na verdade um define que verifica se o UNICODE foi definido pelo preprocessador e então escolhe entre wprintf ou printf normal. Isso deixa o código portável entre as várias versões diferentes do Windows. Até o Windows ME, apenas o sistema ANSI era suportado. (Caracteres que ocupam apenas UM BYTE). Isso pode parecer estranho para nós do mundo Ocidental, mas imagine um país que não usa os caracteres de A a Z para representar as palavras (Dica: Japão): A quantidade de letras deles é muito maior do que a capacidade de um byte (2^8 = 256 diferentes caracteres).

Da mesma forma, o _T explica que a string (”“Olá Mundo!\n”) irá ocupar 2 bytes na memória, e não um só.

–Ah, entendi! Então o TCHAR* argv[] é um ponteiro para Strings baseadas em Dois bytes por caracter!

Exato. Vamos ver como isso é na prática. Coloque um breakpoint no código, bem na linha do olá mundo:

breakpoint

E vamos apertar F5 para ver o que acontece.

–Você me enganou! Ele abre o Emulador do Pocket PC 2003, para no breakpoint mas não aparece nada!

É. Pois é. O Emulador do Pocket PC, e do Smartphone não contém um console. Isso não significa que ele não exista, significa apenas que quem criou os SDKs não quis incluir um console.

Vamos modificar o código pra ficar um pouco melhor.

betterCodeAgora sim, vamos apertar F5 e ver o que acontece!

MessageBox

Bem melhor né.

Faltando apenas um detalhe para terminar o post, vamos abrir a Janela Memory, da aba Debug->Windows->Memory->Memory 1, ou apertando ALT+6

No endereço, vamos escrever msg (é, queremos analisar o conteúdo da variável msg)

Memory 1

Interessante né? Aqui podemos ver como que um char unicode é guardado. Olá mundo fica da seguinte forma:

HelloWorld

Viram só. Ocupando Dois BYTES cada char. Coloquem isso na cabeça, pra evitar várias dores na mesma ao desenvolver. Quase todas as funções nativas do CE aceitam APENAS o tipo TCHAR, que é definido como wchar, que é o wide char, de dois bytes. Todas as funçoes com manipulação de strings DEVEM usar a sua respectiva função, que sempre começa com _t (_tprintf, _tsprintf, _tcslen, _tcscmp …)

Ufa. Até que é simples não?

-Não.

Tá, eu sei. Mas você se acostuma, e é muito bacana ver um aplicativo nosso funcionando em algo que você pode levar pra qualquer lugar. Tenho certeza que se você mostrar pra sua mãe ela ficará orgulhosa. A minha ficou. Eu acho.

2