Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

Relevanta dokument
Datorteknik. Föreläsning 3. Assembler, stack och subrutiner, programmeringskonventionen. Institutionen för elektro- och informationsteknologi, LTH

F5: Högnivåprogrammering

F5: Högnivåprogrammering

Assemblerprogrammering, ARM-Cortex M4 del 3

Assemblerprogrammering - fördjupning

Stack och subrutiner Programmeringskonventionen

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

Introduktion C-programmering

Tentamen med lösningsförslag

TDIU01 - Programmering i C++, grundkurs

Repetition C-programmering

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Assemblerprogrammering för ARM del 2

Datorsystemteknik DVGA03 Föreläsning 5

Ulf Assarsson. Grundläggande C-programmering del 2 Pekare och Arrayer. Läromoment:

Enkla datatyper minne

Föreläsning 10. Pekare (Pointers)

*Pekarvärden *Pekarvariabler & *

Att använda pekare i. C-kod

Assemblerprogrammering del 3

Dynamiskt minne. Vad är dynamiskt minne Motivering Hur gör man i C Övningar

struct egendefinierad typ struct LECTURE_TYPE { char teacher[99]; float lengthinminutes; char type; /* L = lecture, E = exercise */ };

Poster ( structar ) Postdeklarationer

Lösningar till tentamen i EIT070 Datorteknik

C-programmering, föreläsning 2 Jesper Wilhelmsson

Funktionens deklaration

Tentamen med lösningsförslag

Datorteknik ERIK LARSSON

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Programmering av inbyggda system 2014/2015

BINÄRA TRÄD. (X = pekarvärdet NULL): struct int_bt_node *pivot, *ny; X X X 12 X X 12 X X -3 X X

Föreläsning 2, vecka 8: Repetition

LEU240 Mikrodatorsystem

Datorteknik. Föreläsning 2. Programmering i C och assembler MIPS instruktionsarkitektur. Institutionen för elektro- och informationsteknologi, LTH

Mål. Datorteknik. Innehåll. Vad händer med en add-instruktion? Vad händer med en add-instruktion. Instruktioner som bitmönster i minnet

TDIU01 - Programmering i C++, grundkurs

Översikt Introduktion DST 1. Nicholas Wickström. IDE, Högskolan i Halmstad. N. Wickström

Agenda. Arrayer deklaration, åtkomst Makron Flerdimensionella arrayer Initiering Strängar Funktioner och arrayer. Övningar nu och då

Tentamen med lösningsförslag

Föreläsning 6: Metoder och fält (arrays)

Fö 5+6 TSEA81. Real-time kernel + Real-time OS

SCB :-0. Uno Holmer, Chalmers, höger 2 Ex. Induktiv definition av lista. // Basfall

TSEA28 Datorteknik Y (och U)

Digital- och datorteknik

Programmeringsteknik med C och Matlab

Tentamen med lösningsförslag

#include <stdio.h> #include <string.h>

Funktioner. Linda Mannila

Kontrollskrivning Mikrodatorteknik CDT S2-704

Övningsuppgifter i Mikrodatorteknik 4p/5p

1 Funktioner och procedurell abstraktion

C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen

BMI = (vikt i kg) / (längd i m) 2. Lösningsförslag

CPU. Carry/Borrow IX. Programräknare

4. Maskinnära programmering i C. Förberedelser till hemlaboration 1.

Lathund. C för inbyggda system

Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011,

Uppgifter till praktiska tentan, del A. (7 / 27)

Programräknaren visar alltid på nästa instruktion som skall utföras. Så fort en instruktion har hämtats så visar programräknaren på nästa instruktion.

Funktioner och programstruktur. Föreläsning 5

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

Klassdeklaration. Metoddeklaration. Parameteröverföring

Dataminne I/O Stack 0x005D 0x3D SP low byte 0x005E 0x3E SP high byte

Assemblerprogrammets. struktur; exempel

Digital- och datorteknik

Ansvarig lärare: Olof Andersson, Telefon (besöker skrivsalen)

Lösningsförslag till Tenta i Mikrodator

Digital- och datorteknik

2 Pekare och dynamiska variabler.

Ulf Assarsson. Grundläggande C-programmering del 5 Applika'onsbyggnad/Spelprogrammering (real'dsstyrsystem) och Avancerad C.

Heltal(int) Programmeringsteknik 54

Transkript:

Kodningskonventioner Viktor Kämpe

Varför kodningskonventioner? Förståelse för Skillnaden mellan lokala/globala variabler. Funktionsargument. Returvärde. Möjliggör Mix av assembler och C. Kodningskonventioner/VK 2

Funktionsanrop utan argument JSR delay delay(); delay: LDAB loop_delay: DECB BNE RTS #$FF loop_delay void delay() { unsigned char tmp = 0xFF; do { tmp--; } while(tmp); } CPU12 Assembler C program Fortsättning Pekare/VK 3

Stackens utseende Före JSR I början av funktion Efter RTS SP-> SP-> SP-> RTN L RTN H RTN L RTN H Ökande adresser Kodningskonventioner/VK 4

Funktionsanrop med argument Anropskonventioner för XCC12: Kallas också parameteröverföring. Parametrarna överförs via stacken. (Värdet av) argumenten pushas på stacken. Ordningen är höger-till-vänster. Detaljer i Arbetsbok för MC12 på sidan 80 Kodningskonventioner/VK 5

