Forum: Mikrocontroller und Digitale Elektronik NewBee - Umstieg von Atmega64 auf ARM Cortex M3 mit GCC?


von Bernd (Gast)


Lesenswert?

Hallo Zusammen,

aktuell arbeite ich auf mit dem STK500 auf einem Atmega64.
(ganz normal über make.exe über MakeFiles)

Gerne würde ich mehr ADC Power haben, da bin ich auf den
CortexM3 gestoßen,

Super günstig, extrem schnell
http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail&name=726-1023-ND
4,40 EUR ???

Das ganze macht natürlich nur Sinn wenn ich nicht extra
eine Compiler für X tausend Euro brauche.

Kann mir jemand sagen wie groß da der Umstieg ist?

Ich hab jetzt schon diese Homepage gefunden
http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/index_cortex.html
So ganz blicke ich da aber nicht durch (GNU-toolchain, OpenOCD von Keil 
etc.)
und hat mich etwas verunsichert.

Einfach nur
1
MCU = atmega64

durch
1
MCU = cortexM3

zu ersetzen und die Ports Anzupassen klappt wohl nicht, oder?
(Es geht nur um die Software, nicht um die Hardware)

Ich hab leider auch keine spezielle Liste gefunden was GCC nativ
unterstützt.

Kann man das wagen?

Vielen Dank & Viele Grüße
Bernd

von Michael (Gast)


Lesenswert?

Ich habe (fast) denselben Umstieg hinter mir.
Allerdings den Luminary LM3S1968.

Ich fand es sehr einfach. Ich nutze allerdings kein JTAG-Debugging, 
sondern nur "simples" RS232 oder Display-Debugging.

Der GCC unterstützt den M3. Auch ein Linkerskript ist schnell erstellt.
Ich jedenfalls hatte nach nicht mal einem Tag das FreeRTOS mit der 
Luminary-Library laufen und erste Ausgaben auf einem Display.

Im Grunde ist der Einstieg aufgrund der guten Libraries von Luminary 
sogar einfacher als beim Mega644, einzig das Linker-Skript ist anfangs 
etwas abschreckend, aber man braucht nur einen Bruchteil der Optionen, 
wenn man kein hochkomplexes Projekt damit macht.

von Tilo (Gast)


Lesenswert?

Der Cortex läuft afaik mit winarm bzw. yagarto (Hab bisher nur mit dem 
ARM7 gearbeitet)

Die C-Algorithmen wirst du übernehmen können. Bei allem was auf Hardware 
zugreift, wird es vermutlich schwieriger.

Der Vorteil bei AVR ist, dass es nur einen Hersteller gibt, so dass die 
Hardware immer recht ähnlich angesprochen wird. ARM verkauft IP-Cores, 
die Hertseller in ihre Produkte einbauen können, weshalb es trotz 
gleichem Core sehr unterschiedliche Ansätze geben kann.

Ansonten hängt es davon ab, wie viel dir ein Compiler bzw. deine Zeit 
Wert ist. Je günstiger, desto mehr Zeit muss man investieren.

von H.Joachim S. (crazyhorse)


Lesenswert?

Hallo Bernd, das Problem kommt mir bekannt vor :-)

von Michael (Gast)


Lesenswert?

>Der Cortex läuft afaik mit winarm bzw. yagarto (Hab bisher nur mit dem
>ARM7 gearbeitet)

Ich nutze Codesourcery G++. Das war die erste gcc Version, die den M3 
unterstützte. Sollte aber mittlerweile in der aktuellen Gcc Version drin 
sein.


>Die C-Algorithmen wirst du übernehmen können. Bei allem was auf Hardware
>zugreift, wird es vermutlich schwieriger.

Der Vorteil vom M3 ist, daß die Hersteller Luminary und ST umfangreiche 
Hardware Libraries bereit stellen, die das Programmieren der diversen 
MCU-Einheiten wirklich einfach machen, auf jeden Fall einfacher als beim 
AVR.


>Der Vorteil bei AVR ist, dass es nur einen Hersteller gibt, so dass die
>Hardware immer recht ähnlich angesprochen wird. ARM verkauft IP-Cores,
>die Hertseller in ihre Produkte einbauen können, weshalb es trotz
>gleichem Core sehr unterschiedliche Ansätze geben kann.

