Programdokumentation och flödesplaner.

Programdokumentation och flödesplaner.
Att programmera innebär i första hand att strukturera en uppgift. Som människa
har man ofta rätt bra koll på vad programmet ska göra, men när man blir tvungen
att förklara för en dator behövs en noggrann och klar beskrivning.
Modellen som utgår från tillståndsgrafen är bra i många sammanhang och det finns
professionella verktyg för detta.
C är ett sekventiellt programmeringsspråk, och då passar metoden med flödesplan
bättre. Den är lätt att översätta till programkod eftersom många av de symboler
som används ofta motsvaras av speciella konstruktioner i språket.
En bra flödesplan är tydlig för förståelsen av problemet och lätt att översätta till
program. Även om man programmerar i andra språk som Java, C++ osv. är en
flödesplan oersättlig när det just gäller att strukturera uppgiften.
Här är några av de symboler man brukar använda (de finns färdiga i Words
ritfunktioner):
Start
Slut
In/utmatning
Ja
Vägval
Bearbetning
Nej
Stefan Nyman
6 februari 2012
Exempel från laboration 9:
newPINA = PINA; // Läs in porten.
if ((newPINA & 0b10000000 == 0) && ((oldPINA & 0b10000000) != 0)){
//=================================================================
n = (n+1)%10; // Öka n med ett och behåll entalsdelen.
display(n); // Anropa utskriftsfunktionen.
//=================================================================
}
oldPINA = newPINA; // Kom ihåg till nästa gång.
Såhär kan avbrottsfunktionen se ut som flödesplan. Normalt börjar man förstås i
den andra änden: man skissar ner sina tankar i en flödesplan och ger sig sen på att
uttrycka det i programsatser.
2
Digitala system, Flödesplaner
6 februari 2012
Knappen uppe
Knappen
nedtryckt
Knappen
nedtryckt
Utför uppgiften
0
1
Knappen
uppe
Knappen
nere
Knappen uppe
Här är flödesplanen för uppgift 3 i laborationen ”Tillståndsmaskin”:
next_state=
uppe?
Ja
Ja
next_state=1
Count_and_display
Nej
Nej
Ja
next_state=
nere?
Knapp
nere?
Knapp
uppe?
Ja
next_state=0
Nej
Koden blir:
static unsigned char next_state;
switch(next_state){
case 0:
if(Key_down()==1){
next_state=1;
Count_and_display();
}
break;
case 1:
if(Key_down()==0){
next_state=0;
}
break;
}
3
Digitala system, Flödesplaner
6 februari 2012
Med hjälp av nyckelordet ”enum” kan man få koden att likna flödesplanen ännu
mer:
enum states {Knappen_uppe, Knappen_nere};
enum states next_state;
static unsigned char next_state;
switch(next_state){
case Knappen_uppe:
if(Key_down()){
next_state=Knappen_nere;
Count_and_display();
}
break;
case Knappen_nere:
if(Key_down()==0){
next_state=Knappen_uppe;
}
break;
}
En bra övning inför laborationen ”Tillståndsmaskin” är att rita flödesplanen för
uppgift 5.
Kalla förslagsvis tillstånden för
 Knappen_uppe
 Paus_500ms
 Repetera
Du kan behändigt använda dessa namn i koden om du gör följande definitioner i
din kod:
enum states {Knappen_uppe, Paus_500ms, Repetera};
enum states next_state;
När du lämnar in hela din dokumentation för de sista laborationerna i kursen
kommer flödesplaner att vara en obligatorisk del i materialet. Och detta är förstås
för din egen skull; i kursen Tekniska gränssnitt ska du återanvända stora delar av
koden du skriver här.
4
Digitala system, Flödesplaner
6 februari 2012