Atmel Studio External Tool MCU Parameter (z.B. für avrdude)

#4716115
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:
1
C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avrdude.exe
Arguments:
1
-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.
1
#define AVRDUDE_PART_ID m328p

Danke & Grüße
Ladde
#4716380
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
#4716549
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:
1
<?xml version="1.0" encoding="utf-8"?>
2
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0">
3
  <PropertyGroup>
4
    <SchemaVersion>2.0</SchemaVersion>
5
    <ProjectVersion>7.0</ProjectVersion>
6
    <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>
7
    <ProjectGuid>{ba5004a8-a1e2-4bfb-bc9a-36e6b2e169e8}</ProjectGuid>
8
    <avrdevice>ATtiny441</avrdevice>
9
    ...
Die Datei geht natürlich noch ne ganze Ecke weiter, aber das 
interessante steht in <avrdevice>
Moderator Persönliche Seite #4716576
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.
#4716695
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:
1
@echo off
2
setlocal enableextensions enabledelayedexpansion
3
for /f  "tokens=2-4* delims=<> usebackq" %%a in ("%~1") do (
4
  IF "%%a"=="avrdevice" IF "%%c"=="/avrdevice" set mcu=%%b )
5
set avrdude_args=
6
:loop
7
shift
8
if ""%1""=="""" goto after_loop
9
set avrdude_args=%avrdude_args% %1
10
goto loop
11
:after_loop
12
"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:
1
"$(ProjectDir)$(ProjectFileName)" -v -c usbtiny -U flash:w:"$(TargetPath)":e
EEPROM schreiben:
1
"$(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
Gast #4716713
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 .... ?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren