CMPE13, Winter 2013, Section 01: Extended Syllabus

Extended Course Description

CMPE13/L: Computing Systems and C Programming

13. Computer Systems and C Programming, S Introduction to the C programming
language as a means for controlling embedded and general computing systems.
Continuing the exploration begun in course 12, students move to higher levels
of abstraction in the control of complex computer systems. Prerequisite:
Courses 12 and 12L. Concurrent enrollment in course 13L required. R. Hughey.

13L Computer Systems and C Programming Laboratory Laboratory sequence in C
programming for embedded and general computing systems. Two two-hour
laboratories per week. Concurrent enrollment in course 13 required. 2
credits. R. Hughey

Explanation of prerequisite:

This course follows the "bottom up" approach to teaching programming. The
(CMPE8-)CMPE12-CMPE13 sequence provides students with the knowledge of how a
computer or embedded system is designed and programmed at the machine and
higher-level language levels. Course 12 focuses on the machine level, while
Course 13 takes student to a higher level language and extensive training in
structured programming habits and tools.

The knowledge of computer memory systems and low-level programming developed
in CMPE12 lays the groundwork for understanding C pointers, the classic
stumbling block of new programmers who start with C. The course also builds
on the exception and interrupt processing knowledge from CMPE12, a key
concept for following course CMPE121/L.

In addition to cementing students' understanding of computing systems through
the continued hardware/software discussion begin in CMPE12/L, this course
provides a C-based alternative to the Java course CMPS12A. C is the
fundamental software tool for the computer engineer, much as digital logic is
fundamental hardware tool.

Students completing CMPE13/CMPS18 will also be able to move directly into
CMPS12B, as with transfer students who worked in C on their
CMPS12A-articulated course.

Required Skills to Pass the Course

1. Tools for programming, including IDE, compilers, debuggers, and
linkers.
2. Knowledge of software design principles, including:
Top-down and bottom-up design
Documentation, inline and external
Coding style
The use of local variables
3. C programming fundamentals
A. data types, declarations, assignments
B. functions
C. conditional and loop structures
D. static and dynamic memory allocation and manipulation
E. I/O library and string functions
5. Interfacing of C with embedded systems
A. Using C to control hardware
B. Developing mixed assembly language and C programs.
6. Ability to use C to solve programming problems.
7. Ability to manipulate dynamic data structures such as linked
lists, multi-dimensional arrays, and structs.
8. Understanding of exception processing in C.
9. Ability to design, implement, test, and debug solutions to
open-ended programming problems using the C language.


Core topics:

1. Basic compiler environment, build, IDE, debuggers
2. Data types and operations, memory allocation of variables
3. Control structures
4. Functions, syntax, run-time stack, activation records
5. Pointers and arrays, strings
6. Testing and debugging
7. Recursion and run-time stack
8. I/O libraries
9. Static structures (typedef, struct)
10. Dynamic memory allocation, single and multi-dimensional arrays
11. Linked lists, stacks, queues in C
12. Introduction to Embedded programming

Optional topics:
1. Sorting
3. Runtime efficiency and profiling
4. Memory efficiency

Laboratory Exercises

The accompanying laboratory will include weekly programming
assignments, tutoring, and laboratory checkoff. Problems will
include some that are open-ended, with no available solutions. Major
projects will different with every offering.


0. Hello World, familiarization with IDE.
1. Calculator, Basic C programming (manipulation of variables and types with
procedure calls).
2. Vector Matrix Math Library, arrays and structs
3. Circular Buffer, Queues, Abstract Data Types
4. Interrupts and Timers, embedded hardware details
5. LCD display driving, timing, state machines
6. State of Game, state machine based game on uController
7. Morse Code Decoder, complex data handling
8. Micro Battleship, program integration.
9. ChatBot AI, complex multifile program, communications.


Comments on Following Courses:
CMPE121 (Microprocessor System Design), CMPE118 (Mechatronics): Both
of these courses require the use of C to control embedded systems.
Students must be able to manipulate basic dynamic data structures and
communicate directly with hardware using the C language. CMPE13
provides this training for EE and CE students.

CMPS12B (Data Structures):
CMPS12B studies data structures in Java, including stacks, queues,
trees, sorting, and Searching. Students completing CMPE13
will already be familiar with stacks and queues, but will have not
seen the non-linear data structures needs for sorting and searching.
The CMPE13 students will also not have had training in Java, and so
during the initial parts of CMPS12B will need to quickly acclimate
themselves. Note that CMPS12A is articulated to a number of community
college courses taught in C or C++. CMPE13 students can be expected
to have slightly more advanced C knowledge due to integration with
CMPE12, than these students.


Text: Kernighan and Ritchie, The C Programming Language, 2nd Edition,
Prentice-Hall, 1988, ISBN-10: 0131103628

Prepared by Richard Hughey, 6/09. Revised Gabriel Elkaim, 3/11.