PIC e Linux: le gputils

Di seguito verrà descritto come usare le GPUtils (gpasm e gplink) per produrre relocatable code, a partire da sorgenti assembly, per programmare poi i PIC sotto Linux.

E' sufficiente installare le gputils; queste contengono tra l'altro gpasm (equivalente di Mpasm sotto Windows) e gplink (linker).

La programmazione vera e propria si attua tramite il binario Microchip pk2cmd.

Tutto quanto sotto è stato testato con successo sulla demoboard Freedom II, con PIC 18F4550, usando il PicKit2.

GPUtils e Pk2cmd

Compilazione

Per compilare un .asm:

ls
Delay20Mhz.asm  i2c-eeprom.asm  i2c-eeprom.inc  Init.asm  LCD.asm  Main.asm

gpasm -c -p 18F4550 Delay20Mhz.asm 
gpasm -c -p 18F4550 i2c-eeprom.asm 
gpasm -c -p 18F4550 Init.asm 
gpasm -c -p 18F4550 LCD.asm 
gpasm -c -p 18F4550 Main.asm

oppure usando uno script bash:

for i in $( ls *.asm ); do gpasm -c -p 18F4550 $i; done

dove:

-c produce relocatable code.

I file output ottenuti sono:

ls
Delay20Mhz.asm  Delay20Mhz.o    i2c-eeprom.inc  i2c-eeprom.o  Init.lst  LCD.asm  LCD.o     Main.lst  Delay20Mhz.lst  i2c-eeprom.asm  i2c-eeprom.lst  Init.asm      Init.o    LCD.lst  Main.asm  Main.o

Linking

Per effettuare un linking dei file oggetto *.o appena creati:

gplink -m -c *.o -o i2c-eeprom
message: using default linker script "/usr/share/gputils/lkr/18f4550.lkr"

dove:

-c genera relocatable code

-m genera un file .map

-d visualizza messaggi di debug in fase di linking

-o nome del file di output

I file i2ceeprom.* ottenuti:

ls
Delay20Mhz.asm  Delay20Mhz.o    i2c-eeprom.cod  i2c-eeprom.hex  i2c-eeprom.lst  i2c-eeprom.o  Init.lst  LCD.asm  LCD.o     Main.lst
Delay20Mhz.lst  i2c-eeprom.asm  i2c-eeprom.cof  i2c-eeprom.inc  i2c-eeprom.map  Init.asm      Init.o    LCD.lst  Main.asm  Main.o

Programmazione con PicKit 2

Seguire pedissequamente quanto indicato al questa pagina:

http://sync-signal.com/2010/01/getting-started-with-pickit2-on-ubuntu-9-10/

In particolare la programmazione di un file hex si ottiene così:

pk2cmd -P -M -F i2c-eeprom.hex -Y
Auto-Detect: Found part PIC18F4550.

PICkit 2 Program Report
6-8-2011, 14:47:53
Device Type: PIC18F4550

Program Succeeded.
PICkit 2 Verify Report
6-8-2011, 14:47:53
Device Type: PIC18F4550

Verify Succeeded.

Operation Succeeded
$ 

Script bash

Il seguente script bash effettua con un solo comando tutte le operazioni sopra indicate (compilazione,linking e programmazione); è sufficiente dargli come parametro il nome del file di output di gplink:

/usr/local/bin/buildall.sh

#!/bin/bash

# controlla che sia specificato il nome file di output di gplink
if [[ $# -eq 0 || $# -gt 2 ]] ; then
   echo 
   echo "Uso: buildall.sh output-file"
   echo

else
   # assembling
   echo "**** 1/3 - Inizio Assembling ****"
   # assembla tutti i file .asm
   for i in $( ls *.asm ); do
      if gpasm -c -p 18F4550 $i | grep -i error ; then
      echo -e "**** 1/3 - Fine elaborazione con \033[31;5;148merrori\033[39m. ****"
      echo
      exit 1
   else
      : # non fare niente
   fi
   done
   echo -e "**** 1/3 - Assembling avvenuto con \033[38;5;148msuccesso\033[39m ****"
   echo
   # linking
   echo "**** 2/3 - Inizio Linking ****"
   if gplink -m -c *.o -o $1 | grep -i error ; then
      echo -e "**** 2/3 - Fine elaborazione con \033[31;5;148merrori\033[39m. ****"
      echo
      exit 1
   else
      echo -e "**** 2/3 - Linking avvenuto con \033[38;5;148msuccesso\033[39m ****"
      echo
   fi
   # programma
   echo "**** 3/3 - Inizio Programmazione device ****"
   pk2cmd -P -M -F $1.hex -Y
   # se il precedente comando produce un exit code diverso da 0
   if [ "$?" -ne "0" ]; then
      echo -e "**** 3/3 - Fine elaborazione con \033[31;5;148merrori\033[39m. ****"   
      exit 1
   else
      echo -e "**** 3/3 - Programmazione device avvenuta con \033[38;5;148msuccesso\033[39m ****"
   fi
fi

Editor

Gedit, l'editor di Ubuntu, non prevede l'evidenziazione del codice PicAsm.

Un tale ha generosamente messo a disposizione un file di definizione, scaricabile qui.

Si estrae il solo file asmpic.lang in

/usr/share/gtksourceview-2.0/language-specs/

Dopodichè è sufficiente dare il seguente comando:

sudo update-mime-database /usr/share/mime

e i file PicAsm in Gedit adesso compaiono così, con la sintassi evidenziata:

Tags:

Add new comment

Filtered HTML

  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • Allowed HTML tags: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd> <img> <p> <h1> <h2> <h3> <h4> <h5> <div> <pre> <object>
  • You may insert videos with [video:URL]
  • Web page addresses and e-mail addresses turn into links automatically.

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.
By submitting this form, you accept the Mollom privacy policy.