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
© Copyright 2024