[Main Course Page] | [FAQ] |
Course Description: In a very real sense, embedded software is what
makes our everyday world function. From self-driving cars to chemical
processing plant equipment, and from medical devices to the electric grid,
embedded software is everywhere. You already know how to write code for a
microcontroller. Now, learn software quality, safety, and security skills that
are required to make embedded systems that can handle the messiness of the real
world. This course provides in-depth coverage of the topics that are essential
to the success of embedded software projects based on case studies of industry
project teams that have suffered or failed. Students will learn about a variety
of topics including: lightweight but high quality embedded software processes,
technical best practices for embedded software, effective testing and
validation, causes of software system failures, software for safety-critical
systems, and embedded-specific aspects of software security. The material will
generally be broken up into a set of four related topics each week, with one
assignment per topic weekly, involving a combination of programming
assignments, tool use experiences, and research questions to get hands-on
experience at dealing with the types of problems that are encountered in
industry embedded projects. We assume you already know how to code in C and
understand the basics of microcontrollers. This course is about getting you
ready to build industry-strength embedded projects.
Undergraduate students are required to take 18-349 prior to enrolling in this
course. (18-348 is an acceptable substitute.)
Graduate students are strongly encouraged to take 18-600/15-213/15-513/18-213
before or concurrently with this course.
Frequently Asked Questions:
All of this is subject to change to ensure that the course is of the highest
quality possible given resource constraints, but the syllabus and policies will
be reasonably firm as of the first day of classes.
- Can I take this course at the same time as 18-600? It's my first
semester and I don't want to overload.
- This course is specifically designed to be accessible to first-semester
students in our MS program who are taking 18-600 concurrently.
- The programming assignments ramp up gradually and deal more with coding
style, not advanced language features. So it is a complement to 18-600. The
workload is moderate, targetted to a median of 12 hours per week of total
student effort, in keeping with the 12 unit course designation. You'll get
exposure to good coding style, an introduction to software safety, and an
introduction to computer security with an embedded system/IoT emphasis.
- This course overlaps my 18-648 recitation section from 5:30-6:00 PM. Is
- You need to be at the 18-642 lecture (this course) for the full lecture
- In previous years it was OK to leave the 648 recitation (the other course)
a few minutes early so this worked out OK. You should confirm with the 18-648
- I have a partial conflict on Friday recitation. Is that OK?
- You should be at Friday recitation for one of the two
scheduled hours. Either hour is OK, so as long as it is only a partial conflict
that is OK.
- We schedule two hours because we frequently have partial conflicts on
Friday. We'll sort it out the first week of class. If you have a partial
recitation conflict ask your academic advisor to approve your enrollment as
long as you're available for ONE of the two hours scheduled. And let us know so
we can plan accordingly.
- Does this course count for the M.S. CPS concentration?
- Is class attendance required?
- Yes. Lecture attendance is required, and a significant
portion of the learning will occur based on in-class interactions. You must be
at the full scheduled lecture time.
- Beyond a small "free absence" allowance, absences are only
forgiven if due to unanticipated medical conditions or other true emergencies.
If you expect to miss many class meetings due to job hunting, you should not
enroll. Plant trips and interviews are not acceptable excuses for
additional absences from lectures beyond the "free" absences built
into the grading formula. Students with excessive absences will not earn
credit for the course.
- You must physically be present in class for both exams. Dates for these
exams will be announced on the first day of class and will not change except
for a university closure on exam day or other similar circumstance. There is no
final exam, so you do not need to be on campus for this class during
final exam week.
- Recitation attendance is not currently enforced, but we reserve the right
to do so if problems emerge. If you skip recitation it is entirely up to you to
figure out what you missed.
- What kind of in-class participation is required?
- Students will be expected to do usually two exercises in small groups at
each class meeting. Different selected groups will be required to present the
results of their exercise druring the same class period. You'll need to
bring a portable computing device with you to class for the exercises
(generally a laptop computer or a reasonably capable tablet that can make slide
presentations and submit them via Canvas while you're in class).
- A few homework assignments will also be presented in class by students.
- In-class presentations are low stakes events as part of the ordinary class.
There is no need to dress up, and they are not formal make-or-break project
- Grading for this will be based primarily on good faith participation and
having something relevant to say, not on public speaking skills. It is
understood that this will be the first semester of US class attendance for many
international students. Minimum acceptable English verbal skills in keeping
with university admission standards are required.
- How does this compare with other courses?
- 18-349: That is an intro course that concentrates on an embedded
platform. 642 builds on this knowledge. 642 does not use an embedded hardware
module, but rather concentrates on higher level concepts and software quality.
- 18-648: That course concentrates on writing code in the context of a
real time operating system. 642 is primarily concerned with other aspects of
the system. Taking both 18-648 and 18-642 is a good idea if you want to
specialize in embedded systems.
- 18-649: That course had significant overlap in topics, but is no
longer taught. 642 is a partial replacement, but with significantly updated
content, less arduous project content, and an updated teaching approach.
- What kind of workload should I expect? Is this a "killer
- This is a 12 unit course and we adjust to keep things on track for an
average 12 hour per week workload.
- About half the lectures are videos that you watch outside class (mostly
15-20 minutes long, with a couple exceptions). You'll also have individual
homeworks each week as well as a solo thread of project segments. In class
we'll do the other half of the lectures live as well as generally two
small-group exercises during class time. While there are a lot of things going
on, in past years the average effort per week has been about 12 hours including
time spent in class and recitation (as self-reported by students on a weekly
time survey). Workload is relatively even across the semester.
- While project work is required, there is no "killer" project. The
deadlines are relatively small chunks rather than a big project deadline.
However, the projects do build upon each other, so it's important
to teach each project seriously. Slacking on the early projects is likely to
come back to bite you later, although later projects are designed to make it
reasonable to catch up with minimal or no penalty if you have a bad week
(depending upon whether this is a one-off problem or a consistent issue for
- The project assignments are primarily about code quality and design
quality. There is a safety project related to run-time monitoring. There isn't
a security project per se, although code quality is a foundation for both
safety and security.
- Students will report effort weekly with a goal of adjusting course content
to target about 12 hours per week median student effort including class
attendance time. Actual student effort will probably vary, with some spending
fewer hours and some spending more hours.
- What kind of technical background do I need to have?
- We assume you have taken an "introduction to microcontrollers"
course at some point, and know general software systems concepts. If you are a
CMU undergrad this equates to 18-240 and 18-349 (or equivalent) knowledge. If
you are a grad student you are responsible for ensuring you have this
knowledge. 18-600 will help, but you will additionally need some software
system skills you are responsible for filling in yourself.
- If you find yourself missing some embedded system concepts, have a look at
Programming Embedded Systems (2 ed) by Barr & Massa. This is available for
free on-line via the CMU library system Safari subscription (CMU-only link:
- You will be expected to read, write, and modify code in C using Unix
development tools (C++ is even better, although we don't go very deep into
that). Limited TA help will be available, but you're supposed to already know
how to do the basics. If you've only ever used Windows, we strongly suggest you
complete a Unix command line tutorial and have some familiarity with how
virtual machine images work before classes start.
- A significant fraction of the homeworks will be concepts and discussion
rather than writing code. However, you will have to be able to read and write
code for this course, and in particular the projects. The code will be
primarily C and C++. We'll use Robot Operating System (ROS) to provide a
simulation framework, but you don't need to know much about this unless that's
something you want to explore on your own.
- Detailed computer hardware/computer architecture knowledge is not required
for this course. However, you should know the basics of how computer hardware
- Appropriate software tools are available on ECE cluster and/or lab
machines. We'll use VirtualBox. In most cases you'll be able to run them on
your own computer as well, but we can't guarantee compatibility for all
systems. Sorting that out is up to you, but generally TAs and classmates have
been able to help students in previous years who had issues.
- What are the exams like?
- Exams will be mostly multiple choice, with some matching and short
fill-in-the-blank type questions.
- Exam questions will generally trace directly to lecture material, a
homework problem, a significant in-class discussion topic, or assigned reading.
- No, this does not mean they are easy. In previous years test of this type
tended to have an average score of 80%-85% out of 100%.
- We give out the previous-semester exam and answer key for practice.
- What about project teams?
- While there might be some assignments that require collaboration with
another student, there will be no lab teams or project groups for this course.
You're expected to do all the work on your own unless an
assignment specifically permits collaboration.
- There are numerous small-group peer review assignments in which you can get
feedback on your project code from class-mates. Making changes to fix issues
identified in peer review is the primary method of collaboration that is
specifically permitted. However, peer reviews are not for the purpose of
telling you how to solve a problem; they are limited to pointing out that you
have something that should be fixed.
- See the course policy for collaboration. In simple terms, it's OK to get
help from class-mates on general understanding or getting tools working, but
you are expected to do your own homework and do your own software development.
So if you are thinking of coasting through by getting a lab partner to do all
the work, you should pick a different class.
- What is the grading approach?
- Grading is straight-scale: 90=A; 80=B; 73=C; under 73 is failing. There is
no "curving." That means everyone can, in theory, get an A. Or not.
- The grading formula is in the course policy info.
- What is the textbook?
- There is no textbook. In some cases there is required reading, but it is
all freely available.
- We do require that every student have a tablet or laptop computer that can
be brought to class each week to participate in classroom exercises.
- The slide handouts are available on-line, and many lectures have a narrated
video available on YouTube to back them up.
- I'm on the wait list. Will I get in?
- It depends, and I can't predict how that will go until classes start. There
is a fixed maximum capacity set by the limitations of classroom size and TA
availability that we can't exceed. Many students are initially on the wait list
to give incoming MS students first shot, and are admitted the first week of
class when available seats can be filled from the wait list. Whether you get in
from the wait list usually depends on how many students drop after classes
start due to "shopping" for courses, and that varies wildly from
semester to semester.
- If you are on the wait list expect an e-mail from me during the first week
of class with an update on how that looks.
- How do I contact the professor or TA?
- Send administrative e-mail to:
- If you have a question about course technical content, "doubt,"
grading question, or other question that requires a technical response please
come to office hours.