mikrocontroller.net

Forum: Compiler & IDEs Atmel Studio External Tool MCU Parameter (z.B. für avrdude)


Autor: L. K. (ladde)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

gibt es eine Möglichkeit, in Atmel Studio 7 einem externen Tool den 
verwendeten uC als Parameter zu übergeben?

Ich benutze einen USBTiny-Adapter mit avrdude zum Flashen und habe 
diesen als "External Tool" im Atmel Studio eingebunden:
Command:
C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avrdude.exe
Arguments:
-v -c usbtiny -p t841 -U flash:w:"$(TargetPath)":e

Nun muss ich jedes Mal, wenn ich einen anderen uC verwende den Befehl 
ändern und würde stattdessen gerne den uC, der in den 
Projekteinstellungen vorgegeben ist automatisch als Parameter an avrdude 
übergeben.
Oder (falls das nicht geht) einen Wert im Quelltext definierten Wert, 
z.B.
#define AVRDUDE_PART_ID m328p

Danke & Grüße
Ladde

: Bearbeitet durch User
Autor: L. K. (ladde)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine (nicht ganz zufriedenstellende) Möglichkeit habe ich inzwischen 
gefunden:
$(CurText) enthält aktuell im Editor markierten Text.
Ist zwar nicht perfekt (immer erst im Quelltext den Controller 
markieren), aber schonmal besser als für jeden ein eigenes externes Tool 
zu definieren bzw. die Definition zu ändern.

Falls jemand ne Möglichkeit kennt, auf die Projekteigenschaften oder ein 
define o.ä. zuzugreifen bin ich weiterhin sehr interessiert :)

PS: Die Info zu $(CurText) sowie weitere Parameter gibts hier:
https://msdn.microsoft.com/en-us/library/76712d27.aspx

: Bearbeitet durch User
Autor: Jörg W. (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Keine Ahnung über diesen Studio-Kram, aber nur als Hinweis: du musst
natürlich nicht zwingend die Kurzform (t841) benutzen, es darf auch
der lange Name (ATtiny841) benutzt werden.  Vielleicht findest du ja
dafür eher einen Weg, den sollte das Studio ja zumindest grundlegend
bereits kennen.

Autor: L. K. (ladde)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für den Hinweis. Hatte ich zwar auch schon gemerkt, aber komme 
gerade auf eine neue Idee :)

Wenn Atmel Studio so sparsam mit den Parametern ist, könnte man 
natürlich ein Skript schreiben, dass den uC-Typ aus der Projekt-Datei 
ausliest (xml) und dann entsprechend avrdude aufruft.

Bin allerdings nicht besonders fit in Skript-Sprachen. Könnte man das 
(unter Windows) mit ner .cmd-Datei lösen?
Hier mal ein beispielhafter Ausschnitt aus einer .cproj-Datei:
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0">
  <PropertyGroup>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectVersion>7.0</ProjectVersion>
    <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>
    <ProjectGuid>{ba5004a8-a1e2-4bfb-bc9a-36e6b2e169e8}</ProjectGuid>
    <avrdevice>ATtiny441</avrdevice>
    ...
Die Datei geht natürlich noch ne ganze Ecke weiter, aber das 
interessante steht in <avrdevice>

Autor: Jörg W. (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du einen XSL-Transformator mit an Bord hast, ist es relativ
einfach, sowas zu extrahieren.  Mit Windows-Boardmitteln kenne ich
mich nicht so aus.  cmd.exe ist ja nicht so übertrieben mächtig.
Manche Leute scheinen auf die Windows Power Shell zu schwören, keine
Ahnung, was die alles kann.

Wenn eine Scriptsprache wie Python für dich in Frage kommt, sollte es
auch nicht so schwierig sein, das XML auseinanderzunehmen.

Autor: L. K. (ladde)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm, XSL Transformator höre ich ehrlich gesagt zum ersten Mal :)

Windows hat for. Damit habe ich jetzt nach reichlich trial & error ein 
batch-Skript zusammengebastelt:
@echo off
setlocal enableextensions enabledelayedexpansion
for /f  "tokens=2-4* delims=<> usebackq" %%a in ("%~1") do (
  IF "%%a"=="avrdevice" IF "%%c"=="/avrdevice" set mcu=%%b )
set avrdude_args=
:loop
shift
if ""%1""=="""" goto after_loop
set avrdude_args=%avrdude_args% %1
goto loop
:after_loop
"C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avrdude.exe" -p %mcu% %avrdude_args%
Das Skript erwartet als erstes Argument den Dateinamen der Projektdatei 
und reicht alle weiteren Parameter direkt an avrdude weiter.
Funktioniert wunderbar, allerdings findet keinerlei Fehlerbehandlung 
statt (da verlasse ich mich der Einfachheit halber darauf, dass avrdude 
seine Parameter prüft).

Im Studio habe ich jetzt folgende Argumente für das externe Tool:
Flash schreiben:
"$(ProjectDir)$(ProjectFileName)" -v -c usbtiny -U flash:w:"$(TargetPath)":e
EEPROM schreiben:
"$(ProjectDir)$(ProjectFileName)" -v -c usbtiny -U eeprom:w:"$(TargetDir)$(TargetName).eep":i

Vielleicht hilft's ja dem einen oder anderen.

Wenn ich allerdings überlege, wie viel Zeit ich jetzt damit verbracht 
habe, muss ich noch ne ganze Menge Controller flashen, bevor sich der 
(zeitliche) Aufwand rentiert hat :P

Autor: Arduinoquäler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
L. K. schrieb:
> Wenn ich allerdings überlege, wie viel Zeit ich jetzt damit verbracht
> habe, muss ich noch ne ganze Menge Controller flashen, bevor sich der
> (zeitliche) Aufwand rentiert hat

Naja, soviele verschiedene Controller hast du sicher nicht, da
könnte man ja den AvrDude auch mehrmals (für jeden Controller
einmal) als Tool eintragen .... ?

Autor: Jörg W. (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
L. K. schrieb:
> Windows hat for.

Gut, so viel cmd.exe habe ich selbst nicht in petto, dafür benutze
ich es zu wenig.

Schön, dass du eine Lösung damit finden konntest.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.