Embedded/es

From Free Pascal wiki
Revision as of 15:08, 24 March 2012 by Vincent (talk | contribs) (Text replace - "delphi>" to "syntaxhighlight>")
Jump to navigationJump to search

English (en) español (es) 中文(中国大陆)‎ (zh_CN) 中文(台灣)‎ (zh_TW)

La finalidad embebida está todavía en desarrollo y solamente están soportados unos cuantos controladores. No obstante, es posible crear programas para dispositivos embebidos arm. Su finalidad se centra en dispositivos que no utilizan sistema operativo y que tienen disponibles varios KBs de memoria RAM, más algunas docenas de KBs en memoria flash. Un tipo de dispositivo típico en el que utilizarlo es la familia LPC de NXP con miembros populares tales como el PC2124 con 16 kB de RAM y 256 kB de flash utilizando el juego de instrucciones ARM7.

Embedded port

Estado

  • Solamente hay soporte útil disponible desde la versión 2.3.1 desde el svn.
  • Actualmente solamente está soportado arm embebido.
  • Los controladores soportados actualmente están limitados a los NXP LPC.

ARM Embebido

Construcción

Obtener los FPC más actualizados desde svn:

 svn co http://svn.freepascal.org/svn/fpc/trunk fpc

Obtener las utilidades binarias embebidas arm.

Para Windows, están disponibles en http://svn.freepascal.org/svn/fpcbuild/binaries/i386-win32. Se puede chequear el directorio completo para su descarga o bien descargar solamente arm-embedded-ar.exe, arm-embedded-as.exe, arm-embedded-ld.exe, arm-embedded-strip.exe, arm-embedded-objdump.exe y arm-embedded-objcopy.exe manualmente. Sitúa estas utilidades en un directorio que esté incluido en la variable de entorno path.

Para construir FPC para arm embebido:

 cd fpc
 make clean buildbase installbase CROSSINSTALL=1 OS_TARGET=embedded CPU_TARGET=arm

Esto construye solamente el compilador y la rtl en lugar del FPC completo. Debido a las capacidades limitadas de los sistemas embebidos en los que utilizarlo, construir todos los paquetes no resulta demasiado útil. Como siempre, se debe tener cuidado para evitar sobreescribir un compilador arm pre-existente en el sistema. Si este es el caso, se debería utilizar INSTALL_PREFIX para instalarlo en un directorio diferente y commutar estre ellos.

Testeando

A continuación se encuentra un programa simple. Debe guardarse como tled1.pp para seguir la descripción. El programa está indicado para las placas de desarrollo tipo LPC-WEB de OLIMEX (http://www.olimex.com/dev/lpc-e2124.html). Cuando se presiona el pulsador 1 se enciendo el LED 1 durante un cierto tiempo, lo mismo ocurre para el pulsador 2 y el LED 2.

procedure Wait(d : dword);
begin
  while d<>0 do
    dec(d); { decrementa la variable d }
end;

begin
  { inicializa PLL }
  InitPLL(2,1);

  { inicializa LEDs }
  { port 0.8: output }
  TBitvector32(GPIO0_IODIR)[8]:=1;
  { port 0.10: output }
  TBitvector32(GPIO0_IODIR)[10]:=1;

  { apaga ambos LEDs }
  TBitvector32(GPIO0_IOSET)[8]:=1;
  TBitvector32(GPIO0_IOSET)[10]:=1;

  { inicializa la entrada de pulsadores }
  { port 0.9: input }
  TBitvector32(GPIO0_IODIR)[9]:=0;
  { port 0.15: input }
  TBitvector32(GPIO0_IODIR)[15]:=0;

  { endless loop}
  while true do
    begin

      { pulsador 1 presionado }
      if TBitvector32(GPIO0_IOPIN)[15]=0 then
        begin
          { enciende LED, lógica inversa }
          TBitvector32(GPIO0_IOCLR)[8]:=1;
          { wait }
          Wait(500000);
          {  apaga LED, lógica inversa }
          TBitvector32(GPIO0_IOSET)[8]:=1;
      end;

      { pulsador 2 presionado }
      if TBitvector32(GPIO0_IOPIN)[9]=0 then
        begin
          { enciende LED, lógica inversa }
          TBitvector32(GPIO0_IOCLR)[10]:=1;
          { espera }
          Wait(500000);
          { apaga LED, lógica inversa }
          TBitvector32(GPIO0_IOSET)[10]:=1;
      end;
    end;
end.

Si se tiene instalado FPC para arm embebido tal como se describe arriba, el programa puede ser compilado mediante:

 fpc -Parm -Tembedded -Wplpc2124 tled1.pp
 -Parm

Indica al compilador que compile para arm.

 -Tembedded

Indica al compilador que compile para el objetivo embebido.

 -Wplpc2124

Indica al compilador que compile para NXP LPC 2124. Esto tiene dos efectos: primero, una unit (lpc21x4 en este caso) conteniendo el código de inicio y el port etc. cargando las definiciones para este controlador. Además el compilador utiliza un script para el enlazador que se ajusta a las necesidades de este controlador.

El resultado obtenido por el compilador es un fichero con extensión .hex que puede ser programado con la utilidad flash NXP.

Añadiendo nuevos controladores

Añadir un nuevo tipo de controlador requiere básicamente tres pasos: primero, extender el compilador de manera que reconozca el nombre del controlador, entonces añadir el script del enlazador y finalmente crear una unidad rtl con el registro de definiciones y código de inicio.

Añadir el tipo de controlador al compilador

Añadir el script del enlazador (linker) al compilador

Crear una rtl unit con código de inicio y registro de definiciones

Enlaces de interés

                     - Traducción inicial 27 junio 2009 -