AVRSH: Ett kommando tolken skal för Arduino/AVR. (5 / 6 steg)
Steg 5: Anpassa skalet
Om du vill lägga till i din egen anpassade kommandon, gör följande:
1. lägga till ett kommando i listan parse
Kommando tolken kommer att tolka kommandoraden och ger du kommandot och några argument separat. Argument som skickas som pekare till pekare eller en mängd tips, hur du vill arbeta med dem. Detta finns i shell.cpp. Öppna shell.cpp och hitta metoden ExecCmd i klassen AVRShell.
Du kanske vill lägga till kommandot programminne. Om du gör, lägga till kommandot i progmem.h och progmem.cpp. Du kan lägga till kommandot programminne direkt med hjälp av makrot PSTR(), men du kommer att generera en annan varning av den typ som tidigare nämnts. Återigen, detta är en känd bugg arbetar med C++, men du kan komma runt detta genom att lägga till kommandot direkt i progmem.* files, som jag har gjort. Om du inte lägga till din SRAM användning, kan du lägga till kommandot som jag har illustrerat med kommandot "klocka".
Säga att du ville lägga till ett nytt kommando som kallas "newcmd." Gå till AVRShell::ExecCmd och hitta en lämplig plats att infoga följande kod:
annars om (! strcmp(c,"newcmd")) cmdNewCmd(args);
Detta kommer att lägga till ditt kommando och anropar metoden cmdNewCmd som du ska skriva i nästa steg.
2. Skriv koden anpassat kommando
I samma fil, lägga till din anpassade kommandot kod. Detta är metoden definitionen. Du kommer fortfarande lägga till förklaringen till shell.h. Rättvis tillägga det att andra kommandon. I föregående exempel kan koden se ut ungefär så här:
voidAVRShell::cmdNewCmd(char ** args) {sprintf_P (buff, PSTR ("ditt kommando är % s\r\n",args[0]); WriteRAM(buff);}
Det finns flera saker här. Första är "buff" en 40-tecken array buffert som anges i koden för din användning. Vi använder programmet minne version av sprintf eftersom vi passerar det en PSTR. Du kan använda den vanliga versionen om du vill, men se till att du inte klarar formatet i en PSTR. Dessutom är argumenten i arrayen args. Om du skrivit "newcmd arg1 arg2" kan du få på dessa argument med args [0] och args [1] nedsänkt text. Du kan skicka Max MAX_ARGS argument, som definieras i koden. Känn dig fri att ändra det värdet när du kompilerar om om du behöver många fler argument som ska passeras på en gång.
WriteLine och WriteRAM är globala funktioner som returnerar den UART metoder med samma namn. 2. argumentet att denna funktion är underförstått. Om du klarar ingenting, skrivs kommandotolken efteråt. Om yo passera en 0 som 2: a argument, en snabb skrivs inte. Detta är användbart när du vill skriva flera separata strängar att produktionen innan kommandotolken returneras till användaren.
3. har skalet köra kommandokoden
Du har redan berättat shell testamentsexekutor att utföra metoden cmdNewCmd när du ställer in det nya kommandot, men lägga till filen shell.h till har den förstås av gränssnittsobjekt. Bara lägga till det under det senaste kommandot eller framför det första kommandot eller någonstans där inne.
Och det är det. Kompilera och ladda upp firmware till din Arduino och det nya kommandot är tillgängligt från skalet i Kommandotolken.