Lektion 4 - SMD006/SMD117



Relevanta dokument
Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Programmeringsteknik med C och Matlab

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

6 Lågnivåprogrammering

Mekanismer. (implementation)

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

Systemkonstruktion LABORATION REALTIDSPROGRAMMERING

Agenda. Introducera det individuella projekt Multipla C-filer H-filer Introducera uppgifterna

Enkla datatyper minne

Introduktion C-programmering

Tentamen i Introduktion till programmering

Programallokering. Programtyper. Att placera program i flashrespektive. Program i FLASH-minne. Program i RAM-minne

Parameteröverföring. Exempel. Exempel. Metodkropp

Institutionen för elektro- och informationsteknologi, LTH

Datorteknik. Föreläsning 5. Realtidssystem och realtidsprogrammering. Institutionen för elektro- och informationsteknologi, LTH.

Elektroteknik MF1016 föreläsning 9 MF1017 föreläsning 7 Mikrodatorteknik

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

Klassdeklaration. Metoddeklaration. Parameteröverföring

Digitalitet. Kontinuerlig. Direkt proportionerlig mot källan. Ex. sprittermometer. Elektrisk signal som representerar ljud.

GRUNDER I VHDL. Innehåll. Komponentmodell Kodmodell Entity Architecture Identifierare och objekt Operationer för jämförelse

*Pekarvärden *Pekarvariabler & *

Operatorer Tilldelning Kodblock { } if satsen Logiska uttryck Att programmera

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock

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

AVR Studio 4 Och AVRFLASH

Laboration 2 i Datorteknik- Assemblerprogrammering II

Varför behövs det? I Allegro finns t.ex. stöd för:

TDDC77 Objektorienterad Programmering

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Boken?!?! Vad är ett program? Kompilerande-Interpreterande Programmeringsmiljö Hello World! Att programmera och ett enkelt program Variabler printf

Översikt Föreläsning 1. Trivicalc. Vad är trivicalc? En cell. Områden på skärmen. SMD168/SMD135 Fredrik Bengtsson

Tentamen ges för: Tentamensdatum: Tid:

Introduktion till användning av linux-servern sledge och några övningsuppgifter

Att använda pekare i. C-kod

CE_O3. Nios II. Inför lab nios2time

Övningsuppgifter STYRNING - i Mikrodatorteknik för U2 2010

Uttryck och villkor. Föreläsning 2

Funktioner och programstruktur. Föreläsning 5

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

Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klass

Föreläsning 2. Operativsystem och programmering

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