Das ist aber bei weitem nicht mehr so schlimm wie beim ARM7 oder ARM9.
ARM war so clever, 2 Dinge zu tun:
1. Die Gestaltungsmöglichkeiten bei der Hardware viel stärker 
einzuschränken, also z.B. Speicherbereiche oder einen Systicktimer im 
Kern, den alle Derivate haben.
2. Mit CMSIS einen Software Standard zu schaffen, der eine Portierung 
der Software auf andere Derivate stark vereinfacht.
So ist z.B. FreeRTOS in wenigen Minuten auf komplett andere Derivate 
portiert.


>Ansonten hängt es davon ab, wie viel dir ein Compiler bzw. deine Zeit
>Wert ist. Je günstiger, desto mehr Zeit muss man investieren.

Er benutzt offensichtlich GCC. Das geht auch genauso simpel mit dem M3.

von Bernd (Gast)


Lesenswert?

Hallo,

vielen Danke für die Antworten

> Ich fand es sehr einfach. Ich nutze allerdings kein JTAG-Debugging,
> sondern nur "simples" RS232 oder Display-Debugging.

mehr brauch ich auch nicht :)

Ich versteh noch nicht ganz, wenn GCC den M3 unterstütz,
wieso werden dann Programme wie FreeRTOS (?), LinkerScript benötigt.

Externe Libarys verstehe ich soweit, aus den AVR Dateien
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
#include <stdio.h>
4
#include <stdint.h>
5
#include <stdlib.h>
6
...

wird dann durch Luminary Libarys ersetzt.
1
#include "../scr/hw_memmap.h"
2
#include "../scr/hw_types.h"
3
#include "../scr/src/uart.h"

und die MakeFile sieht dann wohl so aus:
1
# WinARM template makefile 
2
# by Martin Thomas, Kaiserslautern, Germany 
3
# <eversmith@heizung-thomas.de>
4
5
# Toolchain prefix (i.e arm-none-eabi -> arm-none-eabi-gcc.exe)
6
TCHAIN = arm-none-eabi
7
8
# MCU name and submodel
9
MCU      = cortex-m3
10
SUBMDL   = lm3s811
11
12
# must be yes - only THUMB2 on M3 no ARM:
13
USE_THUMB_MODE = YES
14
15
## Create ROM-Image (final)
16
RUN_MODE=ROM_RUN
17
## Create RAM-Image (debugging) 
18
##( not used: example does not fit in AT91SAM7S64 RAM )
19
#RUN_MODE=RAM_RUN
20
21
## Exception-Vector placement not used so far in M3-examples
22
## (placement settings ignored when using "RAM_RUN")
23
## - Exception vectors in ROM:
24
#VECTOR_LOCATION=VECTORS_IN_ROM
25
## - Exception vectors in RAM:
26
##VECTOR_LOCATION=VECTORS_IN_RAM
27
28
# Target file name (without extension).
29
TARGET = main
30
...

Mein AVR STK500 müßte das dann doch auch wie gewohnt übertragen
können (hoffe ich mal...), nach dem GCC das compiliert hat

Ich müßte anfangs nur einen Uart hinbekommen,
dann wag ich mich langsam an den ADC Interrupt
(anhand von der Luminary Beispielen..) Soweit der Plan.

Hab ich was übersehen?

Danke & Viele Grüße
Bernd

von Dirk (Gast)


Lesenswert?

>Ich versteh noch nicht ganz, wenn GCC den M3 unterstütz,
>wieso werden dann Programme wie FreeRTOS (?), LinkerScript benötigt.


Werden nicht benötigt.
FreeRTOS ist ein RTOS. Michael meinte sicherlich, daß es für ihn einfach 
war, dieses RTOS mit dem GCC auf dem CortexM3 zum Laufen zu bringen.
Auch ohne Linkerskripte kommt man aus, das ist allerdings umständlicher.

Zudem kann man die für die üblichen Hobby-Projekte (ala AVR) einfach 
halten.
Dann muss nur noch eins her für jeden Controller, den man nutzt und das 
war es dann. Das Handbuch dazu muss man jedenfalls nicht komplett lesen 
(und erst recht nicht komplett verstehen).
Hier im Forum wurden ja schon einfache für den Luminary M3 gepostet, 
einfach mal suchen.

von Bernd (Gast)


Lesenswert?

Hi Dirk,

super Dank Dir, ich werd's wagen :)

Viele Grüße

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.