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 1. Analyse real-world software system challenges and design structured object-oriented solutions with well-defined class hierarchies. 2. Apply functional programming techniques in C/C++ to resource-constrained, computer-aware edge environments. 3. Employ object-oriented programming principles to develop scalable edge applications for smart embedded devices. 4. Design abstract data type solutions by leveraging the C++ Standard Template Library and generic programming techniques. 5. Build Rust-based solutions for edge device architectures (e.g., embedded systems on ESP32) and optimise applications for enhanced performance and resource management. 6. Implement Rust paradigms that incorporate functional, imperative, and systems programming along with trait-based polymorphism. 7. Develop proficiency in Rust by writing clean, efficient, and maintainable code that prioritises safety, reliability, and performance, and by investigating memory management techniques in edge applications. 8. Create robust user interface applications using GUI frameworks and event-driven programming paradigms. 9. Build Rust-based solutions for edge device architectures (e.g., embedded systems on ESP32) and optimise applications for enhanced performance and resource management. 10. Design socket-based communication applications for distributed client/server systems. 11. Explore concurrency models and implement multithreaded applications. 12. Manage software development projects using Git and industry best practices. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
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. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||