Skip to content

Latest commit

 

History

History
53 lines (37 loc) · 4.13 KB

18349.md

File metadata and controls

53 lines (37 loc) · 4.13 KB

18-349: Introduction to Embedded Systems

Category Difficulty
Labs 8
Exams 7

Embedded systems is probably the most popular elective for ECE majors. It's a challenging class that combines hardware applications with lower-level software, which idealizes what an ECE major is. In this class, you get to program bare metal hardware in the form of a Raspberry Pi with a debugger board that you construct. Given the nature of the software you will write, you will have to learn some systems concepts, although very simplified. You will also have to learn about basic circuits related to the hardware you work with, and also learn how to read datasheets that tell you how to operate the hardware you work with.

Labs

Embedded is primarily a project class. All the homeworks are labs, where you develop some component of your Raspberry Pi system.

Each lab is unique in what you get to program, and you'll be exposed to a variety of material, starting from bare metal programs in the earlier labs, to higher level concepts like scheduling and kernel modules in later labs.

In the earlier labs, when you have bare metal programs, you'll find yourself facing many moments when things don't work, and since you're on bare metal, you have no idea what's wrong. The best way to write your programs is to put lots of error checking, so when things go wrong, you at least have a slight idea of where things started going wrong.

In later labs, you'll be working with higher level system constructs, so you need to be familiar with writing C.

Embedded does a good job encouraging the use of:

  • tmux: terminal window organizer
  • git: version control
  • vim: terminal IDE
  • doxygen: documentation

Although the learning curve can be quite high for git and especially vim and tmux, you should try to force yourself to use these tools. Using them well will reward you later on in labs, and also whenever programming in a terminal environment in general.

They might be a bit strict on these topics, as not tagging your submission will lose you a few points, and missing some documentation on doxygen will lose you points as well, but learning these tools well will help you in your programming career in the future, even if you end up doing higher-level software instead of systems.

Exams

Some major topics that are tested on exams are

  • Translating simple C programs into ARM and vice versa
  • Debugging C and ARM programs
  • Reading a datasheet, performing calculations based on datasheet specs
  • Scheduling, what the protocols are, how to implement them, and analyzing their efficiency. A common problem will look something like:
    • Here's protocol A
    • We have 3 threads that run like the following, use protocol A to schedule them on the graph in the space below
    • Are there any issues with this protocol? Is it fair? Are there weaknesses?
    • Is there an ideal scheduling of the threads in this problem that is better than protocol A?

How to do well

  • Figure out a way to debug your code on your Raspberry Pi early on.
  • Datasheets suck, but you should dedicate yourself to learning how to read what you need to know. They are also almost intentionally ambiguous in certain parts, so sometimes you will just have to try things out.
  • Sometimes exams have trivia, so you should write down some trivia on your cheatsheet. There is quite a heavy weight on multiple choice and short answer questions, so trivia can be worth a lot. Trivia includes things like history, how certain devices work or applications for them, definitions of particular concepts.
  • Learn how to use tmux, at least to the point where you can have multiple tabs and windows, and save sessions
  • Learn to use vim. You'll be much more efficient when programming on your Raspberry Pi. If you program on your own computer, you'll constantly have to upload code to the Pi, which can be slow. If you work on the Pi directly, there's no need to transfer code from your laptop to the Pi.
  • Learn how to use git so you and your partner don't have to merge code in person. This usually means at least understanding what branches are and making pull requests.