280 likes | 459 Vues
Embedded .NET Introduktion til .NET framworket og .NET Compact Frameworket. Captator Tlf: 8620 4242 www.captator.dk Carsten Juel Andersen Softwarearkitekt juel@captator.dk Mobil: 2348 0003. Agenda. Introduktion til .NET .NET frameworket og .NET Compact frameworket . Embedded udvikling i .NET
E N D
Embedded .NETIntroduktion til .NET framworket og .NET Compact Frameworket CaptatorTlf: 8620 4242www.captator.dkCarsten Juel AndersenSoftwarearkitektjuel@captator.dkMobil: 2348 0003 Embedded .NET
Agenda • Introduktion til .NET • .NET frameworket og .NET Compact frameworket • . Embedded udvikling i .NET • Windows XP embedded - .NET framework • Windows CE - .NET compact framework • Garbage Collection • Parallelprogrammering: Processer og Threading • Hvorfor .NET til embedded udvikling? Embedded .NET
Intet menneske er en ø ? ? ? ? Embedded .NET
xp …Brikkerne samles XML Web Services Common Language Runtime Embedded .NET
Frameworket, sprog og værktøjer VB C++ C# JScript … Visual Studio.NET Common Language Specification ASP.NETWeb Forms Web Services Mobile Internet Toolkit Windows Forms Overliggende frameworks: Data, … Base Class Library Common Language Runtime OS (Windows) (COM+ services) Embedded .NET
Base Class Library Support Thread Support COM Marshaller Type Checker Exception Manager Security Engine Debug Engine IL to Native Compilers Code Manager Garbage Collector Class Loader Common Language Runtime Embedded .NET
Eksekveringsmodel VB VC ... Script NativeCode Install timeCode Gen IL Common Language Runtime “Econo”-JITCompiler Standard JITCompiler NativeCode Embedded .NET
Services der gør udvikling lettere • Fælles (og stærke) typer • Objekt håndtering • Error Handling • Lifetime management – Garbage Collection • Selvbeskrivende objekter • Dependency informationer - reflektion • Fælles base classes • Versionering • Applikations isolering • Side by Side • XCOPY installation • Operativsystem uafhængighed Embedded .NET
Fælles type system • Integreret i CLR • Kontrollerer hvordan CLRen erklærer, benytter og håndtere typer • Fælles for CLR, kompilere og værktøjer • Indeholder predefinerede typer • Alle klasser nedarver fra System.Object klassen • En VB klasse = en C# klasse = en XX klasse = ... • Marshalling er ikke nødvendig • Eks: Alle VBs datatyper mappes til CLR typer • Features i sprogene kan være forskellige Embedded .NET
.NET typesystemet • Value types • Primitives int i; • Enums enum State { Off, On } • Structs struct Point { int x, y; } • Reference types • Classes class Foo: Bar, IFoo {...} • Interfaces interface IFoo: Ibar {...} • Arrays string[] a = new string[10]; • Delegates delegate void Empty(); • Strenge Embedded .NET
Bits and Pieces • Assembly (application) - .exe / .dll • Indeholder manifest • Meta data • Klasse • Field • Method • Property • Event • Interface Embedded .NET
Understøttelse af mange sprog • Fælles framework: • Fælles type system • Base classes • CLR • Object-orienteret framework • Procedurale sprog er velunderstøttede • Funktionelle sprog er mulige • … • Mange sprog har været inddraget … også akademiske sprog Embedded .NET
Visual Basic (*2) C# (*3) C++ JScript J# (Java) 2*COBOL Perl Python * 3 Delta Forth Dyalog APL Haskell Component Pascal TMT Pascal APL Asml ANSI C F# (ML & Caml) SML Standard ML SmallTalk (S#) SmallScript * 2 Oberon Scheme * 2, Tachy Mercury Mondrian Fortran * 2 Eiffel Delphi Borland C++ Builder Objective Caml RPG IL * 3 Java LISP LOGO Lua .NET Languages Oz Ada Mixal PHP * 2 Prolog P# Pan# Powerbuilder BrainFuck (X#) Pizza Beta (Aarhus University) Embedded .NET
.NET i en embedded sammenhæng • Windows • Windows XP embedded med .NET framework installeret • Windows CE / Pocket PC / SmartPhone • .NET Compact Framework 2.0 • .NET Compact Framework 2.0 • Delmængde af det ”komplette” .NET framework 2.0 • En del af Visual Studio 2005 (release sensommer i år) • Vil være i ROM på nogle kommende devices Embedded .NET
Tykke klienter til store og små Visual Studio .NET+ Smart Device Extensions .NET Compact Framework .NET Framework Pocket PC + PPC Phone Edition Notebook PCs MicrosoftSmartphone Tablet PCs Other WindowsCE Devices … Windows CE Windows XP Embedded .NET
Windows Mobile Roadmap MoreDevice Choices 2000 2002 2003 2003Second Edition FutureWindows Mobile Platform Core OS WinCE 3.0 WinCE 3.0 WinCE 4.2 WinCE 4.2 WinCE 5.0 BetterDevelopment eVC 3 (C++)eVB 3 (VB) eVC 3 (C++)eVB 3 (VB) eVC 3 (C++)eVC 4 (C++) VS.NET 2003(C#, VB.NET) eVC 3 (C++)eVC 4 (C++) VS.NET 2003 (C#, VB.NET) Visual Studio 2005(C#, VB.NET, C++) MFC Win32, POOM MFC, ATL Active SyncConnection MgrMAPIOBEXTelephony ATL 4.2, .NET CFEnhanced Emulator Configuration Mgr,Bluetooth, SMS .NET CF SP2VGA (PPC)QVGA (SP)SquareLandscape .NET CF 2.0MFC 8.0, ATL 8.0Broad managed code support Notifications Broker, Location, Camera, Watson, D3DM Richer Platform Capabilities Embedded .NET
Managed Server side Native Visual Studio 2005 ASP .NETMobile Controls MFC ATL .NET Compact Framework 2.0 Win32 Software Platform (APIs) Data Access Device Management Presentation Communication Multimedia Remote APIConfiguration*Bluetooth Not. Broker Pocket Watson Connection ManagerTAPI*SMS* MAPI* POOM* Home ScreenUser Interface/ShellHTML ControlDOM SQL MobileADO CEXMLCE DBOLE DB GAPICameraD3DM Windows Mobile CE DBActiveSync SQL Mobile Pocket OutlookPocket Internet ExplorerWindows Media Player WindowsCE Drivers Device Hardware Radio ProcessorMemory GSM/GPRSCDMA/1xRTT WiFiBluetooth DisplayUSB or Serial * = Managed wrappers Windows Mobile Platform Embedded .NET
Visual Studio 2005 emulatorer Pocket PC SmartPhone Embedded .NET
Garbage Collection • Garbage Collection rydder op • Som udvikler skal vi kun bekymre os om at ”new”e objekter, GC ”delete”r objekterne for os • Ved GC forfølges alle GC Roots (registre, stack for samtlige tråde, statiske referencer m.v.) • Alle objekter der kan nåes fra en GC Root er del af programmet – øvrige er ikke og kan Garbage Collectes Embedded .NET
Garbage Collection • Garbage Collection med generationer • Hvis objekter overlever en garbage collection er der stor sandsynlighed for at de derefter lever længe • Objekter oprettes i generation 0, men bevæger sig mod generation 2 hvis de overlever længe nok tid Embedded .NET
Processer, AppDomains og Threads • En .NET applikation artes ved • at .NET CLR’en launches • Der skabes et AppDomain • Applikationen loades i AppDomain’et • Applikationen afviklesi en eller flere tråde • AppDomain er en logisk processgrænse Windows Process der afvikler .NET applikation .NET CLR AppDomain AppDomain AppDomain Threads Embedded .NET
Fra single- til multithreaded applikation • Flere samtidige I/O operationer • File, netværk, webservices etc. Start tråd1 Start tråd2 Start tråd3 Afvent tråd1 Afvent tråd2 Afvent tråd3 Indlæs fil1 Indlæs fil2 Indlæs fil3 Indlæs fil1 Indlæs fil2 Indlæs fil3 Embedded .NET
Start og join af tråde • Thread demo • Start et antal tråde og afvent at alle tråde afsluttes System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ThreadStart(ProcessThread)); thread.Start(); // ... // Afvent at tråd afslutter thread.Join(); // Alternativt – afvent på tråd afslutter eller timeout if (!thread.Join(new System.TimeSpan(0, 0, 2))) { // Afsluttede ikke indenfor 2 sekunder } private void ProcessThread() { // ... } Embedded .NET
Thread pool • Thread pools er et velkendt design pattern i forbindelse med multithreading • Minimerer resourceoverheadet ved brug af tråde • .NET har en indbygget thread pool • Opretter 25 ”arbejds”-tråde første gang den benyttes Sæt arbejdsopgave1 i kø Sæt arbejdsopgave2 i kø Sæt arbejdsopgave3 i kø Afvent at de afslutter Indlæs fil1 Indlæs fil2 Indlæs fil3 Embedded .NET
Thread pool • Thread pool demo • En tråd i thread pool afslutter ikke når ”arbejdet” er fuldført, derfor kan join ikke benyttes System.Threading.WaitCallback threadCallback = new System.Threading.WaitCallback(ProcessThread2); System.Threading.ThreadPool.QueueUserWorkItem( threadCallback, fileName); // ... //Egen logik benyttes i stedet for join // ProcessEnded er en lokal property (der ikke er vist her) while (!ProcessEnded) { System.Threading.Thread.Sleep(10); } Et vilkårligt objekt kan overføres her private void ProcessThread2(object state) { // ... _processEnded = true; } Embedded .NET
Hvorfor? Færre fejlkilder! • .NET platformen (og andre managed omgivelser) minimerer fejlkilder • Referencer (frem for pointere) og Garbage Collection • Memoryleaks (udvikler fejl eller cirkulære referencer) • For tidlig frigivelse af hukommelse • Ikke muligt at skrive eller tilgå hukommelse udenfor programmet • Runtime checking • Der kan ikke skrives ud over kanten af et array • Typecasts til forkert type giver runtime fejl • Stærk typede sprog – f.eks. C# • Compileren sikrer konsistens brug af typer m.v. Embedded .NET
Hvorfor? • OO principper • Kan gøre komplekse problemer mere overskuelige • ”Plug-and-play” arkitektur – f.eks. strategy pattern • Uniformt typesystem • Præcise fejlmeddelelser • Exceptions stacktrace letter fejlfinding også uden debugging • Meta programmering • Reflektion • Assemblies • Versions, sikkerheds og deployment afgrænsning Embedded .NET
Spørgsmål www.captator.dknyheder, artikler, information, ... Embedded .NET