¿Qué tema te gustaría ver en la revista SG en el 2010?
Advertisement
Septiembre-Octubre 2007
Conociendo Windows CE, Tutorial Para Iniciar un Programa de Forma Automática
Edición Septiembre-Octubre 2007
por Carlos Maya el 7 de septiembre de 2007
Visitas:    20803
Calificación promedio:       (1 voto)
Hacer referencia a este artículo Imprimir Enviar por email

Los sistemas embedded se encargan de hacer una tarea específica diseñando tanto el hardware como el software para ese fin, del que difícilmente se puede modificar su comportamiento. Entonces, siempre que el sistema se enciende, el software ejecuta ciertas tareas para inicializar el hardware, y en conjunto realizan el trabajo asignado.

Muchos sistemas embedded consisten básicamente de un microcontrolador, el cual cuenta con diversos periféricos encargados de entradas y salidas; acondicionadores de señales y actuadores. Tales sistemas son básicamente programados en lenguaje ensamblador y en lenguajes de nivel medio como son BASIC o C, entre otros. El principal requerimiento en este tipo de sistemas es el tiempo real, donde la respuesta a una entrada debe cumplir un tiempo limitado. Pero existen otras aplicaciones con funcionalidad más diversa, que posiblemente requieran manejar cantidades grandes de datos, presentar una interfaz de usuario, manejar bitácoras, etcétera. Ejemplos de esto son los kioscos para punto de venta, o los reproductores digitales de música. En este tipo de sistemas los microcontroladores pierden sentido, y se requiere de mucho más recursos —como codecs de audio o video—, además de un manejo de memoria más extenso y la capacidad de procesamiento multitarea.

La plataforma Windows CE
Las aplicaciones de software embedded se pueden desarrollar en lenguajes de bajo nivel, como ensamblador. Sin embargo, en la mayoría de los casos esto no es práctico ni productivo. Es así que se han desarrollado plataformas de más alto nivel para sistemas embedded. Tal es el caso de Windows CE. Una de sus características más importantes es que, es un sistema operativo configurable creado por Microsoft para sistemas embedded, de tal forma que se parte de un kernel con un footprint cercano a los 300KB y dependiendo de los módulos que se desee agregar (existen alrededor de 700 módulos de funcionalidad específica) se termina con un sistema operativo tan pequeño o grande como sea necesario para nuestro sistema. De hecho, se considera que Windows CE es en realidad una plataforma para generar sistemas operativos a la medida, para sistemas embedded. La ventaja que tenemos aquí es que contamos con una plataforma que, aunque no tiene todo el potencial de un desktop, provee un ambiente parecido donde se puede emplear un subset de APIs de Windows, compact framework, SQL mobile, multitareas, para programar en lenguajes como el C# o C++, que en conjunto con las herramientas de Visual Studio facilitan enormemente el desarrollo de estos sistemas.

Tutorial
Habiendo introducido lo que es Windows CE, ahora me enfocaré en explicar una técnica que se puede ser utilizar para iniciar programas desde fuera de la imagen del OS de Windows CE.

Sucede que en Windows CE existe la posibilidad de agregar aplicaciones que estén integradas a la imagen del sistema operativo, pero el inconveniente de este método es que cada vez que se requiera modificar algo en el sistema aplicativo, se tendría que reemplazar la imagen completa del sistema operativo, lo que nos consume mayor tiempo y ancho de banda, especialmente cuando las actualizaciones se realizan de forma remota. Para evitarlo, aquí planteo un método de arrancar un programa fuera de la imagen del sistema operativo para el cual hay que considerar los siguientes puntos:

• La imagen debe tener los drivers necesarios para soportar un dispositivo de almacenamiento masivo (CF, HDD, DOM, etcétera).
• El sistema aplicativo debe existir en cualquier unidad de almacenamiento no volátil.
• Es deseable que sea configurable el nombre del sistema aplicativo. Esto es útil para el desarrollo y pruebas.

Comencemos considerando que tenemos previamente configurada la imagen del sistema operativo, entonces creamos un subproyecto WCE tipo consola, tal como muestra la figura 1.

Posteriormente ponemos el nombre del subproyecto, que en este caso se llamará: “IniciarPrograma”. Escogiendo un proyecto vacío, y el tipo de proyecto como una aplicación de consola para Windows CE (ver figura 2).

Una vez hecho esto, en el explorador de soluciones podremos encontrar el subproyecto que acabamos de crear. Si abrimos la carpeta de código fuente encontraremos el archivo IniciarPrograma.cpp que fue generado automáticamente y que debemos editar para que haga lo que nosotros deseamos. En este caso, alimentemos el código del listado 1 en nuestro archivo cpp.

Para arrancar el programa que acabamos de agregar, abrimos la carpeta de parámetros del subproyecto IniciarPrograma y editamos el archivo IniciarPrograma.reg de tal forma que el registro HKEY_LOCAL_MACHINE/init quede con los valores ilustrados en la figura 3.

Creamos ahora el archivo AutoRun.ini en hard disk (que es el nombre que le asigna Windows CE al dispositivo principal de almacenamiento), y de éste leemos la ruta del programa aplicativo a ejecutar.
En este momento ya contamos con todo lo necesario para poder ejecutar el programa aplicativo de forma automática. Entonces construimos el proyecto agregado a la imagen y lo cargamos a la plataforma en la que estamos probando. Debemos también tener el programa aplicativo cargado ya en el dispositivo de almacenamiento. En la figura 4 se muestra la pantalla de inicio de la imagen donde al cargar se ejecuta el programa: IniciarPrograma.exe desde la imagen, y espera unos segundos a que se carguen los dispositivos de almacenamiento. Posteriormente ejecuta el programa aplicativo como se muestra en la figura 5.


