Latest Module Specifications
Current Academic Year 2025 - 2026
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Description This module provides an in-depth exploration of programming for edge and ‘smart’ connected embedded systems using C/C++ and Rust. Students will learn both fundamental and advanced programming topics, including memory management, GUI programming (e.g., with Qt), object-oriented programming in C++, socket programming for distributed applications, optimisation techniques, and concurrency. An embedded platform (e.g., ESP32) together with Git will be used for hands-on assignments and projects, and while some prior experience in functional programming (e.g., Python or C) is expected, it is not required. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Learning Outcomes | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
All module information is indicative and subject to change. For further information,students are advised to refer to the University's Marks and Standards and Programme Specific Regulations at: http://www.dcu.ie/registry/examinations/index.shtml |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Indicative Content and Learning Activities
Object-Oriented Concepts and Edge Programming: Introduce fundamental OOP principles (classes, objects, encapsulation, inheritance, polymorphism) without coding. Provide an overview of edge programming and embedded systems using ESP32-class devices. Development environment (e.g., VSCode) setup with supplemental guides and self-assessments. Basics of Embedded C Programming Transition from standard C to embedded C within C++ contexts, covering hardware-aware syntax, data types, operators, and control structures. Discuss embedded-specific considerations such as interrupts, I/O operations, and the use of volatile. Embedded C Programming and C++ Classes Examine memory layout and management, including pointers, pointer arithmetic, and common pitfalls. Introduce C++ class fundamentals, including constructors, destructors, and dynamic memory management. Advanced C++ Class Concepts Deepen understanding of C++ by covering inheritance, virtual and non-virtual methods, abstract classes, explicit casts, const modifiers, and operator overloading. Provide hands-on practice through self-assessments. Advanced C++ Techniques and Class Completion Cover advanced topics such as copy constructors (including modifications), multiple inheritance (diamond problem), friend functions, static members, and exception handling. Address additional topics like scope management, structs, unions, and inlining with self-assessments as the assignment deadline approaches. Standard Template Library (STL) and Rust Introduction Explore the C++ STL, including template functions, generic programming, smart pointers, move semantics, and lambda functions. Introduce Rust programming fundamentals: setting up the development environment, understanding the ownership model, borrowing, and safe memory management. Provide video tutorials on STL and Rust toolchain setup. Core Rust Concepts Transition from C/C++ to Rust by exploring Rust’s data types (scalar and compound), variables, functions, control flow, and pattern matching. Delve into ownership, borrowing, lifetimes, structs, enums, tuples, and generics. Introduction to GUI Programming for Embedded Systems and Advanced Rust Continue Rust topics for ESP32: installation, toolchains, GPIO and serial control, bare-metal programming, and interrupt handling. Introduce Qt (or similar API) for embedded development: setting up Qt, understanding its object model, using signals/slots, designing UIs with Qt Designer, and deploying applications. Socket Programming for Distributed Applications Review networking fundamentals including TCP/IP models, and explore socket APIs in C++/Rust. Examine client-server architectures, non-blocking sockets, error handling, and multiplexing. Introduce asynchronous programming in Rust, implement simple client-server and web socket applications, and discuss secure networking with TLS/SSL on ESP32. Networking and Concurrency Explore concurrency models, including multithreading versus multitasking, RTOS basics, and synchronisation primitives (mutexes, semaphores). Discuss thread management, race conditions, and thread-safe programming practices in both C++ and Rust. Focus on asynchronous network programming, Rust’s concurrency model, and practical implementation on ESP32. Code Optimisation Strategies Address performance optimisation in C/C++ and Rust using profiling tools, compiler optimisations, inline functions, loop unrolling, and inline assembly. Discuss strategies for minimising heap usage, efficient use of traits in Rust, benchmarking, power management, and cross-compiling for ESP32. Resource Management Focus on efficient memory management in Rust on embedded systems, exploring advanced ownership/borrowing, macros, and zero-cost abstractions. Address memory footprint reduction, power optimisation, and efficient use of peripherals with unit and integration testing using Cargo. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Indicative Reading List Books:
Articles: None | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Other Resources
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Practical hands-on experience is crucial in this module, so ensure you have access to the necessary hardware (ESP32 development board) and software tools as part of this module. These boards will be made available to students. Collaboration and the use of LLMs in support of your learning is encouraged, but all submitted work must be your own. This syllabus is designed to provide a comprehensive understanding of edge and embedded systems programming using both C/C++ and Rust, preparing students for advanced projects and careers in resource-aware programming, including edge and embedded systems development. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||