Porting DotGNU to Embedded Linux
Alexander Stein
Abstract
Alexander Stein
Abstract
Programming PLC systems is limited by the provided libraries. In contrary, hardware-near programming needs bigger efforts in e. g. initializing the hardware. This work others a foundation to combine advantages of both development sides. Therefore, Portable.NET from the DotGNU project has been used, which is an implementation of CLI, better known as “.NET”. The target system is the PLCcore-5484 microcontroller board, developed by SYS TEC electronic GmbH. Built upon the porting, two variants to use interrupt routines withing the Portabe.NET runtime environment have been analyzed. Finally, the reaction times to occuring interrupt events have been examined and compared.:Contents List of Tables iv List of Figures v Listings vi 1 Introduction 1 1.1 Objective 1 1.2 Structure 2 2 State of the Art 3 2.1 .NET Framework 3 2.1.1 Common Language Runtime 4 2.1.2 Common Type System 6 2.1.3 Common Language Specification 6 2.1.4 Common Intermediate Language 7 2.1.5 Metadata 8 2.1.6 .NET Class Library 8 2.2 DotGNU 9 2.2.1 Hans-Boehm Garbage Collector 10 2.2.2 Foreign Function Interface 11 2.2.3 Interpreter 11 2.2.4 Unrolled Assembler Code 12 2.2.5 JIT Support 13 2.2.6 Debugging 14 2.2.7 X11 Support 16 2.2.8 Embedded Engine 16 2.3 Mono 17 2.4 Rotor 27 2.5 Coldfire vs. m68k 17 2.5.1 Exclusive Instructions 18 2.5.2 Floating Point Size 18 2.5.3 Other Differences 19 2.5.4 ABI Changes 19 3 Implementation 20 3.1 Incompatible m68k Code 20 3.2 Incompatible Alignments 21 3.3 Broken Toolchain 24 3.4 Unrolling Assembler Code 24 3.4.1 Setup of the Unroller 25 3.4.2 Unroller Implementation 26 3.4.3 m68k Specifics 27 3.4.4 Macro Counting 28 3.4.5 Extended Testsuite 29 3.4.6 Floating Point Remainder 34 3.4.7 Big Endianess 34 3.4.8 NOP is not just no Operation 36 3.4.9 Caches 36 3.5 C# Debugging 37 3.6 Interrupt Access in C# 38 3.6.1 Kernel Module 39 3.6.2 C# Application 40 3.7 Results 42 4 Performance 43 4.1 Portable.NET Benchmark 43 4.2 Benchmark Results 44 4.3 Interrupt Response Time 46 5 Final Remarks and Further Work 53 5.1 Conclusion 53 5.2 Improvements 53 5.2.1 Increasing Engine Performance 53 5.2.2 Tweaking IRQ Handling 54 5.2.3 Porting JIT to MCF5484 55 5.2.4 Miscellaneous 55 6 Acronyms 56 Bibliography 58 A Contents of the enclosed CD 61
A significance statement is not available in the OpenAlex record.
A contribution statement is not available in the OpenAlex record.
Method details are not available in the OpenAlex metadata.
Findings are not separately available in the OpenAlex metadata.
Limitations are not available in the OpenAlex metadata.
Application details are not available in the OpenAlex metadata.
Programming PLC systems is limited by the provided libraries. In contrary, hardware-near programming needs bigger efforts in e. g. initializing the hardware. This work others a foundation to combine advantages of both development sides. Therefore, Portable.NET from the DotGNU project has been used, which is an implementation of CLI, better known as “.NET”. The target system is the PLCcore-5484 microcontroller board, developed by SYS TEC electronic GmbH. Built upon the porting, two variants to use interrupt routines withing the Portabe.NET runtime environment have been analyzed. Finally, the reaction times to occuring interrupt events have been examined and compared.:Contents List of Tables iv List of Figures v Listings vi 1 Introduction 1 1.1 Objective 1 1.2 Structure 2 2 State of the Art 3 2.1 .NET Framework 3 2.1.1 Common Language Runtime 4 2.1.2 Common Type System 6 2.1.3 Common Language Specification 6 2.1.4 Common Intermediate Language 7 2.1.5 Metadata 8 2.1.6 .NET Class Library 8 2.2 DotGNU 9 2.2.1 Hans-Boehm Garbage Collector 10 2.2.2 Foreign Function Interface 11 2.2.3 Interpreter 11 2.2.4 Unrolled Assembler Code 12 2.2.5 JIT Support 13 2.2.6 Debugging 14 2.2.7 X11 Support 16 2.2.8 Embedded Engine 16 2.3 Mono 17 2.4 Rotor 27 2.5 Coldfire vs. m68k 17 2.5.1 Exclusive Instructions 18 2.5.2 Floating Point Size 18 2.5.3 Other Differences 19 2.5.4 ABI Changes 19 3 Implementation 20 3.1 Incompatible m68k Code 20 3.2 Incompatible Alignments 21 3.3 Broken Toolchain 24 3.4 Unrolling Assembler Code 24 3.4.1 Setup of the Unroller 25 3.4.2 Unroller Implementation 26 3.4.3 m68k Specifics 27 3.4.4 Macro Counting 28 3.4.5 Extended Testsuite 29 3.4.6 Floating Point Remainder 34 3.4.7 Big Endianess 34 3.4.8 NOP is not just no Operation 36 3.4.9 Caches 36 3.5 C# Debugging 37 3.6 Interrupt Access in C# 38 3.6.1 Kernel Module 39 3.6.2 C# Application 40 3.7 Results 42 4 Performance 43 4.1 Portable.NET Benchmark 43 4.2 Benchmark Results 44 4.3 Interrupt Response Time 46 5 Final Remarks and Further Work 53 5.1 Conclusion 53 5.2 Improvements 53 5.2.1 Increasing Engine Performance 53 5.2.2 Tweaking IRQ Handling 54 5.2.3 Porting JIT to MCF5484 55 5.2.4 Miscellaneous 55 6 Acronyms 56 Bibliography 58 A Contents of the enclosed CD 61
Key concepts: Porting, Computer science, Operating system, Programming language, Software engineering, Software