Forum: Compiler & IDEs Arduino Due in plain C


von Detlef _. (detlef_a)


Lesenswert?

Liebe kundige ARM freaks,

ich spiele bißchen mit nem Arduino Due. Ich programmiere ihn in C mit 
Atmel Studio 6.2 . Das Flashen besorgt die Arduino Umgebung in der Form 
wie das hier

http://codetron.net/arduino-due-in-atmel-studio-using-c-led-blinking/

dargestellt ist.

Ich kann das Programm übersetzen und produziere ein .bin file. Das kann 
ich mit dem 'bossac' tool (???) auch in den Due transferieren, es gibt 
keine Klagen.

Allein: es passiert nix, nix blinkt, kein Schalten auf dem pin.

Ich weiß, es ist was ganz blödes, aber was?

THX
Cheers
Detlef

von Kaj (Gast)


Lesenswert?

Detlef _a schrieb:
> ich spiele bißchen mit nem Arduino Due. Ich programmiere ihn in C mit
> Atmel Studio 6.2 .
Mach ich auch grad :)

>Das Flashen besorgt die Arduino Umgebung in der Form
> wie das hier
Kleiner Tip: Besorg dir einen Programmer (Atmel-ICE), dann bist du auch 
den Umweg über Arduino/bossac los, und kannst auch gleich vernünftig 
debuggen, Fuses lesen/setzen, etc.
Ja, richtig, das Teil kostet gute 112€, ist viel Geld, stimmt, aber 
lohnt sich, glaub mir. 
http://www.reichelt.de/AT-ATMEL-ICE/3/index.html?&ACTION=3&LA=446&ARTICLE=143878&artnr=AT+ATMEL-ICE&SEARCH=atmel-ice

Detlef _a schrieb:
> Allein: es passiert nix, nix blinkt, kein Schalten auf dem pin.
> Ich weiß, es ist was ganz blödes, aber was?
Zeig doch mal n bisschen Code, um auschließen zu können, das es am Code 
liegt.

Ich programmiere meinen Due über Atmel Studio und den Atmel-ICE und habe 
das "Problem", dass ich etwas flashe, die Änderungen aber nicht 
ankommen, bzw. Breakpoints nicht anschlagen. Dann muss ich den Due 
einmal vom PC trennen, wieder verbinden, dann klappts in der Regel auch.
Deswegen hab ich am Anfang von meinem Programm gleich einen Breakpoint 
sitzen und flashe immer über "start debugging", wenn der Breakpoint 
nicht einsetzt weiß ich, dass das ganze nicht funktioniert hat (auch 
wenn Atmel Studio nicht mekert!), und den Due trennen muss.
Dein "es passiert nichts, aber die Arduino IDE/bossac mekern nicht", 
hört sich erstmal so an, als ob es genau das wäre.

Über welche USB-Buchse hast du den Due mit deinem PC verbunden?

Und noch zwei kleine Tips, damit du nicht auch in die Probleme rennst, 
sowie ich:
Du musst den Watch_Dog ausschalten, sonst resettet sich der Due alle 16 
- 18 sekunden. Wenn du das Arduinozeug benutzt, machen die Arduino-Libs 
das für dich.
Atmel setzt über die LinkerScript die max. Stack-/Heapsize. Das musst du 
ggf. anpassen. Die Stacksize wird von Atmel auf 1024Byte und die 
Heapsize auf 512Byte gesetzt. Warum ist das wichtig? Nun, wenn du z.B. 
ein lokales Array anlegst, in etwa so:
1
uint32_t my_array[300];
dann braucht das array 4 x 300 Byte, also 1200 Byte. Da das mehr ist, 
als dein Stack groß ist, läuft der Due in einen Default-Handler für 
ungenutze Interrupts.
Die Scripte findest du im Sulotion-Explorer im Ordner LinkerScripts. Ich 
hab meine Stacksize jetzt erstmal auf 0x9000 und meine Heapsize auf 
0x2000 gesetzt, damit hab ich erstmal keinen Ärger^^

Grüße

von Detlef _. (detlef_a)


Lesenswert?

Yo, danke. Ich benutze die usb buchse die naeher am. Power stecker ist, 
programming irgendwas heisst die. Ich dachte, es sei einfach das ding 
ueber usb zu bespassen aber dann werde ich mir nen porogrammer besorgen. 
Der sourcecode steht unter cem geposteten link, der initialisiert. Und 
toggelt zwei pins. Danke fuer die tips mit watchdog stack heap, kuck ich 
drauf.

