Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

Relevanta dokument
Fortsä'ning Pekare. Ulf Assarsson. Originalslides av Viktor Kämpe

Fortsä'ning Pekare. Ulf Assarsson. Originalslides av Viktor Kämpe

Mål. Datorteknik. Innehåll. Innehåll (forts) Hur ser ett program ut? Hur skapas maskinkoden?

Institutionen för elektro- och informationsteknologi, LTH

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??

Programmering av inbyggda system 2012/2013. Kodningskonventioner och programbibliotek. maskinnära programmering i C och assemblerspråk

Programmering av inbyggda system. Pekare och Arrayer. Viktor Kämpe

Assemblerprogrammering för ARM del 2

Datorsystemteknik DVGA03 Föreläsning 5

IS1200 Datorteknik. Övning CE_O4 Maskinnära programmering med C Förberedelser till hemlaboration 1

Tentamen med lösningsförslag

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

EDA480/EDA485 - Maskinorienterad programmering, tentamen 2006-xx-xx 1(7)

Enkla datatyper minne

Föreläsning 10. Pekare (Pointers)

Funktionspekare, inledning: funktionsanropsmekanismen. Anrop via pekare

*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

Programmering av inbyggda system. Pekare och Arrayer. Ulf Assarsson. Originalslides av Viktor Kämpe

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

Poster ( structar ) Postdeklarationer

Skriv i mån av plats dina lösningar direkt i tentamen. Skriv ditt kodnummer längst upp på varje blad.

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

Tentamen med lösningsförslag

LEU240 Mikrodatorsystem

Institutionen för elektro- och informationsteknologi, LTH

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)

Övning från förra gången: readword

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

Tentamen med lösningsförslag

Programmeringsteknik med C och Matlab

Tentamen med lösningsförslag

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

Maskinorienterad programmering

Hantering av textsträngar och talsträngar. William Sandqvist

Funktioner. Linda Mannila

(Lösningsförslag finns sist i denna fil.)

Kontrollskrivning Mikrodatorteknik CDT S2-704

Övningsuppgifter i Mikrodatorteknik 4p/5p

1 Funktioner och procedurell abstraktion

GPT föreläsning 8. Förra veckan: Man kan ta tiden på en sorterad teckensträng Förra gången: Problemlösning på lägre nivå kan sortera funktioner

Assemblerprogrammering för HCS12

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.

Programmering, grundkurs, 8.0 hp HI1024, extra tentamen, TEN1, för TIDAA1. Fredagen den 11 mars 2011,

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

Funktioner och programstruktur. Föreläsning 5

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

Assemblerprogrammets. struktur; exempel

Programmeringsteknik för Ingenjörer VT06. Föreläsning 10

Digital- och datorteknik

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

Tentamen med lösningsförslag

Lösningsförslag till Tenta i Mikrodator

Digital- och datorteknik

TSEA28 Datorteknik Y (och U)

2 Pekare och dynamiska variabler.

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

C-programmering del 4. Ulf Assarsson. extern, sta.c, Överkurs: const, inline, Gameloop, grafikloop, fraktalt berg

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