I guess my main point here is, from my experience, success in an embedded systems class requires good knowledge of both hardware and software. For instance, lets take a LCD screen. Simple enough and to most people not an impressive device considering there are far more advanced displays out there, but there is a learning curve in getting the hardware to work properly. When dealing with new hardware you should ask several questions. Some of the ones I think of are:
- Have I done an over-view of the documentation?
- How do I interface with the new hardware? Is there more than one way to do this?
- What are the timing constraints? For instance, what is the proper set-up and hold time to get data and commands in and out?
- If I am dealing with a hardware driver is the interface simple enough to write in the embedded processors assembly language (ARM, CPU12, etc.), or is the interface so complex that the added abstraction of a higher level programming language such as C will help managing the project better and in a more timely manner?
- What assembly level instructions would be helpful in communication.?