C för enchipsdatorer: Programstruktur och Kompileringsprocess

Slides:



Advertisements
Liknande presentationer
Föreläsning 9 Programmeringsteknik och Matlab 2D1312/2D1305
Advertisements

Formulär Tänkte nu gå igenom vad ett formulär är och hur man kan skapa dem i Access.
Interface.  Interface är en datatyp och har alltså egen syntax och en hel del egna regler för vad arv från interface innebär.  Interface är renodlad.
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.
E-post juni 2013.
Anders Sjögren Lagringsklasser •en variabel i C har två attribut –type( int, float, char..... ) –lagringsklass( auto, extern, register, static ) •lagringsklassens.
Programstruktur: C för enchipsdatorer
Introduktion till C för enchipsdatorer
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 3 ( ) Innehåll: -Namngivna rörledningar -Signaler -Signalhantering.
Funktioner och programorganisation
2D1311 Programmeringsteknik med PBL
De fundamentala datatyperna
Persondatorer Datorns internminne (Kapitel 6)
Tentamensdags och lab 3…. Större program delas normalt upp i flera filer/moduler vilket har flera fördelar:  Programmets logiska struktur när man klumpar.
Metoder i java Det finns två typer av metoder i java
C-programmering ID120V William Sandqvist Länkad lista
Polymorfism.
Programmeringsteknik K och Media
Föreläsning 2 Datalogi för E1 2D1343
Föreläsning 4 Python: Definiering av egna funktioner Parametrar
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 11: Implementation av filsystem.
Java. Kortfattat om Java Syntaxen påminner i hög grad om C++ Stöd för objektorientering Kod kan köras i en virtuell maskin som finns tillgänglig för nästan.
Föreläsning 13 Polymorfism, Paket och JAR-filer. Polymorfism Ordet härstammar från grekiskan Poly – många Morf – form Polymorf – många former Någonting.
Tentamensdags och lab 3…. Större program delas normalt upp i flera filer/moduler vilket har flera fördelar:  Programmets logiska struktur när man klumpar.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 6 ( ) INNEHÅLL: -Mera om tabeller.
Pekare och speciell programstruktur i inbyggda system
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; }
Tabeller.
Vektorer (klassen Vector) Sortering
Max start-guide Liten och väldigt snabbt ihopkastad.
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.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 4 ( ) Innehåll: -Programmerade rörledningar -Namngivna rörledningar.
Programmeringsteknik för Media1 & K1
William Sandqvist C:s minnesmodell.
1. En infrastruktur för programutveckling
PROCESSPROGRAMMERING Föreläsning ‏ Innehåll: Högnivå objekt för trådprogrammering: - Trådgrupper (”Thread pools”)‏ - Exekverare (Executor.
Mitt första Java program Mahmud Al Hakim Copyright, Mahmud Al Hakim, 1.
Modulär programutveckling
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Namnrum, räckvidd och rekursion Linda Mannila
Java paket och jar-filer
Lågnivåprogrammering Översikt av I/O-mekanismer i hårdvara Olika språkkrav och modeller för komponent- hantering(device driving) Modeller för komponent-hantering.
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.
INTRODUKTION TILL PROGRAMMERING
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 11 C# I/O Streams C# använder “strömmar” för in- och utmatningsoperationer.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 2 ( ) INNEHÅLL: -Variabler och datatyper -Tilldelning av variabler -Aritmetiska.
F4 - Funktioner & parametrar 1 Programmeringsteknik, 4p vt-00 Modularisering ”svarta lådor” Väl definierade arbetsuppgifter Enklare validering Enklare.
Föreläsning 4 Klasser Och Objekt.
William Sandqvist PIC-programmeringsmiljön i skolan Datorerna i skolans labsalar är centralt underhållna. Du har inte rättigheter att installera.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 2: Variabler och datatyper Variabler Bindning Typkontroll Några viktiga datatyper.
Din rapport ? Beskriv din applikation.
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.
F2 1 Programmeringsteknik, 4p vt-00 Kommentarer Allt mellan /* och */ Varje kommentar byts ut mot en blank av kompilatorn /* Exempel på uttryck, tilldelningsoperatorn.
© 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.
Föreläsning4 Repetition slingor Metoder. while-sats består av följande delar: 1. while 2. Villkor-sats (condition) 3. uttryck (statement) while-sats int.
1 Föreläsning 6 Repetition på metoder Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
Program indata ? utdata 1/20 Vahid Mosavat, Nada, KTH.
Föreläsning 3 Väsentliga delar i ett Javaprogram Input i paketet extra
Anders Sjögren Programmering i ANSI-C Ett första program för att se vart vi ska...
Programmeringteknik Webbdelen 2. webbprogrammering Server Den dator som websidan ligger på Klient Dator som tittar på webbsidan med en webbläsare (t ex.
Engångsbatchar/kompletterings- batchar för registervård Hans Persson
Anders Sjögren Funktioner något in och något annat ut.
KPP053, HT2015 MATLAB, Föreläsning 4
Python.
Presentationens avskrift:

C för enchipsdatorer: Programstruktur och Kompileringsprocess Lektion 3 C för enchipsdatorer: Programstruktur och Kompileringsprocess

Agenda Laboration 1 Kompileringsprocessen (PICC) Interrupt Exempelprogram med flera filer Kompileringsprocessen (PICC) Steg Filer Interrupt Funktionsdefinition Assembler i C-program Olika metoder

Kompilatorns funktion Detekterar syntaktiska and semantiska fel i källfilerna, Producerar ingen exekverbar kod förrän felen är rättade PICC kompilatorn skapar en exekverbar fil (*.hex, *.bin) Av C filer (*.h, *.c) som tillhandahålls

Funktioner i kompilatorn (PICC) När ett program kompileras Flera olika applikationer involverade Kontrolleras av ”command-line driver” (CLD) picl.exe CLD läser programmerarens inställningar för att bestämma vilka av applikationerna som skall exekveras och vad dessa skall ha för inställningar Termen kompilator (compiler) omfattar alla applikationer som är involverade i kompileringsprocessen (dvs. komplett transformering från indata till utdata från kompilatorn) Andra definitioner av kompilatorn kan omfatta stegen fram till linker Kompilatorns applikationer använder olika stöd-filer för att lagra inställningar och information som används under kompileringen (kompileringsprocessen)

Projekt och konfigureringsinställningar CLD integrerad i MPLAB Kan spara och ändra kommandoradsargument via MPLAB build options Kompilatorn läser även en chip info fil, .ini, som anger hur minnet är arrangerat i olika chip Ex: C:\Program Files\HI-TECH Software\PICC-Lite\9.50\datpicc-lite.ini.

Indata till kompilatorn Indata-filer (PICC manual)

Indata-filer C-filer måste ha filändelsen .c (används av kompilatorn för att bestämma filtyp) En header-fil innehåller programrelaterad information, men skapar normalt inte direkt exekverbar kod. Innehåller vanligtvis deklarationer (i motsats till definitioner) av funktioner och datatyper Inkluderas I C filerna av ett preprocessor direktiv #include Ingen namnrestriktion, men konvention med filändelsen .h Inkluderade filer förutsätts ha ej exekverbar kod Skall man inkludera filer med exekverbar kod skall dessa ha en .c filändelse Undvik att inkludera exekverbara filer I andra (ej vanligt, strukturen med ej exekverbara #include filer förstörs)

#include-filer HI-TECH kompilatorn innefattar flera olika .h filer som sparas I ett speciellt bibliotek I distributionen Ex pic1684.h Normalt placeras användarens .h filer I samma bibliotek som källfilerna .c Alternativt kan de läggas I ett bibliotek där sökvägen specificeras med -I (include path) inställningen under build options

Sökväg till #include-filer Ex: utils.h ligger på följande plats

Assembler-filer En assembler-fil innehåller processorspecifika mnemonics för programmet som kompileras Skapade från C-filer Handskrivna specialrutiner Måste vara kompatibla med Hi-Tech assembler som är en del av kompilatorn ”Bör” undvikas för att öka portabiliteten av programmet Måste ha .as som filändelse Kan listas i valfri ordning I kommmandoraden, eller insatta i dialogruta tillsammans med C filerna

Objekt-filer och biblioteks-filer Kompilatorn kan även ta emot förkompilerade objekt-filer Måste ha .obj extension. Kan läggas till I valfri ordning I kommandoraden, eller i MPLAB projektfönster Lägg inte till namn på objekt-filer som kompilerats av källfiler I samma projekt, endast förkompilerade objekt-filer som inte har någon motsvarande källfil Ofta använda programrutiner kan kompileras till en biblioteks-fil Lättare och snabbare att hantera för kompilatorn Kompilatorn accepterar dessa som andra källfiler Filändelsen .lib

C-filer C-filer kräver mest arbete av kompilatorn För varje C-fil produceras en listfil av applikationen CLIST Innehåller C-filerna med radnummer

Stöd-filer Stöd-filer produceras mellan de olika stegen kompileringen

Kompileringssteg Preprocessor Parser Kodgenerator Assembler Linker

Kompilatorn: Filer och applikationer

Preprocessor Steg 1 i kompileringsprocessen, förbereder filerna för kommande uppgifter Inputs C och include-filer (.h) Funktioner Tar bort kommentarer och multipla tomrum (ex. tabbar ) Exekverar preprocessor direktiv I källfilerna (#define, #include) Preprocessor filer Intermediate output filer Utdata från preprocessor ses normalt inte om inte –PRE inställningen är vald, i detta fall kan utdata skrivas till en fil C preprocessade filer (.pre) Output Preprocessor output

Output Preprocessor Output från preprocessor är C-kod Kallas för modul eller översättningsenhet #1 main.c raden indikerar filnamn och radnummer I källfilen Kommentarer och makrodefinition är borta men tomma rader är kvar för att hålla radnummer information intakt

Parser Input Funktion Skapar inga intermediate filer Output Preprocessor output Funktion Scannar koden för att upptäcka fel och ovanliga konstruktioner Skapar inga intermediate filer returnerar syntax and semantiska fel, samt varningar för ovanlig kod Output Parser output

Kodgenerator Inputs Funktioner Intermediate output filer Output Parser output (godkända filer från preprocessor) Chip info-fil (.ini) Funktioner Konverterar output från parsern till assembler ASCII mnemonics Kodoptimering (optional) Intermediate output filer Assemblerkod ASM-fil (.as) Symbolic Debug-fil(.sdb) Output Kodgenerator output

Kodgeneratorns funktion Detta är första steget som är processorspecifikt Alla HI-TECH preprocessors och parsers har samma namn och är I stort sätt identiska medan Kodgeneratorn har ett specifikt processorbaserat namn till exampel CGPIC, eller CG51. Kodgeneratorn använder en uppsättning regler (productions) för att skapa assembler-koden Om ingen matchning/subproduction kan hittas kan inte kodgeneratorn producera någon kod och ett felmeddelande skrivs ut Detta betyder att C koden var giltig men att kodgeneratorn inte hittade några productions som kan matcha uttrycket Vanligtvis är det ungefär 800 productions I en full kodgeneratoor Kodgeneratorn utför även optimering I olika stadier global optimization: Utförs på output från parsern, allokerar bl.a. variabler till register när det är möjligt Assemblerfilerna är de första som refererar till psects, program sections. Kodgeneratorn genererar psect directiv där kod och data skall läggas

Assembler Input Funktion Intermediate output filer Output Kodgenerator output Funktion Konverterar assembler ASCII mnemonics till binär maskinkod Intermediate output filer List-filer (.lst) Output Objekt-filer (.obj)

Assemblerns funktion Assemblern är specifik för varje kompilator och har ett processorspecifikt namn ex. ASPIC or ASXA. Assemblerkoden innehåller även assembler directiv som kommer att exekveras av assemblern Vissa av dessa definerar ROM baserade konstanter andra definerar psects medan andra deklarerar globala syimboler Assemblern kan även föregås av en optimering, kallad peephole optimization. Peephole optimization görs separat för assemblerkod för varje funktion Utdata från assembler är en objekt-fil Formatterad binär-fil som innehåller maskinkod och annan information relaterad till den modul som den genererades ifrån Objektfiler finns I två grundtyper Relokerbara Absoluta Även om båda innehåller binär maskinkod har inte relokerbara objektfiler adresserna specificerade

Output assembler Objektfiler som produceras av assemblern följer ett format som är standard för alla HI-TECH kompilatorer Innehållet är dock maskinspecifikt Om -ASMLIST inställningen var specificerad kommer assemblern att generera en assembler list-fil som innehåller både den ursprungliga C-koden och assembler-koden som genererades för varje rad i C-koden

Kompileringstegen före linker preprocessor, parser, kodgenerering and assembler, utförs fil för fil för varje C-fil som körs Fel i koden rapporteras när de detekteras Om en fil inte kan kompileras beroende på ett fel så kommer kompileringen att stoppas för denna, och istället fortsätta med nästa fil som står i tur Assembler-filer behöver inte lika mycket arbete men de måste assembleras Kompilatorn kommer att skicka varje fil med .as ändelse direkt till assemblatorn, såvida inte inställningen -P (Pre-process assembler files) är använd. Då tillåts preprocessor direktiv användas I assemblerkod Utdata från preprocessorn går i detta fall till assemblern Objekt och biblioteks-filer som skickas till kompilatorn är redan kompilerade och används inte förrän I link-stadiet

Linker Input Funktion Intermediate output filer Output Objekt-filer (.obj) Biblioteks-filer (.lib) Funktion Kombinera alla objekt och biblioteksfiler till en fil Alla objektfliler från kompileringen plus externa och interna objekt och biblioteksfiler Mappar relokerbara objekt till absoluta adresser Intermediate output filer Map-fil (.map), detaljerad information om positionen av psects och addresser till symboler Symbol-fil (.sym), ASCII baserad fil som innehåller information om hela programmmet. Innehåller absoluta adresser eftersom denna fil genereras efter link stadiet Debugging-fil (.cod) Output Executable (.hex, .bin)

Linker output Objekt-filen som produceras av HLINK innehåller all information som behövs för att köra programmet Nu måste det transformeras till ett format som kan skickas till processorn OBJTOHEX producerar filen med formatet som användaren har specificerat. Det finns flera standarformat för detta The Motorola HEX (S record) or Intel HEX Innehåller även checksumma för kunna verifiera att överföringen skett utan fel . Formaten innehåller address information som möjliggör att de områden som inte används kan utelämnas från filen. Kan ge ett mindre fomat då endast de använda adresserna behöver anges I vissa fall kan andra filer produceras CROMWELL, ”reformatter”, exekveras för att producera andra filer. Ex. med PIC kompilatorn läsa in HEX-fil och SYM-file och producera en COD-fil.

OBJTOHEX output

Exempel Linker options

Interrupthantering i C Interrupt kan hanteras utan assemblerkod Funktion kan använda kvalificeraren interrupt som anropas vid hårdvaruinterrupt Hanteras annorlunda jämfört med andra funktioner En interrupt funktion måste deklareras av typen interrupt void och kan inte ha parametrar Kan inte anrropas från c-kod men kan anropa andra funktioner Exempel på interrupt funktion (funktionsnamnet tc_int är oväsentligt) long tick_count; void interrupt tc_int(void) { ++tick_count; } Endast en interruptfunktion i midrange PIC:ar, interruptvektorn pekar på denna funktion PICC Lite kompilatorn avgör vilka register och objekt som behöver sparas In-line assembler i interruptfunktionen kan däremot kräva att register sparas

Assembler i C-kod #asm and #endasm direktiven kan användas för att starta och avsluta ett block av assemblerinstruktioner i C-kod asm() direktivet kan användas för att lägga in en enstaka assemblerinstruktion unsigned char var; void main(void) { var = 1; #asm rlf _var,f #endasm asm("rlf _var,f"); } Se upp med att assemblerkoden inte stör kompilatorgenererad kod, använd -S option för att studera kompilatorgenererad kod Viktigt: #asm and #endasm är syntaktiskt inte del av c-programmet och följer därför inte normala C-flödeskontrollregler Använd inte detta vid villkorsatser, det kan orsaka oväntade beteenden Använd i dessa fall endast asm("") formen som tolkas som ett C-statement och följer C-flödeskontrollregler