-

hey viewer, we're moving!

We are currently transitioning to a new web system, so we are not updating this wikisite anymore.

The public part of the new web system is available at http://www.ira.disco.unimib.it


Setup environment for Arm developing

From Irawiki

Jump to: navigation, search

In this page we will describe what is necessary to develop Arm software under ubuntu linux. For other os refer to Informatica Industriale / Informatics for Industrial Applications 2011/12

Contents

ARM developing generic stuff

ECLIPSE [the evil way]

One possible solution is to use eclipse to program and debug

We are working on a script to automate this process

One time setup

Software download

Eclipse configuration

  • Create a workspace
  • download both jar files from: [1] and put them into eclipse/dropins folder
  • install GDB Hardware Debugger plugin in one of this two ways
  1. from eclipse
    1. lanciare eclipse
    2. installare il plugin GDB Hardware Debugger (Help->Install New Software, selezionare "Indigo..." nel menù a tendina, quando la lista di plugin è disponibile cercare "GDB" e selezionare il plugin "GDB Hardware Debugger"), quindi riavviare eclipse
    3. selezionare Windows->Preferences->C/C++->Debug->EmbSys Register View, quindi selezionare cortex-m3->STMicro->STM32F10X_HD
  2. from the command line
    1. eclipse -application org.eclipse.equinox.p2.director -repository http://download.eclipse.org/releases/indigo -installIU org.eclipse.cdt.debug.gdbjtag.feature.group

OpenOCD configuration

  • selezionare Run->External tools->External tools configuration
  • cliccare col destro su "Program" nell'albero a sinistra, quindi "New"
  • inserire "OpenOCD" nel campo "Name"
  • nel campo Location cliccare su "Browse File System", quindi selezionare openocd-0.5.0.exe nella directory "bin" di OpenOCD
  • nel campo "Arguments" inserire: -f interface/olimex-jtag-tiny.cfg -f target/stm32f1x.cfg -c "reset_config trst_and_srst"
  • nel tab "Build" deselezionare "Build before launch"
  • nel tab "Common", selezionare "External tools" nel campo "Display in favorites menu"
  • cliccare su "Apply" e quindi su "Close"

New project setup

Project creation

Standard project

  • scaricare il file stm32_template.zip e decomprimerlo in workspace. RINOMINARE la directory con un nome a piacere prima di procedere (ad esempio "stm32_hello_world")
  • lanciare eclipse selezionando come workspace la directory "workspace" creata in precedenza
  • selezionare file->new->C-project
  • selezionare come location la directory creata in precedenza ("stm32_hello_world")
  • specificare un nome per il progetto (ad esempio "stm32_hello_world")
  • selezionare Makefile project->Empty project come Project type e --- Other toolchain --- come Toolchain e cliccare su Finish
  • selezionare il nuovo progetto nell'albero a sinistra, quindi Project->Properties->C/C++ Build->Discovery Options, selezionare "Automate discovery..."
  • aprire il file src/main.c
  • selezionare project->Build project
  • cliccare col destro sul progetto nell'albero a sinistra, quindi Index->Rebuild, gli errori in main.c dovrebbero sparire

ChibiOS project

  • scaricare il file ChibiOS_2.2.7_HY-STM32.zip e decomprimerlo in workspace.
  • lanciare eclipse selezionando come workspace la directory "workspace" creata in precedenza
  • selezionare file->new->Makefile Project with Existing Code
  • specificare un nome per il progetto (ad esempio "stm32_ChibiOS")
  • selezionare Chibios_2.2.7/demos/HY-STM32 in "Existing Code Location" e cliccare su Finish
  • selezionare il nuovo progetto nell'albero a sinistra, quindi Project->Properties->C/C++ Build->Discovery Options, selezionare "Automate discovery..."
  • aprire il file src/main.c
  • selezionare project->Build project
  • cliccare col destro sul progetto nell'albero a sinistra, quindi Index->Rebuild, gli errori in main.c dovrebbero sparire


