Anders Sjögren Lagringsklasser •en variabel i C har två attribut –type( int, float, char..... ) –lagringsklass( auto, extern, register, static ) •lagringsklassens.

Slides:



Advertisements
Liknande presentationer
INTRODUKTION TILL PROGRAMMERING
Advertisements

Array Skriv ett program som frågar följande: ”Hur många tal vill du mata in?” användaren matat in ett tal t.ex n. då frågar programmet n ggr följande.
void hittaMax(int tal[], int antal, int *pmax) { int i; ??=tal[0]; for(i=1;i??) ??=tal[i]; } int main() { int v[]={1,2,3,4,2}; int.
Datavetenskap för teknisk kemi 10p, moment 1
Programstruktur: C för enchipsdatorer
Introduktion till C för enchipsdatorer
Funktioner och programorganisation
De fundamentala datatyperna
#include void fun(char s[]) { int i=-1; while(s[++i]!=0) { if('a'
C-programmering ID120V William Sandqvist Länkad lista
Programmeringsteknik K och Media
Programmeringsteknik för K och Media
Föreläsning 4 Python: Definiering av egna funktioner Parametrar
Föreläsning 6 Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
Föreläsning 2 Primitiva datatyper Variabler och konstanter Tilldelning Inläsning Operatorer Villkorssatsen if Slingor: while och for.
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 6 ( ) INNEHÅLL: -Mera om tabeller.
Pekare och speciell programstruktur i inbyggda system
Repetition inför slutprovet
Ali Ghodsi Variabler En variabel är en sorts behållare som man kan placera data i Man måste ange typ och namn för alla variabler.
Pointers. int a=5; int f(int b) { a--; b++; return b; } int main() { int a=3; printf("%d,",f(a)); printf("%d",a); return 0; }
int res2=Math.max(tal1,tal2);
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: Trådprogrammering i Java - Avbrott (”interrupts”) - Metoden join() -
Deklarera en struct som kan användas för att representera en rät linje Använd den I main för att deklarera en variabel som du initierar så att den representerar.
William Sandqvist C:s minnesmodell.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 4 ( ) INNEHÅLL: -Logiska opertorer -Poster.
Problemlösning Veckodagsproblemet Gissa talet Siffersumman.
Anders Sjögren Mer om datatyper. Anders Sjögren const det finns ett elegantare sätt att skapa konstanter i C än sättet med makro som vi använt tidigare.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser -Att definiera egna klasser -Klassvariabler -Klassmetoder.
Modulär programutveckling
Anders Sjögren Pekare. Anders Sjögren Skapa ett program som byter plats på två heltal Pekare.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
William Sandqvist Databuffer Omvandlar mellan olika storlekar på dataobjekt Anpassar mellan olika dataöverföringshastigheter Databuffer.
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Anders Sjögren ANSI - standard ?. Anders Sjögren ANSI - standard ? Om man skriver ett bra C-program och kompilerar fram ”exe”-filen så vore det ju trevligt.
Anders Sjögren Bitfält exempel Nu kommer ett förbättrat program. Det är funktions- uppdelat och kan lägga till poster som lagras på fil.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 2 ( ) INNEHÅLL: -Variabler och datatyper -Tilldelning av variabler -Aritmetiska.
Problemlösningsmetodik
F4 - Funktioner & parametrar 1 Programmeringsteknik, 4p vt-00 Modularisering ”svarta lådor” Väl definierade arbetsuppgifter Enklare validering Enklare.
William Sandqvist C-programmering ID120V Stack och Kö William Sandqvist
Anders Sjögren Går det att simulera vår värld med 1:or och 0:or ?
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305
F. Drewes, Inst. f. datavetenskap1 Föreläsning 2: Variabler och datatyper Variabler Bindning Typkontroll Några viktiga datatyper.
Språket för inbyggda system 2
INTRODUKTION TILL PROGRAMMERING
Anders Sjögren Filer - långtidslagring. Anders Sjögren Filtyper i DOS talet ett ( intx=1; ) lagrat i en –textfil, (en sekvens av tecken ( bytes )) enligt.
F6 - Pekare 1 Programmeringsteknik, 4p vt-00 Pekare & adresser Alla variabler är knutna till en viss adress i minnet int i; adressen till denna fås med.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 9: Implementering av underprogram Aktiveringsposter Exekveringsstacken Implementera dynamisk räckvidd.
Anders Sjögren Deklarationsområde och funktioner.
Lennart Edblom & Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 2: Variabler och datatyper Variabler Bindning Typkontroll Några viktiga datatyper.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
F2 1 Programmeringsteknik, 4p vt-00 Kommentarer Allt mellan /* och */ Varje kommentar byts ut mot en blank av kompilatorn /* Exempel på uttryck, tilldelningsoperatorn.
Föreläsning 5 Objekt Klasser Konstruktorer Metoder Minnesbilder av objekt.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Gruppövning 0.
William Sandqvist Funktionsbibliotek När man utvecklat en funktion så långt att den är "färdigutvecklad" kan man lika gärna spara den på.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: -Exekveringstrådar.
Mer om operatorer logiska operatorer bit-operatorer adress-operatorn ”komma”-operatorn punkt - operatorn.
Anders Sjögren Data (i primärminnet) som en länkad lista datatypen för varje element i listan är en struktur, post ( struct )
1 Föreläsning 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Anders Sjögren Mer om datatyper. Anders Sjögren const det finns ett elegantare sätt att skapa konstanter i C än sättet med makro som vi använt tidigare.
Anders Sjögren Enkelt program med funktion /* two_func.c - a program that uses two functions in one file */ /* from Stephen Prata C Primer Plus ISBN
Anders Sjögren Operatorer. Anders Sjögren Operand(er)
Anders Sjögren Minnen, variabler, att lagra i primärminnet forts. Den här bilden känner ni igen sedan tidigare. Vi skall fortsätta att prata variabeltyper.
Språket för inbyggda system. C:s verktygslåda är välfylld! William Sandqvist
Anders Sjögren Modulär programutveckling. Anders Sjögren Ett programmeringsprojekt, flera personer utvecklar ett program Vi ska utveckla ett ränteberäkningsprogram.
Anders Sjögren Programmering i ANSI-C Ett första program för att se vart vi ska...
Mer om operatorer logiska operatorer bit-operatorer adress-operatorn ”komma”-operatorn punkt - operatorn.
Anders Sjögren Funktioner något in och något annat ut.
Presentationens avskrift:

Anders Sjögren Lagringsklasser •en variabel i C har två attribut –type( int, float, char..... ) –lagringsklass( auto, extern, register, static ) •lagringsklassens egenskaper medför var i datorn variabeln kan tänkas lagrad

Anders Sjögren Klocka CPU Tangentbord parallellinterface Video RAM Teckengenerator Videokretsar Diskkontroll Expansionsbuss Tilläggskort UART RS232 serieportar Primärminne RAM Bootstrap ROM, BIOS Adressbuss Databuss Kontrollbuss Parallell- port Vid programexekvering finns arbetsminne i CPU:n (register) samt i primärminnet

Anders Sjögren Datorns minne programexekvering } Heap Stack Programmets instruktionskod Programarea 0 data Disk Processor Primärminnet, bytes programkoden (maskinkod) hämtas från disk

Anders Sjögren Datorns minne programexekvering Heap Stack Programmets instruktionskod 0 data Primärminnet, bytes extern,static CPU med register auto en autovariabel kan hamna i ett register •auto - variabler (automatisk?) är alla ”de vanliga” variabler som man skapar t ex en funktions formella och interna variabler är automatiskt av lagringsklassen auto. •dessa minnen skapas på stacken eller möjligtvis i någon av CPU:s register. •eftersom de skapas på stacken och stacken växer resp minskar dynamiskt när funktioner anropas resp avslutas så medför detta att en auto-variabel bara existerar när funktionen ”är igång”.

Anders Sjögren Datorns minne programexekvering Heap Stack Programmets instruktionskod 0 data Primärminnet, bytes extern,static CPU med register auto en autovariabel kan hamna i ett register •auto - variabler (automatisk?) är alla ”de vanliga” variabler som man skapar t ex en funktions formella och interna variabler är automatiskt av lagringsklassen auto. •dessa minnen skapas på stacken eller möjligtvis i någon av CPU:s register. •eftersom de skapas på stacken och stacken växer resp minskar dynamiskt när funktioner anropas resp avslutas så medför detta att en auto-variabel bara existerar när funktionen ”är igång”.

Anders Sjögren Lagringsklassen auto #include #define RANTESATS 8.5 float NastaAr( float ); void TabellPaSkarmen( int, float ); int main ( void ) { floatkapital ; intantalAr; printf("Insatt kapital och antal år ?(--> )--> "); scanf("%f%d", &kapital, &antalAr); TabellPaSkarmen( antalAr, kapital ); return 0; } void TabellPaSkarmen( int antalAr, float kapital ) { int ar ; printf("\n År Saldo\n == =====\n"); for ( ar = 1; ar <= antalAr; ar++ ) { kapital = NastaAr( kapital ); printf("%3d%11.2f\n", ar,kapital>0 ? kapital:-kapital); } return; } float NastaAr( float x ) { if ( x > 0 ) x = x * ( 1 + RANTESATS/100 ); else x = x * 1/( 1 + RANTESATS/100 ); return x ; } funktionen main() definierad funktionen TabellPaSkarmen() definierad funktionerna TabellPaSkarm(), NastaAr() deklarerad funktionen NastaAr() definierad

Anders Sjögren Datorns minne lagringsklasser Heap Stack Programmets instruktionskod 0 data Primärminnet, bytes extern,static CPU med register auto •när en variabel är deklarerad, definierad utanför en funktion (dvs på den yttersta nivån) blir den, vare sig det står extern framför eller ej, av typen extern •detta innebär att minnes- utrymmet inte skapas på stacken eller heapen vilket gör att minnet finns permanent. Så länge som programmet exe- kverar så länge existerar minnet. •själva ordet extern behövs egentligen inte i ANSI-C, utan man använder det för att markera var en variabel tänks vara deklarerad resp definierad då flera källkodsfiler används.

Anders Sjögren Lagringsklassen extern (sidoeffekter) #include #define RANTESATS 8.5 void NastaAr( void ); void TabellPaSkarmen( int ); float kapital; int main ( void ) { intantalAr; printf("Insatt kapital och antal år ?(--> )--> "); scanf("%f%d", &kapital, &antalAr); TabellPaSkarmen( antalAr ); return 0; } void TabellPaSkarmen( int antalAr ){ int ar ; printf("\n År Saldo\n == =====\n"); for ( ar = 1; ar <= antalAr; ar++ ) { NastaAr(); printf("%3d%11.2f\n", ar,kapital>0 ? kapital:-kapital); } return; } void NastaAr( void ) { if ( kapital > 0 ) kapital = kapital * ( 1 + RANTESATS/100 ); else kapital = kapital * 1/( 1 + RANTESATS/100 ); return ; } •här är ränteprogrammet som innehåller en extern variabel kapital. •när man skapar stora program kan man dela upp källkoden i flera filer.

Anders Sjögren Lagringsklassen extern (sidoeffekter) #include #define RANTESATS 8.5 void NastaAr( void ); void TabellPaSkarmen( int ); float kapital; int main ( void ) { intantalAr; printf("Insatt kapital och antal år ?(--> )--> "); scanf("%f%d", &kapital, &antalAr); TabellPaSkarmen( antalAr ); return 0; } void TabellPaSkarmen( int antalAr ){ int ar ; printf("\n År Saldo\n == =====\n"); for ( ar = 1; ar <= antalAr; ar++ ) { NastaAr(); printf("%3d%11.2f\n", ar,kapital>0 ? kapital:-kapital); } return; } void NastaAr( void ) { if ( kapital > 0 ) kapital = kapital * ( 1 + RANTESATS/100 ); else kapital = kapital * 1/( 1 + RANTESATS/100 ); return ; } •här är ränteprogrammet som innehåller en extern variabel kapital. •när man skapar stora program kan man dela upp källkoden i flera filer. denna del stoppas i filen main.c denna del stoppas i filen funk.c

Anders Sjögren Lagringsklassen extern (sidoeffekter) #include #define RANTESATS 8.5 void NastaAr( void ); void TabellPaSkarmen( int ); float kapital; int main ( void ) { intantalAr; printf("Insatt kapital och antal år ?(--> )--> "); scanf("%f%d", &kapital, &antalAr); TabellPaSkarmen( antalAr ); return 0; } void TabellPaSkarmen( int antalAr ){ int ar ; printf("\n År Saldo\n == =====\n"); for ( ar = 1; ar <= antalAr; ar++ ) { NastaAr(); printf("%3d%11.2f\n", ar,kapital>0 ? kapital:-kapital); } return; } void NastaAr( void ) { if ( kapital > 0 ) kapital = kapital * ( 1 + RANTESATS/100 ); else kapital = kapital * 1/( 1 + RANTESATS/100 ); return ; } •för att få dessa filer att tillsammans bli det färdiga programmet så måste vi tala om detta i projektet ( projektfilen). • Då vet kompilator och länkare vad som skall ingå i den färdiga exekverbara filen. denna del stoppas i filen main.c denna del stoppas i filen funk.c

Anders Sjögren Lagringsklassen extern (sidoeffekter) enligt praxis betyder extern här ”de- finitionen finns i annan fil” inget extern framför kapital betyder att detta är definitionen av kapital definition av funtionerna finns i denna fil detta betyder deklaration av kapital, definition finns i annan fil projektet

Anders Sjögren Lagringsklassen extern (sidoeffekter) enligt praxis betyder extern här ”de- finitionen finns i annan fil” inget extern framför kapital betyder att detta är definitionen av kapital definition av funtionerna finns i denna fil detta betyder deklaration av kapital, definition finns i annan fil projektet •direktivet extern är m a o också tillämpbart på funktioner

Anders Sjögren Datorns minne lagringsklasser Heap Stack Programmets instruktionskod 0 data Primärminnet, bytes extern,static CPU med register auto •lagringsklassen register används för att försöka få angiven variabel att lagras i ett av CPU:ns snabba register. Detta gör programmet snabbare. •registerdirektivet är ett råd till kompilatorn att försöka lagra variabeln i ett register. Går inte detta får variabeln lagringsklassen auto istället. •variabeldefinitioner med lagringstyp register bör placeras nära den plats där de används

Anders Sjögren Lagringsklasser register •lagringsklassen register används för att försöka få angiven variabel att lagras i ett av CPU:ns snabba register. Detta gör programmet snabbare. •registerdirektivet är ett råd till kompilatorn att försöka lagra variabeln i ett register. Går inte detta får variabeln lagringsklassen auto istället. •variabeldefinitioner med lagringstyp register bör placeras nära den plats där de används #include #define DELAY L int main( void ){ register long i; while ( 1 ) { printf("A"); for ( i=1; i < DELAY ; i++ ) ; printf("\tn"); for ( i=1; i < DELAY ; i++ ) ; printf("\td"); for ( i=1; i < DELAY ; i++ ) ; printf("\te"); for ( i=1; i < DELAY ; i++ ) ; printf("\tr"); for ( i=1; i < DELAY ; i++ ) ; printf("\ts"); for ( i=1; i < DELAY ; i++ ) ; printf("\r \t \t \t \t \t \r"); for ( i=1; i < DELAY ; i++ ) ; } return 0; } REGISTER.EXEFOR_1.EXE fungerar om long int = 4 bytes och 32 bitars register

Anders Sjögren Datorns minne lagringsklasser Heap Stack Programmets instruktionskod 0 data Primärminnet, bytes extern,static CPU med register auto •lagringsklassen static kan användas inom som utom funktionsblock (block). •en variabel som definieras som static får minnesutrymme med minnesinnehåll som existerar under hela programmets exekvering. •en statisk variabel initieras bara en gång och detta sker när exekveringen startar •variabeln är bara känd inom ”sitt” block, funktion •om en variabel på den ”yttersta” nivån blir klassifierad som static betyder det att den inte kan göras känd utanför den egna källkodsfilen

Anders Sjögren Lagringsklassen static #include #define RANTESATS 8.5 float NastaAr( float ); void TabellPaSkarmen( int, float ); int main ( void ) { floatkapital ; intantalAr; printf("Insatt kapital och antal år ?(--> )--> "); scanf("%f%d", &kapital, &antalAr); TabellPaSkarmen( antalAr, kapital ); return 0; } void TabellPaSkarmen( int antalAr, float kapital ) { int ar ; printf("\n År Saldo\n == =====\n"); for ( ar = 1; ar <= antalAr; ar++ ) { kapital = NastaAr( kapital ); printf("%3d%11.2f\n", ar,kapital>0 ? kapital:-kapital); } return; } float NastaAr( float x ) { static char anropadggr = 0; printf("Funktionen NastaAr() anropad %d ggr\n", ++ anropadggr); if ( x > 0 ) x = x * ( 1 + RANTESATS/100 ); else x = x * 1/( 1 + RANTESATS/100 ); return x ; } funktionen main() definierad funktionen TabellPaSkarmen() definierad funktionerna TabellPaSkarm(), NastaAr() deklarerad funktionen NastaAr() definierad i funktionen NastaAr() är det definierad en variabel static char anropadggr som håller reda på hur många ggr som funtionen blir anropad

Anders Sjögren Lagringsklassen extern (sidoeffekter) projektet om man tillfogar static på någon funktion eller variabel på den yttersta nivån innebär detta att funktionen, variabeln endast blir känd i den filen static

Anders Sjögren Slut