Week 06

Embedded Programming

This week turns out to be quite interesting. Initially, I expected it to be another walk in the park for me, given my years of work as a full-stack web developer. Naturally, I am well-versed in programming. However, I found myself lost for the most part of Neil's lecture. It became apparent to me just how much I still have to learn. I may be proficient in programming, but embedded programming operates on a different level (literally). From this lecture, I'm beginning to grasp the fundamental concepts of bits and atoms.

On the topic of levels, one intriguing subject discussed in the lecture was the distinction between high-level and low-level programming languages. Being a self-taught web developer, I've only acquired knowledge necessary to complete the projects at hand. Although I've heard the terms high-level and low-level languages before, I had mistakenly assumed that high level implied complexity due to its elevated status. However, the reality was quite the opposite! A high-level language, such as C, C++, JavaScript, and PHP, is closer to human language, making it more readable. However, it requires to be compiled or interpreted for the machine to understand. On the contrary, a low-level language, such as Assembly, is closer to machine language, making it more challenging to understand. Nevertheless, it provides precise control and efficiency over hardware resources.

I did learn programming with an Arduino board before, although I never had the opportunity to apply it to any real projects. I've always wondered what sets one board apart from another, what distinguishes a microprocessor from a microcontroller, and how to determine when to use one over the other. While I still couldn't grasp everything from this brief lecture, it did begin to address many of the questions I previously had about hardware.

Assignments of The Week

Group Assignment

  • Browse through the data sheet for your microcontroller.
  • Compare the performance and development workflows for other architectures.

Individual Assignment

  • Write a program for a microcontroller development board that you made.
  • Interact with local input &/or output devices.
  • Communicate with remote wired or wireless devices.

Lecture