NASA Mars Rover

EEL 3370



I
EEL 3370 - C++ Programming for Embedded Computing

Object-oriented programming in C++ with emphasis on evaluation of alternative program design strategies applicable to Embedded Computing.  Data Abstraction, Encapsulation, Inheritance, Polymorphism, Class design with data structures, Template Library, and wxWidgets applications library.  These concepts work on big or small systems  (3 Credits)



Lecture materials


Instructions:
ReadMeFirst RVC - Online

General Syllabus - EEL 3370 Spring 2024
Note:  The source for ALL due dates 
(lectures, assignments, exams, exercises)
  are on the course syllabus calendar.



This course has gone Paperless
Anyone Can View (video)
All submissions MUST comply with requirements

Assignment Submission Form EEL 3370 Spring 2024

Note: Homework assignment links located below at
bottom of this web page
All submissions must have name, date, time for credit
Show this is your own work!



Week 1

Boston Dynamics Atlas
Pixar Renderman
Amazon Lumberyard

Bjarne Stroustrup Home Page
Tech Icons - Att.net
C++ Inventor
IntroLectures - HW

TIOBE Software Index

Smallobj.cpp


Week 2
Guides and Tutorials
Install MINGW
Install wxWidgets
Install Code::Blocks
Create a wxWidgets project in Code::Blocks

Compile Minimal sample
Themes


Week 3
C Language and Basics review
BasicsCpp
CoutCin.cpp
UsingNamespace.cpp
TestCin.cpp
TicTacToe - wxWidgets

Functions, structures, pointers review
FunctionExample.cpp

CallByReference-Best
CallByReference.cpp
Diff Between Call By Reference And Call By Pointer

OverloadedFunction.cpp


Week 4
Complete Functions, structures and pointers review
Examples:
Function Prototypes
C++ Pointers
UsingPointers
MorePointers
Add Two Distances (in inch-feet)
Older references
Increase
PtrToFn
PtrToStruct
Pointers vs Arrays
Cplusplus pointers

Begin classes overview
Classes


Week 5
Complete Classes overview
Constructor Destructor Example
Constructor Destructor More Example
Operator Overloading Example
See References section below

Polymorphism

Circle Rectangle Triangle
CircRectTriangle.cpp

Video examples
Classes & Pointers
Overloaded Constructor
Function Overloading1
Function Overloading2
This keyword


Week 6
Review
Exam#1

Week 7
Review Embedded Programming Model
Intro to Standard Template Library

Alexander Stepanov: STL and Its Design Principles

Intro to Vector video
  Sequence Containers
STL video<<<
Iterator Categories video<<<
Corrected Sort Example (with iterator)
getline for string input
SortExampleString


Examples:Iterators
Vector::Begin
Vector::Rbegin
Iterator Categories
cppreference.com - alt reference



Week 8
Intro to Standard Template Library

FunctionTemplateExample
cplusplus.com Example
FunctionTemplateVariations

Containers (refernce)
Templates video

Examples: Subscript
Vector::Operator[]
Iteration over std::vector
C++ Standard Library header files

There are two rules for container-based code:

  • Never pass containers into a function. Pass iterators instead.
  • Never return containers. Return -- or pass -- iterators instead.

Templates
Idiot's Guide to Templates


Week 9
Intro to Standard Template Library
Templates
Containers
Algorithms
Class Templates

A: Class Template Example:  Stack(TutorialsPoint)
Stack.cpp

B: Count STL example
Container and Algorithm details
Standard Template Library Usage Samples

Console Games

Games on GitHub


Week 10
Review and Exam 2

Week 11

A Quick Guide to Writing Applications
wxWidgets - Hello World

wxWiki
wxWidgets by Category

wxWidgets - wxPong


Week 12

wxSmithNotepad Instructions
wxSmithNotepad
Layout Management - Sizers

wxWidgets Tetris


Game Develop
Ensign-1
Mission-7
Steam Ensign

0 A.D. Wiki
0 A.D. Youtube

John Carmack a legend in C++
Doom3 BFG Source Code Review: Introduction
Space shooting game on Win, Linux, OSX

Amazon Lumberyard
Star Citizen

wxWidgets Wiki


Week 13
wxWidgets Applications
wxWidgets Projects
Software that uses wxWidgets
wxPython
wxPython Hello World
wiki wxWidgets
Audacity
Audio Editing
How to use Audacity
RAD Tools

Cedar Logic Simulator
Cedar Logic Intro Video
Turn Signals 1965 Ford Thunderbird

Programming language popularity: C++ bounces back at Python's expense


Week 14
wxSmith
YouTube Simple Example

wxSmith Features
wxSmith Tutorials

wxRenderTimerSmith
Instructions slide set

Week 15
Review

 Week 16 Exam 3


References

CPlusPlus.com
TutorialsPoint.com

Simple Snippets for beginners
StudyTonight.com C++
 
Resources

The New Boston video lectures

C++ shell
ideone.com
interactove compiler with assy

A quick guide to writing wxWidgets applications
survival guide - wxWidgets
Programming C++ GUIs with wxWidgets Library
Simple wxWidgets GUI Example
Helper Classes - Strings & Files
wxWidgets Class Hierarchy