// IniciarPrograma.cpp : Defines the entry point for the console application.

#include “stdafx.h”

int _tmain(int argc, TCHAR *argv[], TCHAR *envp[])
{
OutputDebugString(_T(“En espera para cargar drivers”));
Sleep(8000); //Tiempo de espera de 8 segundos
OutputDebugString(_T(“Fin de espera para cargar drivers”));
FILE *pfile;
char cArchivo[200];
cArchivo[0] = ‘\n’;
//Se abre el archivo que nos indica que programa arrancar
pfile = fopen(“Hard Disk\\AutoRun.ini”,”r”);
if(pfile == NULL)
{
fprintf(stderr,”No se puede abrir el archivo”);
exit(EXIT_FAILURE);
}
//Se lee la ruta del programa a arrancar
fgets(cArchivo,200,pfile);
fclose(pfile);
if(cArchivo[0] != ‘\n’) //Verificamos que no este vacio el string
{
TCHAR wArchivo[200];
//Mostramos el Archivo a arrancar, se puede omitir
printf(“Arrancando archivo: %s”,cArchivo);
Sleep(60000);
//Se tranforma los datos para Unicode
MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,cArchivo,-1,wArchivo,200);
//Se crea el proceso
CreateProcess(wArchivo,NULL,NULL,NULL,0,0,NULL,NULL,NULL,NULL);
}
return 0;
}

Listado 1. Código de inicialización del programa

Figura 1. Agregando un proyecto a la imagen de CE.


Figura 2. Creando un proyecto WCE tipo consola.

Figura 3. Agregando llaves al registry.

Figura 4. Pantalla principal de Windows CE 6.0.

Figura 5. Pantalla de ejecución automática.

Conclusiones
En Windows CE se puede configurar nuestra aplicación según lo requiera, desde los módulos a utilizar, como del comportamiento en sí de cada uno de ellos. En este artículo vimos un ejemplo sencillo de cómo inicializar un programa, pero se pueden realizar muchas otras tareas, ya que se tiene una buena parte del código fuente de Windows y la posibilidad de manipular con mucha flexibilidad el registry. Por ejemplo: se pueden definir conexiones GPRS a través de módem, que el dispositivo funcione como

web server, modificar la interfaz de usuario de diversos diálogos de configuración, etcétera. Otra gran ventaja de Windows CE es que el desarrollo se puede hacer con lenguajes de alto nivel y podemos disponer de muchas librerías que facilitan y aceleran la programación, además de que simplifican el mantenimiento de dichas aplicaciones. También debemos tener en cuenta que podemos trabajar desde el ambiente de desarrollo de Visual Studio 2005, aprovechando todas sus capacidades.

Acerca del autor
Carlos Maya es programador móvil en la empresa emLink. Ha desarrollado sistemas bajo la plataforma Windows CE como InfoLink y SalesLink CRM, que son sistemas de levantamiento de información en campo y relación con el cliente. Adicionalmente ha desarrollado soluciones a la medida para clientes como Bimbo, Multipack, ADO, Comex, Pearson Educación, Video Turismo, entre otros.


Comentarios de usuarios (5) RSS feed comment
Enviado por victor, 30 de marzo de 2009, , Registrado
1. Como modificar power properties sin rese
Hola, el documeto es genial, sin enbargo al querer realizar desde mi aplicacion, modificaciones al regedit de windows CE sobre las propiedades de power, requiero reiniciar el equipo para que estos surgan efectos, quisiera saber que debo hacer para poder hacerlos efectivos sin reiniciar. 
 
Gracias
 
» Notificar este comentario al administrador
» Responder a éste comentario...

Enviado por javier conesa, 27 de noviembre de 2009, , Registrado
2. necesito meter un programa en la rom
hola mira estoy necesitando meter un programa en la la imagen del sistema operativo, esto es posible? no entiendo mucho del tema pero tengo el programa funcionando y solo quiero que no se me borre cuando reinicio el dispositivo, podriamos ponernos en contacto, mi mail es javierhconesa@gmail.com muchas gracias
 
» Notificar este comentario al administrador
» Responder a éste comentario...

Enviado por hugo, 3 de diciembre de 2009, , Registrado
3. win ce
oye una pregunta yo cree una imagen de win ce pero no puedo instalarla a un dispocitivo me podrias ayudar de favor de doy mi correo linkzelda60@hotmail.com muchas gracias
 
» Notificar este comentario al administrador
» Responder a éste comentario...

Enviado por Fernando, 5 de abril de 2010, , Registrado
4. Ayuda en windows CE
Hola he leido el articulo publicado por Carlos Maya el 7 de septiembre de 2007, sobre la configuracion de una aplicativo en windows CE, podrian por favor rientarme sobre como instalar un modem GRPS en mi caso tengo un ZTE F100 y no se como puedo configurarlo en windows CE. 
 
De antemano mil gracias.
 
» Notificar este comentario al administrador
» Responder a éste comentario...

Enviado por Jose Alberto Vega, 11 de mayo de 2010, , Registrado
5. Una ayuda a todos los Novatos...
Por favor, ¿como puedo conectar mi Netbook com windows CE 5.0 a mi Pc? no es posible utilizar el Activesync pues no se conecta como un GPS o una PDA. 
A raíz de este problema, no puedo instalar nada de nada, pues por mas que copie los archivos CAB en la netbook, esta me dice que no es una aplicación valida. 
Creo que somos muchos los que como yo, estamos mas perdidos que perro en la neblina. 
Un saludo a todos y gracias por vuestra ayuda :zzz
 
» Notificar este comentario al administrador
» Responder a éste comentario...

Añade tu comentario



mXcomment 1.0.8 © 2007-2010 - visualclinic.fr
License Creative Commons - Some rights reserved