Ich hatte erwartet, dass das besser flutscht, dass es vllt. Nen. 
Blinkbeispiel in C unter Atmel studio gibt, hab aber nix gefunden. Und 
das studio ist auch schon paarmal abgeraucht, scheint sich bei atmel 
nicht soviel getan zu haben.

Wenns so holprig weitergeht mach ich wieder makefile mit gcc, hat man 
kein unterstuetzung aber geht ohne murren und knurren.

Cheers
Detlef

von Kaj (Gast)


Lesenswert?

Detlef _a schrieb:
> Ich dachte, es sei einfach das ding
> ueber usb zu bespassen
Ist es, solange man die Arduino-Libs und IDE nutzt. :-/ Da passiert wohl 
noch n bisschen mehr magic im hintergrund, so wie beim Watch_Dog.

Detlef _a schrieb:
> Und das studio ist auch schon paarmal abgeraucht
Hm, das Problem hab ich nicht. Bei mir laeufts gut, auf 2 Rechnern, 
jeweils Win7, 64bit.

Wenn du das Geld fuer den Programmer sparen willst, und nicht zwingend 
auf das Arduino-Board/Atmel Studio angewiesen bist, kann ich ein 
STM32F4-Discovery-Board empfehlen. Da ist der Programmer gleich mit auf 
dem Board drauf, und das ganze Teil kostet nur um die 16 Euronen und hat 
auch nochmal mehr power als der Due.
https://hbe-shop.de/Art-2009276-STMICROELECTRONICS-STM32F4DISCOVERY-DISCOVERY-KIT-STM32F407-USB-OTG

von Edgar M. (edgar)


Angehängte Dateien:

Lesenswert?

Hallo Detlef,
ich benutze ebenfalls die Software Atmel Studio 6.2 allerdings mit dem 
Visual Micro Tool for Arduino 1.5.x Darin enthalten ist ein Debugger, 
der einige Zeit kostenlos arbeitet. Vielleicht hilft der dir bei der 
Fehlersuche. Ich füge auch eine pdf-Datei an, in der das Faraday’sche 
Induktionsgesetzt mit dem DUE experimentell überprüft wird. Der DUE kann 
mehr als nur LED’s blinken lassen.
Demnächst soll der Arduino TRE herauskommen – noch schneller und 
Linux-tauglich. Es bleibt spannend.
MfG: Edgar Marx

von Bernd K. (prof7bit)


Lesenswert?

Kaj schrieb:
> STM32F4-Discovery-Board empfehlen. Da ist der Programmer gleich mit auf
> dem Board drauf

Beim seinem Arduino den er jetzt hat ist der Programmer auch bereits auf 
dem board (und zwar in Form eines Bootloaders), also hier will er gar 
nicht mit einem ISP Programmer drangehen und an den Fuses will er auch 
tunlichst nicht herumschrauben, es sei denn er will seinen Arduino 
dauerhaft umfunktionieren.

Wenn Du Dich mal kurz auf seine Fragestellung konzentrierst anstatt ihm 
irgendein komplett anderes System anzupreisen das er momentan gar nicht 
haben will (er will ja sein existierendes Arduino board zum Laufen 
bekommen und es gibt nicht den geringsten Grund warum er das nicht tun 
wollen sollte) dann dann siehst Du daß er das Kompilat offensichtlich 
bereits ohne Probleme in den Controller schreiben kann, es funktioniert 
dort nur nicht. Er hat also gar kein Problem mit einem nicht vorhandenen 
Programmer, den braucht er nämlich gar nicht bei Devices wie seinem 
Arduino die mit Bootloader betrieben werden.

Das Problem scheint mir eher mit seinem C code zusammenzuhängen.

@Detlef: Poste man Deinen Code.

: Bearbeitet durch User
von Kaj (Gast)


Lesenswert?

Bernd K. schrieb:
> eim seinem Arduino den er jetzt hat ist der Programmer auch bereits auf
> dem board (und zwar in Form eines Bootloaders)
Ja... und mit dem Bootloader kann man wie genau debuggen? Und ich meine 
richtig debuggen, so mit Ablaufanhalten und in alle Register gucken 
und so... nicht so ein sinnloses "ich lass mir mal ein paar werte über 
den uart ausgeben"-geschwurbel.