Returvärde från funktion Returvärdet sker enligt XCC12 s konventioner i: Register D, om ej beskrivet nedan. Register B, om returtyp är char. Register Y/D om returtyp är long eller float. MSW i Y, LSW i D. Via (en pekare till) minnet om returtyp är en struct. Se Arbetsbok för MC12 på sidan 81. Kodningskonventioner/VK 6

Ett enkelt C program #include <stdio.h> int g_var; //global synlighet int myadd(int x, int y) { // lokal variabel int sum; sum = x+y; return sum; } int main() { // lokala variabler int, var2; Funktionsdeklaration I följande slides använder vi konventioner för XCC12 och 16 bitars int } = 4; g_var = 1; var2 = myadd(g_var, ); return 0; Funktionsanrop Kodningskonventioner/VK 7

Passa första parametern Före Efter int myadd(int x, int y) { // lokal variabel int sum; sum = x+y; SP-> SP-> return sum; } var2 = myadd(g_var, ); Push Ökande adresser Kodningskonventioner/VK 8

Passa andra parametern Före Efter int myadd(int x, int y) { // lokal variabel int sum; sum = x+y; return sum; SP-> g_var } SP-> g_var var2 = myadd(g_var, ); Push Ökande adresser Kodningskonventioner/VK 9

Spara returadress på stacken Före Efter int myadd(int x, int y) { // lokal variabel int sum; sum = x+y; return sum; g_var g_var } SP-> g_var g_var RTN L var2 = myadd(g_var, ); SP-> RTN H JSR Ökande adresser Kodningskonventioner/VK 10

Lokala variabler på stacken Lokala variabler ligger på stacken. Utrymme skapas genom att flytta stack pekaren (SP). Kodningskonventioner/VK 11

Lokala variabler på stacken Före Efter int myadd(int x, int y) { // lokal variabel int sum; sum = x+y; return sum; g_var g_var } g_var g_var RTN L RTN L var2 = myadd(g_var, ); SP-> RTN H RTN H sum Ökande adresser SP-> sum Kodningskonventioner/VK 12

Aktiveringspost / Stack frame int myadd(int x, int y) { // lokal variabel int sum; sum = x+y; return sum; g_var Argument } Aktiveringspost g_var var2 = myadd(g_var, ); RTN L RTN H Returadress Ökande adresser SP-> sum sum Lokala variabler Kodningskonventioner/VK 13

Prolog Prologen av en funktion skapar utrymmet för lokala variabler På CPU12 så görs det genom att flytta SP LEAS Load Effective Address to SP Kodningskonventioner/VK 14

Epilog Epilogen av en funktion återlämnar minnet för lokala variabler. Görs på motsvarande sätt som prologen. Kodningskonventioner/VK 15

[myadd till assembler för hand] Kodningskonventioner/VK 16

Ett funktionsanrop 1. Pusha argumenten på stacken. 2. JSR (pusha återhoppsadressen på stacken). 3. Prolog: skapar utrymme för lokala variabler. 4. { Funktionskroppen } 5. Lägg returvärde i rätt register. 6. Epilog: återlämnar utrymme för lokala variabler. 7. RTS (pop av programräknaren PC) 8. Återställ stacken till tillståndet innan argumenten pushades. Kodningskonventioner/VK 17

[assemblerkod från kompilator] Kodningskonventioner/VK 18

Kombinera C och assembler Anropa assembler-rutiner från C Anropa C-rutiner från assembler Kodgenerering sker från olika filer, så ihopkopplingen sker i länkningen. Kodningskonventioner/VK 19

XCC genererar assembler från C Från C till assembler Från assembler till maskinkod Symbolerna i assemblern är samma som i C fast med ett understreck: myadd() _myadd: i C i assembler Kodningskonventioner/VK 20

Import IMPORT i assembler säger att symbolen kommer från en annan fil. IMPORT... JSR _main _main Symbol från annan fil ( t ex.c-fil) Börja exekvera main-funktionen Kodningskonventioner/VK 21

Extern extern i C säger att symbolen kommer från en annan fil. #include <stdio.h> extern int g_var; void mycli(); void main() { mycli(); } g_var definerad i annan fil ( t ex.c-fil) Extern ej nödvändig för funktioner, prototypen säger: finns vid länkning. _mycli: EXPORT CLI RTS _mycli Kodningskonventioner/VK 22

Synlighet av symboler Alla symboler synliga per-default i C Inga symboler synliga per-default i assembler Gör symboler (i.s12 filen) synliga med EXPORT Gör symboler från andra filer synliga med IMPORT Kodningskonventioner/VK 23

static static i C kan göra två saker 1. Ta bort synlighet (från andra filer) av symboler. 2. Allokera minne för lokala variabler som om de vore globala variabler (men fortfarande med lokal synlighet). Kodningskonventioner/VK 24

Static variant 1 static int var; Variabeln var kan ej ses från andra filer, oavsett om man använder extern eller IMPORT. Kodningskonventioner/VK 25

Static variant 2 #include <stdio.h> void testfkt() { int = 0; static int var2 = 0; ++; var2++; printf(": %i, var2: %i \n",, var2); } int main() { testfkt(); testfkt(); testfkt(); } Utskrift: : 1, var2: 1 : 1, var2: 2 : 1, var2: 3 var2 initialiseras till noll endast första gången vi anropar funktionen, men behåller sedan sitt värde mellan anrop. Kodningskonventioner/VK 26

Viktiga koncept Aktiveringspost Prolog/Epilog av funktion Keywords: Static (C) Extern (C) Import, Export (assembler) Kodningskonventioner/VK 27