Class Meetings:

Tuesday and Thursday, 2:20-4:30PM, MOR 230


Concepts of multi-level machines and computer systems organization. Utilizing microprocessors, digital computer studied at assembly; also, high-language levels with emphasis on concepts of central processor architecture, memory organization, input/output, and interrupts. Assembly language programming concepts applied to solution of various laboratory problems including I/O programming.

This course is very project intensive, involving programming in C and using hardware to interact with embedded systems. There will be 5 projects in total to slowly build the final project. The projects are cumulative in nature and build on previous work. There is a lot of creative freedom allowed and encouraged in the labs.

Grading Breakdown:
Lab 1: 15%
Lab 2: 15%
Lab 3: 15%
Lab 4: 15%
Lab 5: 25%
Random Short Quizes, 10 in total: 5%
Late Midterm: 10%

C programming
Memory and I/O
Modeling and design
Interrpts, timers, and polling
Operating systems and scheduling
Testing, safety and reliability
Embedded Linux and kernel modules
Integrating hardware with embedded systems


Dr. Allan Ecker:
EEB M358, Office Hours by Appointment (send email w/schedule, or stop by)


Umaymah Khan:
Wenjun Zhou:

In-Lab Office Hours:

Please note that we have more groups than workstations! For this reason if the lab is crowded we may move your equipment and log you out of your workstation!


Policies on Collaboration and Cheating

Copies of all source code should be turned in via gitlab.cs. You may find this procedure helpful. If you have trouble with SSH keys, this may be of use.
You do not need to follow a particular style guide but being consistent and legible counts! You will be expected to provide comments for your code, to a degree which maximizes legibility. Too few or too many comments are discouraged!
Lab 1 Assignment and Tarball. Lab is due Friday, April 7th.
Lab 2 Assignment and LCD Spec Doc Report due Friday, April 21st, demos during that week.
Lab 3 Assignment and supplemental files: Tar1, Tar2, and LKM Docs Report due Friday, May 5th, demos during that week.
Lab 4 Assignment and Supplemental Files Report due Friday, May 19th, demos during that week.
Lab 5, your assignment is "do something great". Here are some supplamental files. Report due Friday, June 2nd, demos during that week.

Lab Report Specification

For each lab assignment you will need to provide a simple report. It can be in any text format that is clear and legible, but should contain the following elements:
1: A Clear introduction which outlines in simple, brief language the set of features implemented. It should clearly describe both those parts directly requested and those parts added beyond the stated specifications.
2: A clear description of any prior work utilized beyond the established lab kit. For example, if you add a sparkfun SD card reader, link to where it can be sourced and explain its function.
3: An overview of the hardware connections. If the connections are complex enough to require a block diagram, provide one.
4: An overview of the software created. This should not go into too much detail and you DEFINITELY should not paste your source code here.
5: Any data or measurements which were taken. All data presented must be explained in clear language.

On Quality Lab Work:

If you are budgeting time for this class and doing the bare minimum to meet all stated requirements, you will not get a 4.0. I will say that again, work that meets only the stated requirements and does nothing else does not earn a 4.0 in this class. This is a necessary stipulation in a competitive class such as this one. A 4.0 represents mastery and excellence in a field. Mastery and excellence cannot be achieved by skirting the edges of a subject. They can only be achieved by diving deep, working hard, and by separating yourself from those who merely do good enough. To earn a 4.0 in this class, you will need to be among those who do more than just barely meet requirements.

You will FAIL a lab if:

-you do not attend your demo
-you do not submit source code
-you tamper with or take another group's parts
-you commit plagurism or otherwise cheat
-you commit any act of gross negligence or disrespect

Midterm: The midterm exam is scheduled for May 18th.

Lecture Notes and Supplements

The Big Note Pack The whole quarter, more or less, in a 91-page pdf.
Previous Quarter Exam Practice Document (VERY difficult and CS-centric!) Solution
Actual Previous Quarter Exam Solution
EE Students: Make sure to brush up on C, Pointers, and BASH!
CS Students: Look at basic GPIO connectivity and especially circuits as seen in Lab 4!
This is a 400 level class! We won't always give you all of the answers and you are embarking on a journey into some deep mysteries of embedded! Here are books, start guides, manuals, and other helpful things which may aid you!
Useful Resource: Turn-InProcedureUsingGitFromTerminal.pdf
Solution of setting ssh key: managing_multiple_ssh_keys_githinji
Beaglebone Black Rev A Starter Guide
Beaglebone Schematic
Learn Git Branching - a wonderful, fun page for practicing the less-obvious ways of Git
Lesser Known Git Commands - Some handy aliases for the git fans
Learn C the Hard Way - explains all concepts of C with lots of examples.
Embedded System Design: A Unified Hardware/Software Approach - explains basics of microcontrollers and design.
Linux Device Drivers - dense but first few chapters will be helpful.
The Linux Kernel Module Programming Guide - short and very informational on kernel modules.
Kernel Mode Programming Guide
Serial Port Interruption in Linux - Helpful for certain minicom-related issues! Docs - The true documentation of the Linux Kernel as written by actual Kernel maintainers!
Linux Insides - An e-book about the guts of Linux
Backslash vs Slash
Sublime Text I highly recommend this delightful text editor, especially if you are not already a vim user.
KDE Advanced Text Editor KATE doesn't have as many features as Sublime, but it's my personal favorite for how it handles sessions.
Building LKM on Beaglebone
Beaglebone Linux Source
ELF Binaries and their structure
GDB Debugging Example
HACKADAY - For when you are frustrated and need to be inspired by cool embedded stuff