Stap 5: Aanpassen van de Shell
Als u wilt toevoegen in uw eigen aangepaste opdrachten, door het volgende te doen:
1. uw opdracht toevoegen aan de lijst parse
De opdracht parser zal ontleden van de opdrachtregel en geven u de opdracht en eventuele argumenten afzonderlijk. De argumenten worden doorgegeven als aanwijzers pointers, of een serie van wijzers, hoe u willen werken met hen. Dit komt voor in shell.cpp. Open shell.cpp en vinden de ExecCmd-methode van de klasse AVRShell.
Kunt u desgewenst de opdracht toevoegen aan programmageheugen. Als u dit doet, wordt de opdracht toevoegen in progmem.h en progmem.cpp. U kunt de opdracht toevoegen aan programmageheugen direct met behulp van de PSTR()-macro, maar genereert u nog een waarschuwing van het type eerder vermeld. Nogmaals, dit is een bekende bug werken met C++, maar u kunt krijgen rond dit door toevoeging van de opdracht rechtstreeks in de progmem.*-bestanden, zoals ik heb gedaan. Als je het niet erg toe te voegen aan uw SRAM gebruik, kunt u de opdracht zoals ik hebben geïllustreerd met het commando "klok".
Zeggen dat u willen toevoegen een nieuw commando genaamd "newcmd." Ga naar AVRShell::ExecCmd en vind een geschikte plaats de volgende code in te voegen:
else if (!strcmp(c,"newcmd")) cmdNewCmd(args);
Dit zal uw opdracht toevoegen en roept u de methode van de cmdNewCmd die u in de volgende stap zal schrijven.
2. Schrijf uw aangepaste opdrachtcode
In hetzelfde bestand, voeg uw aangepaste opdrachtcode. Dit is de definitie van de methode. U zal nog steeds wil de verklaring shell.h. Gewoon toevoegen aan de andere opdrachten. In het vorige voorbeeld, de code kan als volgt uitzien:
voidAVRShell::cmdNewCmd(char ** args){ sprintf_P(buff,PSTR("Your command is %s\r\n",args[0]); WriteRAM(buff);}
Er zijn verschillende dingen hier. Ten eerste, "buff" is een 40-karakter array buffer waarin de code voor uw gebruik. Wij gebruiken het programma geheugen versie van sprintf aangezien wij bent het passeren van een PSTR. U kunt gebruiken als je wilt de normale versie, maar ervoor zorgt dat u don't het formaat pass in een PSTR. Ook zijn de argumenten in de array args. Als u hebt getypt "newcmd arg1 arg2" kunt u op deze argumenten met de args [0] en subscript args [1]. U kunt een maximum van MAX_ARGS argumenten, doorgeven, zoals gedefinieerd in de code. Voel je vrij om wijzigt u die waarde wanneer u hercompileren als u veel meer argumenten moet moeten worden doorgegeven in een keer.
De WriteLine en WriteRAM zijn globale functies die van de UART methoden met dezelfde naam terugkeren. Het 2e argument voor deze functie is impliciet. Als u niets doorgeeft, zal een MS-DOS-prompt daarna worden geschreven. Als yo doorgeven een 0 als de 2e argument, een prompt niet zal worden geschreven. Dit is handig wanneer u schrijven verschillende afzonderlijke tekenreeksen om uit te voeren wilt voordat de MS-DOS-prompt aan de gebruiker wordt geretourneerd.
3. hebben de shell van de opdrachtcode uitvoeren
Je hebt al verteld dat de executeur van de shell voor het uitvoeren van de methode cmdNewCmd wanneer u de nieuwe opdracht setup, maar toe te voegen aan het bestand shell.h om het door de Shellobject begrepen te hebben. Gewoon toevoegen onder de laatste opdracht of voor de eerste opdracht, of ergens daar.
En thats it. Compileren en uploaden de firmware naar uw Arduino en uw nieuwe opdracht is beschikbaar vanuit de shell een opdrachtprompt.