DCU Home | Our Courses | Loop | Registry | Library | Search DCU
<< Back to Module List

Latest Module Specifications

Current Academic Year 2025 - 2026

Module Title Edge Programming with C/C++ & Rust
Module Code EEN1097 (ITS: EE402)
Faculty Engineering & Computing School Electronic Engineering
NFQ level 9 Credit Rating 7.5
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.


WorkloadFull time hours per semester
TypeHoursDescription
Lecture36On-campus lectures with asynchronous screencast recording.
Assignment Completion40Independent work on the two assignments. Additional independent study required to close off knowledge gaps (as below).
Online activity20Recorded tutorials requiring independent engagement. Video solutions provided for each of the tutorial questions.
Independent Study92Engagement with Loop quizzes, Git engagement, study for assignments and the terminal examination.
Total Workload: 188
Section Breakdown
CRN12245Part of TermSemester 1
Coursework100%Examination Weight75%
Grade Scale40PASSPass Both ElementsN
Resit CategoryRC1Best MarkN
Module Co-ordinatorDerek MolloyModule Teacher
Section Breakdown
CRN12246Part of TermSemester 1
Coursework100%Examination Weight75%
Grade Scale40PASSPass Both ElementsN
Resit CategoryRC1Best MarkN
Module Co-ordinatorDerek MolloyModule Teacher
Section Breakdown
CRN21503Part of TermSemester 2
Coursework100%Examination Weight0%
Grade Scale40PASSPass Both ElementsN
Resit CategoryRC2Best MarkN
Module Co-ordinatorBrendan HayesModule Teacher
Assessment Breakdown
TypeDescription% of totalAssessment Date
AssignmentC/C++: OOP with Classes assignment. Assignment made available Week 2. Git and report submission required.10%Week 6
AssignmentRust/C++: Client/Server GUI Application. Available in Week 8. Git, report and video submission required.10%Week 12
Loop QuizAutomated Quizzes & Assessments: Automatically graded in-Loop assessments. These will be available each week for one week only to encourage participation and timely engagement with assignment activities.5%n/a
Formal ExaminationClosed book on-campus computer-based examination. The C/C++/Rust Compilers and IDEs are available to allow students to write practical code. Select reference materials available (e.g., APIs).75%End-of-Semester
Reassessment Requirement Type
Resit arrangements are explained by the following categories;
RC1: A resit is available for both* components of the module.
RC2: No resit is available for a 100% coursework module.
RC3: No resit is available for the coursework component where there is a coursework and summative examination element.

* ‘Both’ is used in the context of the module having a coursework/summative examination split; where the module is 100% coursework, there will also be a resit of the assessment

Pre-requisite None
Co-requisite None
Compatibles None
Incompatibles None

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:
  • Brian W. Kernighan,Dennis M. Ritchie: 1988, The C Programming Language, Pearson Educación, 312, 0131103628
  • Bjarne Stroustrup: 2013, The C++ Programming Language, Addison-Wesley Professional, 1346, 9780321958327
  • Paul J. Deitel,Harvey M. Deitel: 0, C++ how to Program, 9332585733
  • Derek Molloy: 2019, Exploring BeagleBone, John Wiley & Sons, 800, 1119533163
  • Jim Blandy,Jason Orendorff,Leonora Tindall: 2021, Programming Rust, O'Reilly Media, 622, 1492052590
  • Jasmin Blanchette,Mark Summerfield: 2008, C++ GUI Programming with Qt 4, Prentice-Hall PTR, 718, 9780132354165


Articles:
None
Other Resources

  • 1: Website, 2025, ● The Rust Programming Language (The Book), 2024, this is the official guide to learning Rust, authored by the Rust core team. It covers Rust fundamentals, including syntax, ownership, concurrency, and more advanced topics,
  • 418799: 1, Website, 2024, Rust by Example,
  • https://doc.rust-lang.org/rust-by-example/: 418800, 1, Website, 2025, Embedded Systems with ARM Cortex-M Microcontrollers in Assembly Language and C
  • https://web.eece.maine.edu/~zhu/book/tutorials.php: 418801, 1, Website,
  • https://docs.espressif.com/projects/esp-idf/en/stable/esp32/index.html:
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.

<< Back to Module List View 2024/25 Module Record for EEN1097