DebuggerConfiguration

  • selezionare Run->Debug configurations
  • cliccare col destro su "GDB Hardware Debugging" nell'albero a sinistra, quindi "New"
  • nel campo "C/C++ Application" cliccare "Browse", quindi selezionare il file firmware.elf (o ch.elf se si sta usando ChibiOS) nella directory del progetto corrente
  • nel tab "Debugger" inserire "arm-none-eabi-gdb" nel campo "GDB Command" e deselezionare "Use remote target"
  • cliccare su "Select other" in basso, alla voce "Using GDB (DSF) Hardware...." e quindi selezionare "Standard GDB Hardware..."
  • nel tab "Startup" deselezionare "Load image"
  • nel tab "Startup", nel campo "Initialization commands" inserire (potete copiare il percorso del file firmware.elf (o ch.elf se si sta usando ChibiOS) dal tab "Main"):
file "/Users/tino/workspace/STM32/projects/stm32_template/firmware.elf"
target extended-remote localhost:3333
monitor soft_reset_halt
  • nel campo "Run commands" inserire:
monitor soft_reset_halt
monitor wait_halt
monitor poll
monitor flash probe 0
monitor stm32f1x mass_erase 0
load
monitor soft_reset_halt
thbreak main
continue
  • nel tab "Common", selezionare "Debug" nel campo "Display in favorites menu"

Sublime Text 2 [good way]

An alternative to the leaded eclipse is Sublime Text 2. This software is not free but the demo version is unlimited (still in beta)

Software setup

Install this software following the provided information

Create a new project

  • scaricare il file stm32_template.zip e decomprimerlo in workspace. RINOMINARE la directory con un nome a piacere prima di procedere (ad esempio "stm32_hello_world")
  • da sublime text fare File -> Open folder
  • quindi fare Project -> save project as

Configurare il debugger

nel file projectname.sublime-project aggiungere le righe necessarie per renderlo come questo esempio (occhio alle virgole tra una riga e l'altra)

{
	"folders":
	[
		{
			"path": "path/to/project"
		}
	],
	"settings":
	{
		"sublimegdb_commandline": "arm-none-eabi-gdb --interpreter=mi ./firmware.elf",
		"sublimegdb_exec_cmd": "source connect.gdb",
		"sublimegdb_workingdir": "."
	}
}

nella cartella principale del progetto creare i seguenti files

connect.gdb

set non-stop off
target extended-remote localhost:3333
source init.gdb
monitor reset
init

init.gdb

define init
    monitor soft_reset_halt
    monitor soft_reset_halt
    monitor wait_halt
    monitor poll
    monitor flash probe 0
    monitor stm32f1x mass_erase 0
    load
    monitor soft_reset_halt
    thbreak main
    continue
end

Questi files sono identici per ogni progetto quindi si può spostarli in una cartella a piacimento avendo cura di modificare nel file di progetto la riga

"sublimegdb_exec_cmd": "source connect.gdb",

e nel file connect.gdb la riga

source init.gdb

fornendo il path assoluto dei files.

A questo punto il debugger e il progetto sono configurati.

Esecuzione e debug

OPENOCD from the command line

First of all you need to run openocd and you need to do that from the command line. Although this can be done easily with the command [sudo] openocd -f interface/olimex-jtag-tiny.cfg -f target/stm32f1x.cfg -c "reset_config trst_and_srst" I provide an alternative version (since I can't remember that string..) create a file named asYouWish.cfg with the following content

source [find interface/busblaster.cfg]
source [find target/stm32f1x.cfg]
reset_config trst_and_srst

if you want you can add a udev rule to allow executing without the need of sudo.. This is well documented here but be careful since I think they swap idVendor and idProduct.

than to launch openocd simply run

openocd -f asYouWish.cfg

DEBUG

  • far partire il debug da sublime text con f5

in caso di errori nel caricamento del file (per colpa di arm-none-eabi e non sublime text :P) sembra funzionare fare reset dalla schedina (o "monitor reset" nella console gdb) e lanciare due volte il comando "init" dalla console gdb dentro sublime text (si apre con shift+f5). (note that we defined this command with the init file, so if you changed something you need to fix it here accordingly)

Visualizzazione registri

Attualmente la visualizzazione dei registri non è supportata. è possibile però visualizzarne il contenuto in esadecimale specificando l'indirizzo

monitor mdw 0x40014200

l'esempio qui sopra mostra lo status register dell'adc1. Per trovare l'indirizzo del vostro registro dovete innanzi tutto trovare l'indirizzo di base della periferica, nella sezione memory map all'inizio del reference manual, e quindi sommare l'offset del vostro registro che trovate nella descrizione del registro stesso. [...]

Personal tools