wxWidgets online manual
wxWidgets by Category
wxWidgets Class Listing
wxWidgets Event List (bottom of page)

Pointers - Tutorial
Learning Pointers for Dummies
Buckys C++ Programming Tutorials

International Obfuscated C Code Contest
King Kong
King Kong Shading Fur


Literature References

Programming Principles and Practice in C++ - Stroustrup

C++ Primer - Lippman, Lajoie, Moo

Object-Oriented Programming in C++ - Lafore

Cross Platform Programming with wxWidgets
OnLine Version

Programming Principles Introduction - Max Berger


10 Steps for Installing Software Packages

Introductory page for Windows, Mac, and Linux
Installing wxWidgets and Setting up Your IDE

For Windows and this class:
You must follow THESE 10 specific instructions
Step-by-Step Install Instructions

Below are Dr. Watson's in class notes:
Step 1 - Install TDM MinGW
Download TDM MINGW

Step 2: Check correct Path variable for TDM-GCC-64
Step 3: - Confirm gcc correct path variable

Step 4: - Install wxWidgets source
wxWidgets downloads or directly
wxWidgets Windows installer 3.1.x version

Step 5:  - Build wxWidgets library
See slide 15 for commands

Step 6: - Download & Install Code::Blocks
Install Code::Blocks (IDE only)

Step 7:- Create wxHelloWorld project
Create a wxWidgets project in Code::Blocks


Mac OS X Faq for wxWidgets

Installing Code::Blocks on Mac - YouTube

Compiling wxWidgets using the command-line

How to Install C++ Code::Blocks in Macintosh




Homework

HW1: Bjarne
Review following movie:
Going Native -Stroustrup
answer the questions listed in the document
HW1


HW2 : wxHello
See Software Packages above:
Follow 10 Steps for Installing Software listed above
Be sure to add time and date to the Status Bar
Turn in a screen copy of running application
from Slide 38 (including Time and Date)


HW3: Operators
Note:  HW and PW are two separate submissions
HW3
Program of the week PW3 wxEdit

HW4: Functions
HW4
Program of the week PW4 FO

HW5: Classes
HW5
Program of the week PW5 FS


HW6: Containers
HW6
Program of the week PW6 Samples

HW7: List
HW7
Program of the week PW7 Timer
RenderTimer.cpp

HW 8: Template
HW8
Program of the week PW8 Mathplot
mathplot.cpp
mathplot.h
main.cpp

HW9: wxPong
Download, install and run Pong game
Instructions - HW9-wxPong
wxPong Project zip file



HW10: Tetris
Download, install and run Tetris game
wxTetrisSource
Create new project file and add all source files
Build, run, and screen capture to turn in

HW11:  Replaced by DFS Project
Instructions coming below

Reference List Applications for wxWidgets
wxWidgets Applications
wxWidgets - Who uses
Software Using wxWidgets




DFS - Random Maze Generator and Solution Project

Everyone in EEL 3370 is required to complete the DFS Project 4 Modules for 10% of your course grade. Submission details are included in the instructions for each module, linked below.  Due dates are listed on the Syllabus, Lesson 1 is due with Week 8 Assignments.

All of the lessons include wxWidgets code implementations.  There are a series of four Coding Challenge videos which instruct about the Graph Theory using P5.js to create the algorithm.  Your work will be to view the video explanation and then get the wxWidgets version running with algorithm implemented for submission.

Lesson 1 explains creating a Maze on a Pane with a two dimensional array of Cells.  Click the image for Basic Maze instructions:
Lesson One Image

Lesson 2 uses wxSmith to automatically write framework code in wxWidgets where the algorithm can be implemented.   The second Coding Challenge video explains the algorithm to check for available neighbors of a cell.  An origin cell is specified and then each neighbor (top, right, bottom, left) is checked to see if it is an available edge.  The maze is explored while neighbor edges are available.  Cells being explored are marked pink color.  The algorithm stops when "No Neighbors" are available.  Click image for instructions:
Lesson Two Image

Lesson 3 uses the previous wxWidgets framework with simple modifications.  The third Coding Challenge video shows how to erase walls between cells that have connecting edges.  In this Lesson, we will be clearing the Walls for the Current Cell and also the 'from' Cell.  A link for the 'from' cell is saved in the current cell for tracing the solution.  Click Image for "No Walls" instructions:
Lesson Three Image


Lesson 4 Coding Challenge video explains the concept of using stack backtracking to find all the unexplored cells in the whole Matrix.  All cells in the Matrix are explored using a stack of available cells.  Once all the backtracking is complete, all cells have been explored and the Maze is complete.  The a path from any target cell in the Maze can be found to the the graph origin.  Click Image for the Backtracking wxWidgets solution:

Lesson Four Example

Take some time, watch the videos and the exercises.  Make the submission for each Lesson.  Each Lesson is a single item in the submission drop down list.  Now you have created and used a wxSmith generated solution plus the implementation of the DFS algorithm to create and solve a Maze.  Enjoy.