This project develops a coordinated set of materials for integrating time-oriented embedded system programming into a computing curriculum. The project develops materials describing a disciplined approach to time-oriented programming that emphasizes the use of state machines for computation and the explicit programmer management of time, described in teaching materials including an online book and extensively animated PowerPoint slides. Recognizing the key barriers to focusing on a disciplined approach, the project develops a virtual microcontroller, which is freed from the complex details of modern microcontrollers stemming from legacy or mass-production concerns, and which instead possesses simple input and output pins and a basic timer component with an intuitive programming interface. The virtual microcontroller is supported by a single compilation, simulation, and debug environment, eliminating the complexity involved with setting up and maintaining microcontroller tools. The teaching material is based on the virtual microcontroller, and a set of online lab exercises is also included. For physical implementation, the virtual microcontroller can be mapped to a variety of existing microcontrollers or even to PCs or field-programmable gate arrays, thus decoupling lab hardware from teaching materials. Follow-on courses or labs can then introduce students to low level details of microcontrollers as appropriate.
The project's developed materials define and support the appropriate abstraction for disciplined time-oriented programming, exposing low-level resources necessary for a solid bottom-up understanding of time-oriented programming (timers, interrupt service routines, processor cycles), hiding minutia that detracts attention from higher-level concepts, describing a disciplined synchronous state machine approach. The coordinated materials enable any instructor to introduce disciplined time-oriented embedded programming into a computing curriculum as early as the freshmen year without concern for complex lab setups or of overwhelming students with low-level hardware/software details. The net result is that disciplined time-oriented programming methods can be introduced earlier and to a larger audience.