In- och utenheter. Händelsebaserad programmering i GLUT. Interrupt-baserad interaktion. Sampling / polling. Händelsebaserad interaktion (forts.

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

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

Föreläsning 3. Programmering, C och programmeringsmiljö

Laboration 4: Knappstuds Drivrutiner för att eliminera störningar.

Mål. Datorteknik. Introduktion. Innehåll. Verklig situation - pappaledighet. Introduktion (forts)

Institutionen för elektro- och informationsteknologi, LTH

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

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

Funktioner och programstruktur. Föreläsning 5

Föreläsning 3. Programmering, C och programmeringsmiljö

Funktionspekare, inledning: funktionsanropsmekanismen. Anrop via pekare

AVR 3 - datorteknik. Avbrott. Digitala system 15 hp. Förberedelser

Funktionens deklaration

TDTS04: Ett chattsystem i java baserat på corba

Repetition C-programmering

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen

Uttryck och villkor. Föreläsning 2

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Datorteknik 2 (AVR 2)

Att komma igång. Föreläsning 1

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

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

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

Classes och Interfaces, Objects och References, Initialization

Ordlistor, filhantering och ut på webben. Linda Mannila

TDIU01 - Programmering i C++, grundkurs

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

tentamensdags och lab 3

Välkommen till. Datastrukturer, algoritmer och programkonstruktion. eller DOA

Lösningar till uppgifterna sätts ut på kurssidan på nätet idag kl Omtentamen i Programmering C, 5p, A1, D1, E1, Fri, Pr1, Te/Ek1,

Tentamen ID1004 Objektorienterad programmering May 29, 2012

Programmering i C. Christer Sandberg, Gunilla Eken, Stefan Bygde Olof Andersson Linus Källberg Caroline Uppsäll Johan Hägg

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

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Tung bakgrundsaktivitet t.ex. Aktiva objekt t.ex. Animering, simulering. DD2385 Programutvecklingsteknik Några bilder till föreläsning 9 6/5 2013

Föreläsning 2. Variabler, tilldelning och kodblock{} if-satsen Logiska operatorer Andra operatorer Att programmera

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

Programmering i C, 7,5 hp

PC-teknik, 5 p LABORATION ASSEMBLERINTRODUKTION

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

1 Modulär programutveckling.

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

Hjälpmedel för kompilatorkonstruktion, DVB004

Lathund. C för inbyggda system

Code-Lite tutorial ( /RoJ)

HI1024 Programmering, grundkurs TEN

Programmering Grundkurs (HI1900) Teoridel

Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Skriv ditt idnummer på varje blad (så att vi inte slarvar bort dem).

Polling (cyklisk avfrågning) Avbrott

Tentamen i. Programmering i språket C

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.

Programmering i C++ EDA623 Mer om klasser. EDA623 (Föreläsning 6) HT / 26

Programmering A. Johan Eliasson

Datorsystemteknik Föreläsning 7DAVA14

Transkript:

Lektion 4 - SMD006/SMD117 Fredrik Bengtsson LTU bson@sm.luth.se February 24, 2002 Fredrik Bengtsson 1

Lektion 4 - översikt C och C-kärnan Drivrutiner - allmänt Kommunikation med hårdvara Drivrutiner - aktiva, passiva Exempel på drivrutiner Labmiljön - Kompilator, etc. Labben - Den fruktade pendeln Fredrik Bengtsson 2

C - headerfiler En headerfil (eller h-fil) är en fil som deklarerar de funktioner (bl.a.) som exporteras av en c-fil. Deklarationer i en h-fil kan (svagt) liknas vid gränssnitt (interfaces) i java. H-filen deklarerar de funktioner som vi vill (och får) använda från vårt program Ett program består vanligtvis av flera c-filer. H-filerna är gränssnitten mellan dessa. Fredrik Bengtsson 3

Exempel - headerfil /* myfile.h */ int myfunction(void); /* myfile.c */ int myfunction(void) { return 3; } /* main.c */ #include "myfile.h" int main(void) { printf("%i", myfunction()); } Fredrik Bengtsson 4

C - bitvisa operatorer Bitvis AND: & Bitvis OR: Bitvis NOT: ~ Bitvis XOR: ^ Bitvis vänsterskift: << Bitvis högerskift (aritmetisk): >> Fredrik Bengtsson 5

Exempel - skift och bitmaskning Vänsterskift (obs. aritmetisk) 0110 >> 1 == 0011 1110 >> 1 == 1111 Högerskift 0110 << 1 == 1100 Maskning 0111 & 1101 == 0101 Fredrik Bengtsson 6

Kodexempel - skift och bitmaskning int main(void) { int a = 0x7; /* a = 0111 */ int b = a & (1 << 2); /* maska ut bit nr. 2 (tredje biten); b = 0100 */ return 0; } Fredrik Bengtsson 7

C-kärnan Stöd för sendwait() och signal(). Inga semaforer eller andra primitiv. Stöd för timer (Periodic, NoTimer) Flera processer (som javakärnan) init-mode och normal-mode (som javakärnan) Avbrottshantering (createinterrupthandler) Tillgång till kärnan genom: #include "k.h" #include "kio.h" kprintf() ersätter printf() Fredrik Bengtsson 8

Utskrifter och hexadecimala tal Hexadecimala tal börjar med 0x (ex. 0xF3). Skriva ut heltal (int) (ex. skriver ut talet tal) kprintf("talet är %i", tal) Skriva ut flyttal (float) (ex. skriver ut talet tal) kprintf("talet är %f", tal) Fredrik Bengtsson 9

sendwait() och signal() i C-kärnan Java: svar = tillprocess.sendwait(händelse, meddelande) C: sendwait(tillprocess, händelse, meddelande, svar) Java: tillprocess.signal(händelse) C: signal(tillprocess, händelse) Fredrik Bengtsson 10

receive() och reply() i C-kärnan Java: msg = receive() sändare = msg.getprocess() meddelande = msg.getmessage() C: sändare = receive(meddelande) Java: sändare.reply(meddelande) C: reply(sändare, meddelande) Fredrik Bengtsson 11

Skapa processer i C-kärnan Skapa processer med createstdprocess() (init mode) Process processreferens = createstdprocess( namn, funktion, TimerMode) namn är processens symboliska namn. funktion motsvarar run() i java (kan väljas godtyckligt) TimerMode: NoTimer eller Periodic Processerna startar automagiskt när main() exekverat klart. Fredrik Bengtsson 12

Timern i C-kärnan NoTimer Ingen timer (allt funkar som vanligt) Periodic Kärnan skickar händelsen TimeEvent med med visst intervall till processen. settimebase(ms) specificerar intervallet mellan händelser. settimebase(0) stänger av timern. Timern är avstängd från början. Händelserna skickas även om vi inte tar emot dem (köas). Fredrik Bengtsson 13

Drivrutiner - översikt En drivrutin är ett program som interagerar (kommunicerar) med hårdvaran och tillhandahåller ett abstrakt gränssnitt mot densamma. Programvara (klient) använder drivrutinens gränssnitt för att kommunicera med hårdvaran. Det finns aktiva och passiva drivrutiner. En aktiv drivrutin tar själv initiativ till komunikation med klienten (programmet som använder drivaren). Typiskt används callback för detta. En passiv drivrutin tar aldrig eget initiativ till komunikation. Drivrutinen tillhandahåller vanliga funktioner. Fredrik Bengtsson 14

Drivrutiner och hårdvara Aktiv hårdvara Tar själv initiativ till kommunikation med drivrutinen. Använder vanligtvis avbrott för detta. Passiv hårdvara Tar aldrig initiativ till kommunikation (drivrutinen initierar alltid). Kan använda avbrott, men avbrotten sker då som en direkt konsekvens av ett anrop från drivrutinen. Man kan ha godtycklig kombination av aktiv/passiv drivrutin och aktiv/passiv hårdvara. Fredrik Bengtsson 15

Avbrott Ett avbrott är en händelse i hårdvara som tillkallar mjukvarans (drivrutinens) uppmärksamhet. Typiskt börjar man exekvera ett förutbestämt avsnitt kod (avbrottshanteraren) som vidtar åtgärd. Avbrottshanteraren är en vanlig funktion. Drivrutinen avgör vilken funktion som är avbrottshanterare. Avbrottshanteraren exekverar inte i någon vanlig process, utan kärnan exekverar avbrottshanteraren när ett avbrott inträffat. Avbrottshanteraren uppmärksammar drivrutinen på vad som hänt. Avbrottshanterare skall hållas mycket korta. Fredrik Bengtsson 16

Callback Callback är när en drivrutin anropar en funktion som klienten bestämt (klienten implementerar callbackfunktionen). Callbackfunktionen är en vanlig funktion. Callbackfunktionen exekverar i drivrutinens process. Callback påkallar klientens uppmärksamhet (drivrutinen initierar komunikation). Callbackfunktioner skall hållas mycket korta. Fredrik Bengtsson 17

Callback och avbrott Avbrott komunicerar... Från hårdvara till drivrutin. Callback komunicerar... Från drivrutin till klient. Jämför med vanliga funktionsanrop från klient till drivrutin och I/O-anrop från drivrutin till hårdvara. Avbrott och callback blir liksom åt andra hållet. Hårdvara är inte aktiv bara för att den använder avbrott Avbrottet kan vara ett omedelbart resultat av drivrutinens handling. Fredrik Bengtsson 18

Avbrott i C-kärnan Installeras avbrottshanterare: createinterrupthandler(intvec, funktion, process). funktion är den funktion som vi vill använda som avbrottshanterare. intvec är avbrottsvektorn vi vill associera funktionen med (inte lika med IRQ-nummer). IRQ 0-7 motsv. av avbrottsvektor 8-15. Avbrottshanteraren returnerar (med return) en mängd av händelser (ev0-ev15) som kärnan skickar till processen process. process är typiskt drivrutinens process. Fredrik Bengtsson 19

Kommunikation med hårdvara I/O-portar En I/O-port kan betraktas som en informationskanal till/från hårdvaran. Man kan antingen läsa eller skriva till/från en I/O-port. Ett system har i allmänhet många I/O-portar. En del portar är read-only. En del portar är write-only. Hårdvaran kan se om vi läser eller skriver en port. En port kan ha olika funktioner vid läsning resp. skrivning (bestäms av hårdvaran). Fredrik Bengtsson 20

I/O-portar i C Man skriver till en I/O-port med outportb(port, värde) Man läser från en I/O-port med värde=inportb(port). port är I/O-portens nummer (0-65535). värde är värdet att läsa från/skriva till porten (0-255). Fredrik Bengtsson 21

Exempel - drivrutiner Passiv hårdvara: Ett steglöst reglage som vi vill veta läget på (typ volymkontroll). Två register: reg0 (I/O-port 7): skriv=initiera hårdvaran, läs=stäng ner hårdvaran reg1 (I/O-port 8): läs=läget på reglaget (0-255). Aktiv hårdvara: Samma som den passiva, men avbrott (IRQ) 7 inträffar när läget ändras. Fredrik Bengtsson 22

Exempel - drivrutiner Skriv en passiv drivrutin för den passiva hårdvaran. Skriv en passiv drivrutin för den aktiva hårdvaran. Skriv en aktiv drivrutin för den aktiva hårdvaran. Skriv en aktiv drivrutin för den passiva hårdvaran. Fredrik Bengtsson 23

Labmiljön Labben äger rum i A1505 och A1506. Kod till labbet är 5782. Kompilatorn är Borland C (en gammal). Komma igång: Exekvera G:\SMD006\ Installera allt. Kompilatorn finns på D:\SMD006\TC.BAT. Er hemkatalog finns på H:. 16 maskiner - 140 personer - dela upp er! Fredrik Bengtsson 24

Kompilatorn Skapa ett nytt projekt (open project). Addera dom c- och obj-filer som ska vara med (da.c, ad.c, control.c, menu.c, kio.obj, k.obj, regulat.obj). Glöm inte att spara filerna på ert konto (H:). Fredrik Bengtsson 25

Labben - Pendeln (lyftkransproblemet) En pendel på en tralla på en skena. Motor flyttar trallan (och pendeln). Pendeln börjar gunga. Vi vill stabilisera pendeln. Vi behöver en regulator. Färdig reglerfunktion (puh!). Fredrik Bengtsson 26

Labben - uppgift Två drivrutiner En för utgång (DA) En för ingång (AD) Regulator (färdig reglerfunktion) Användargränssnitt (meny). Man ska kunna flytta pendeln från menyn och pendeln ska då stabilisera sig fort (sluta gunga). Det finns en (1) pendel. Prova att låta pendeln stå vid en maskin och gå sedan till denna och testa. Fredrik Bengtsson 27