Dieses hier:
Edgar Marx schrieb:
> Visual Micro Tool for Arduino 1.5.x Darin enthalten ist ein Debugger,
> der einige Zeit kostenlos arbeitet.
Ist ein netter hinweis, mit dem man anfangen kann, aber bei mir 
zumindestens an diesen Punkten wieder sauer aufstößt:
(von: http://www.visualmicro.com/page/Debugging-for-Arduino.aspx)
1
Hot Tip 1:
2
The debugger uses Serial by default. If your sketch code also
3
uses serial then you must ensure that the "Micro Debug>LocalSpeed" and
4
"Micro Debug>RemoteSpeed" project properties are set to the correct value
5
(eg: 9600 baud). The default if you do not set the speed is 115k.
6
7
Hot Tip 4:
8
The debugger is a software debugger this means that any
9
changes to break point configuration requires the sketch to be
10
re-compiled and uploaded. To entirely clear the debugger from the
11
Arduino you must re-compile and upload in Release mode (or click
12
Debug>Start without debugging)
Ok, erstens klaut mir das Ding wieder einen seriellen Port vom Arduino, 
oder ich muss mir irgendwie was hin basteln. Dann ist es nur ein 
Software-Debugger...
Ansonsten ein guter hinweis, war mir nicht bekannt das Tool.

Bernd K. schrieb:
> also hier will er gar
> nicht mit einem ISP Programmer drangehen
1. Weißt du das überhaupt nicht, und 2. wen interessiert denn ISP? ISP 
unterstützt debugging nicht und ist damit völlig uninteressant.

Bernd K. schrieb:
> und an den Fuses will er auch
> tunlichst nicht herumschrauben, es sei denn er will seinen Arduino
> dauerhaft umfunktionieren.
z.B. Brown-Out seinen Anforderungen anpassen oder andere Einstellungen. 
Aber gut das du dem TO vorschreibst was er zu wollen hat
Bernd K. schrieb:
> und an den Fuses will er auch
> tunlichst nicht herumschrauben

Bernd K. schrieb:
> es funktioniert dort nur nicht.
Ja, und um das zu untersuchen hilft am besten ein richtiger Debugger.

Bernd K. schrieb:
> Wenn Du Dich mal kurz auf seine Fragestellung konzentrierst anstatt ihm
> irgendein komplett anderes System anzupreisen
Ich Preise nichts an, ich empfehle Dinge, aus eigener erfahrung heraus, 
weil ich den ganzen misst nämlich gerade selber mache! Und bei 
Fehlersuche hilft der Bootloader exakt gar nicht. Nicht ein bisschen.

Das STM32F4 Board habe ich angemerkt weil es schon nur 1/3 von dem Due 
kostet, und den Programmer/Debugger, für den Atmel auch nochmal ~110Euro 
haben möschte, auch gleich noch mit drin hat. Gleichzeitig sind auch 
noch alle Pins rausgeführt, mehr speicher, mehr rechenleistung, 
blabla... ebenfalls findet man zum STM32 um ein vielfaches mehr 
Code-Beispiele als zum SAM3X.
Kostentechisch also nur 15Euro gegen +150Euro. Ob da nun ein Cortex-M3 
oder ein Cortex-M4 drauf ist, ob da nun Atmel oder ST draufsteht, ist 
völlig egal.  Warum darf ich nicht auf eine Alternative hinweisen?

Und ein freundliches:
Kaj schrieb:
> Wenn du das Geld fuer den Programmer sparen willst, und nicht zwingend
> auf das Arduino-Board/Atmel Studio angewiesen bist, kann ich ein
> STM32F4-Discovery-Board empfehlen. Da ist der Programmer gleich mit auf
> dem Board drauf, und das ganze Teil kostet nur um die 16 Euronen und hat
> auch nochmal mehr power als der Due.
als "anpreisen" hinzustellen, finde ich schon hart grenzwertig.

Bernd K. schrieb:
> daß er das Kompilat offensichtlich
> bereits ohne Probleme in den Controller schreiben kann, es funktioniert
> dort nur nicht.
Offenbar ist das ja wohl nicht so problemlos. Denn auch ich habe 
Probleme, wo kein Tool mekert, es aber trotzdem nicht auf anhieb 
Funktioniert. Und ja, mein Code funktioniert wunderbar, nur wird er 
nicht immer übernommen! Das sind zwei verschiedene Sachverhalte.

Ich bin sehr wohl auf die Fragestellung eingegangen, was dir aber wohl 
entgangen ist!
Kaj schrieb:
> Ich programmiere meinen Due über Atmel Studio und den Atmel-ICE und habe
> das "Problem", dass ich etwas flashe, die Änderungen aber nicht
> ankommen, bzw. Breakpoints nicht anschlagen. Dann muss ich den Due
> einmal vom PC trennen, wieder verbinden, dann klappts in der Regel auch.

Oder um es für dich zu verdeutlichen:
Ich flashe etwas,keine klagen von Atmel Studio oder der Arduino 
IDE/bossac, und es passiert nichts. Ist so ziemlich genau das selbe 
Problem wie:
Detlef _a schrieb:
> Ich kann das Programm übersetzen und produziere ein .bin file. Das kann
> ich mit dem 'bossac' tool (???) auch in den Due transferieren, es gibt
> keine Klagen.
>
> Allein: es passiert nix, nix blinkt, kein Schalten auf dem pin.
Due einmal abziehen, wieder ran stöpseln, nochmal flashen, alles 
funktioniert bei mir.
Ich hab Detlef erläutert wie ich es mache, und wie es bei mir 
funktioniert. Er hat sich dazu noch nicht weiter geäußert.
So, wo bin ich jetzt nicht auf seine Frage eingegangen?

Ja, richtig, mein vorgehen ist keine dauerhafte Lösung. Trotzdem hab ich 
damit schon mehr hilfestellung gegeben als du und auch noch eine 
alternative zu dem völlig überteuertem Arduino geliefert. Ebenso hab ich 
ihn auf stolpersteine hingewiesen.
Kaj schrieb:
> Und noch zwei kleine Tips, damit du nicht auch in die Probleme rennst,
> sowie ich:
> Du musst den Watch_Dog ausschalten, sonst resettet sich der Due alle 16
> - 18 sekunden. Wenn du das Arduinozeug benutzt, machen die Arduino-Libs
> das für dich.
> Atmel setzt über die LinkerScript die max. Stack-/Heapsize. Das musst du
> ggf. anpassen. Die Stacksize wird von Atmel auf 1024Byte und die
> Heapsize auf 512Byte gesetzt.

Bernd K. schrieb:
> Das Problem scheint mir eher mit seinem C code zusammenzuhängen.
>
> @Detlef: Poste man Deinen Code.

Kaj schrieb:
> Detlef _a schrieb:
>> Allein: es passiert nix, nix blinkt, kein Schalten auf dem pin.
>> Ich weiß, es ist was ganz blödes, aber was?
> Zeig doch mal n bisschen Code, um auschließen zu können, das es am Code
> liegt.
Da ich das Problem auch mit einer leeren while(1)-schleife als programm 
nachvollziehen kann, wird das Arduino-Zeug da wieder irgendwelche 
Arduino-Magic (wie beim Watch_Dog) machen, muss man nur finden.

Bernd K. schrieb:
> Er hat also gar kein Problem mit einem nicht vorhandenen
> Programmer
Wo hab ich das behauptet?

Bernd K. schrieb:
> den braucht er nämlich gar nicht bei Devices wie seinem
> Arduino die mit Bootloader betrieben werden.
Richtig, zum Betreiben brauch man den Programmer nicht, zum flashen 
auch nicht zwangsläufig, aber spätestens beim Debuggen wirds ohne 
Hardware-Debugger dann doch interessant...

Ja, richtig, geht auch alles ohne. Man kann wunderbar mittels uart 
debuggen. Ist nur halt immer die Frage nach Zeit/Kosten-Aufwand.

Also, nochmal:
Wo habe ich nicht versucht zu helfen?
Und wo ist deine Hilfe?

von Eric B. (beric)


Lesenswert?

Kaj schrieb:
> Bernd K. schrieb:
>> es funktioniert dort nur nicht.
> Ja, und um das zu untersuchen hilft am besten ein richtiger Debugger.

Genau. Ohne Lauterbach geht nix  o_O

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.