MicroController Register Manipulation (2 / 6 steg)
Steg 2: Att göra koden kortare det enkla sättet...
Låt oss börja med en enkel skiss som kontrollerar staten en av 4 knappar och band det värdet med en av 4 lysdioder. Trycker på någon knapp, de motsvarande LED(s) tänds.
Jag har tagit med pin-mappning för 5 olika styrelserna visas här, chipKIT Max32, DP32, Uno32, Uc32 och CMOD styrelser och Arduino UNO:
Nu, när jag först började skriva kod, det var alltid längsta koden jag kunde tänka på eftersom jag inte visste bättre. Jag kan tänka mig det hade sett ut ungefär så här:
/ * Detta en lång, pin-av-pin version
av kartläggning 4 växlar till 4 lysdioder * /
stift för Uno32/uC32: Max32: DP32: CMOD: UNO
int led_1 = 26. : 34: 5: 20: 4
int led_2 = 27. : 35: 6: 21: 5
int led_3 = 28; : 36: 7: 22: 6
int led_4 = 29. : 37: 8: 23: 7
int btn_1 = 30. : 30: 0: 35: 8
int btn_2 = 31; : 31: 1: 36: 9
int btn_3 = 32. : 32: 2:37:10
int btn_4 = 33. : 33: 3:38:11
void setup()
{
pinMode (led_1, produktionen);
pinMode (led_2, produktionen);
pinMode (led_3, produktionen);
pinMode (led_4, produktionen);
pinMode (btn_1, ingång);
pinMode (btn_2, ingång);
pinMode (btn_3, ingång);
pinMode (btn_4, ingång);
}
void loop()
{
om ((digitalRead(btn_1) == HIGH) & &
(digitalRead(btn_2) == låg) & &
(digitalRead(btn_3) == låg) & &
(digitalRead(btn_4) == Low))
{
digitalWrite (led_1, hög);
digitalWrite (led_2, låg);
digitalWrite (led_3, låg);
digitalWrite (led_4, låg);
}
annars om ((digitalRead(btn_1) == LOW) & &
(digitalRead(btn_2) == hög) & &
(digitalRead(btn_3) == låg) & &
(digitalRead(btn_4) == Low))
{
digitalWrite (led_1, låg);
digitalWrite (led_2, hög);
digitalWrite (led_3, låg);
digitalWrite (led_4, låg);
}
annars om ((digitalRead(btn_1) == LOW) & &
(digitalRead(btn_2) == låg) & &
(digitalRead(btn_3) == hög) & &
(digitalRead(btn_2) == Low))
{
digitalWrite (led_1, låg);
digitalWrite (led_2, låg);
digitalWrite (led_3, hög);
digitalWrite (led_4, låg);
}
annars om ((digitalRead(btn_1) == LOW) & &
(digitalRead(btn_2) == låg) & &
(digitalRead(btn_3) == låg) & &
(digitalRead(btn_4) == High))
{
digitalWrite (led_1, låg);
digitalWrite (led_2, låg);
digitalWrite (led_3, låg);
digitalWrite (led_4, hög);
}
annat
{
digitalWrite (led_1, låg);
digitalWrite (led_2, låg);
digitalWrite (led_3, låg);
digitalWrite (led_4, låg);
}
}
(Du kan använda detta med bara några få ändringar pin tilldelningarna. Kopiera och kommentar/avkommentera som behövs. Dessa stift valdes eftersom det kommer att göra det lättare att manipulera registren senare. Mer kod tillkommer senare för var och en av dessa styrelser.)
Uppifrån och ned, denna skiss är 73 rader (oräknat kommentarer), och med hjälp av MPIDE kommer att kräva 6664 byte minne för chipKIT Uno32 och 1402 byte för Arduino UNO.
Nu, låt oss titta på en modifierad version, denna gång med() loopar föratt göra de enformiga saker och vissa kapslade digitalRead() och digitalWrite() -kommandon att tilldela pin stater.
/ * Detta är en mer kortfattad version av
Mappa 4 växlar till 4 lysdioder * /
stift för Uno32/uC32
int ledde [] = {26,27,28,29}.
Max32: {34,35,36,37}.
DP32: {5,6,7,8}.
CMOD: {20,21,22,23}.
UNO: {4,5,6,7}.
int btn [] = {30,31,32,33}.
Max32: {30,31,32,33}.
DP32: {0,1,2,3}.
CMOD: {35,36,37,38}.
UNO: {8,9,10,11}.
void setup()
{
för (int jag = 0; jag < 4; i ++)
{
pinMode (ledde [i], utgång);
pinMode (btn [i], ingång);
}
}
void loop()
{
för (int jag = 0; jag < 4; i ++)
{
digitalWrite (ledde [i], digitalRead(btn[i]));
}
}
Denna skiss är märkbart kortare. I själva är verket mindre än en tredjedel på 20 linjer utan kommentarer. Det tar lite mindre plats i minnet (6324 byte för chipKIT, 1074 byte för Arduino), men den enda riktiga fördelen är att skissa tar färre linjer. Instruktionsuppsättning i minnet är ungefär densamma. Kompilatorn har fortfarande att söka efter och läsa in den pinMode(), digitalRead() och digitalWrite() -kommandon från biblioteksfiler som bakgrund. Dessa är förinställda i storlek, så om du använder dem ännu en gång konverterade monteringsanvisningarna måste läsas in i minnet chip.
Så även om vi förkortar koden, det är klart att det inte kan spara mycket utrymme på chip. Låt oss fixa det.