Below is a preview of our week-by-week plan for the entire quarter. There may be slight adjustments and rearrangements as we go. The schedule for the final project is set and will not change.
In the readings below, K&R refers to Kernighan and Ritchie's classic text The C Programming Language (accessible via Stanford's subscription to Safari Books Online). Nick Parlante's EssentialC is another great C reference. Please do the recommended readings before lecture for best effect!
Date | Topics/Readings | |
---|---|---|
Week 1 | ||
Lecture Mon 3/28 |
Introduction and Welcome
( slides)
Readings:
|
|
Lab/assign |
Lab 0: Orientation
( writeup)
Please do the Lab 0 prelab preparation before coming to lab. |
Assignment 0: Git oriented ( writeup) |
Lecture Wed 3/30 |
ARM processor and architecture
( slides, code )
|
|
Week 2 | ||
Lecture Mon 4/4 |
ARM assembly and machine code
( slides, code )
|
|
Lab/assign |
Lab 1: Setup your Raspberry Pi
( writeup)
Please do the Lab 1 prelab preparation before coming to lab. |
Assignment 1: Implement a Larson Scanner ( writeup) |
Lecture Wed 4/6 |
From Assembly to C
( slides, code )
|
|
Week 3 | ||
Lecture Mon 4/11 |
C Pointers and Arrays
( slides, code )
|
|
Lab/assign |
Lab 2: Below C Level
( writeup)
Prelab to prep before lab. |
Assignment 2: Implement a Clock ( writeup) |
Lecture Wed 4/13 |
C Functions
( slides, code )
|
|
Week 4 | ||
Lecture Mon 4/18 |
Communication and the Serial Protocol
( slides, code )
|
|
Lab/assign |
Lab 3: Debugging and Testing
( writeup)
Prelab to prep before lab. |
Assignment 3: Implement a String Formatting Library ( writeup) |
Lecture Wed 4/20 |
Modules, Libraries, and Linking
( slides, code )
|
|
Week 5 | ||
Lecture Mon 4/25 |
Memory Management
( slides, code )
|
|
Lab/assign |
Lab 4: Linked and Loaded
( writeup)
Prelab to prep before lab. |
Assignment 4: Backtrace and Malloc ( writeup) |
Lecture Wed 4/27 |
C Mastery
( slides, code )
We've crossed the halfway point! We will use this lecture to catch-up/expand on lecture content covered lightly on first pass, and discuss how to further your mastery of C. Readings:
|
|
Week 6 | ||
Lecture Mon 5/2 |
Keyboards and the PS/2 Protocol
( slides, code )
|
|
Lab/assign |
Lab 5: Keyboard Surfin'
( writeup)
Prelab to prep before lab. |
Assignment 5: Keyboard and Simple Shell ( writeup) |
Lecture Wed 5/4 |
Graphics and the framebuffer ( slides, code ) | |
Week 7 | ||
Lecture Mon 5/9 |
Interrupts
( slides, code )
In this first lecture on interrupts, we'll focus on the low-level mechanics and what needs to happen at the assembly level to enable and process an interrupt.
|
|
Lab/assign |
Lab 6: Drawing into the Framebuffer
( writeup)
Prelab to prep before lab. |
Assignment 6: Graphics Library and Console ( writeup) |
Lecture Wed 5/11 |
Interrupts, cont'd
( slides, code )
Now we move up to the higher-level abstractions for interrupts, including library support for managing interrupt handlers and reviewing best practices for interrupt-safe code. |
|
Week 8 | ||
Lecture Mon 5/16 |
Sensors
( slides, code )
|
|
Lab/assign |
Lab 7: Raspberry Pi, Interrupted
( writeup)
Prelab to prep before lab. |
Assignment 7: System Monitor with Interrupts ( writeup) |
Lecture Wed 5/18 |
Anna & Maria on Performance
( slides, code )
Tips and tricks from Anna and Maria on making your code fly! Also, some quick tips for final projects. |
|
Week 9 | ||
Lecture Mon 5/23 |
Matt on Trust and Safety
( slides)
Matt's "whirlwind tour" of important topics including Trust and Safety, the Memory Hierarchy and Caching, Memory Safety, and Recommended Future Classes. Also includes some fun intermissions. |
|
Lab/assign |
Lab 8: Project Team Meeting 1
( writeup)
|
Final Project ( writeup) |
Lecture Wed 5/25 |
Computer Arithmetic
( slides, code )
Representation of signed and unsigned numbers, types and type conversion. |
|
Week 10 | ||
Lecture Mon 5/30 |
No lecture (public holiday) | |
Lab/assign | Lab 9: Project Team Meeting 2 | |
Lecture Wed 6/1 |
tbd | |
Week 11 | ||
Lecture Mon 6/6 |
/lectures/Sound | |
Lab/assign | ||
Lecture Wed 6/8 |
||
Week 12 | ||
Final Project Demo session Sun 6/5 at 2:00 pm Code submission due Mon 6/6 at 11:59 pm |