Archive for Engineering

Importance of ADT and API Design in Embedded Systems Development (For Beginners)

Design of ADTs and APIs are an instinct to the seasoned embedded systems developer. This is not stressed enough in the academe, though, so I would like to share my insights on the importance of ADTs and APIs so you, as the student or beginner embedded systems developer, can appreciate their importance. :D

ADTs stand for Abstract Data Types. APIs stand for Application Programming Interfaces. ADTs are software things composed of data structures and operations. APIs, on the other hand, are function calls that simplify the use of a particular functionality in your system. You might have used APIs in your hobby projects, for example, accessing an ADC peripheral using simple function calls, or sending data through the UART without having the need to directly access the UART registers.

Designing applications with the right ADTs and APIs in mind have lots of benefits:

- ADTs and APIs make software more cohesive. More cohesion means that the functionalities of your components are more focused and specialized to a particular application.

- ADTs and APIs make software less coupled. Coupling refers to the dependency of software components to one another. The less dependent they are, the better, as you can change one software component without affecting other components that much.

- ADTs and APIs make software reusable. This is an after-effect of high-cohesion and low-coupling. You can reuse software components if they are focused on their job and are not dependent too much on other software to function.

- ADTS and APIs make software easy to maintain. Well-written ADTs and APIs abstract the implementation of your operations from higher, system-level applications, thus allowing you to modify the implementation with very little change to the dependent application.

With all these benefits, ADTs and APIs are important to embedded systems development because they provide a sound embedded systems software design. Embedded systems are driven by software, and just like any other software, embedded systems benefit from a good architectural-level and system-level design.

Up next: Case Study: ADTs and APIs in Mobot Design.

Cheers!

Leave a Comment

Getting loads of ‘boot’ on bootloaders

Some of my students bought a MCU development kit from a nearby electronics shop.  Everything was going well until they put out the MCU packaged with the development board and replace it with their own. Voila! “No bootloader found.”

The question now is, what is a bootloader? And how does it affect MCU development?

Bootloaders allow programming of the MCU on-the-fly using a common serial interface like UART or USB. This is very convenient because you can use your PC directly without the need to buy a separate programmer device or other special circuitry to program the MCU. Moreover, on a plus-side, these bootloaders come with a user-friendly programming GUI which makes programming the MCU a lot easier.

The downside of bootloaders is that they are just like any other MCU program: they should first be burned into the MCU before they work. If your MCU is not programmed with a bootloader then you’re back to square one. No bootloader means programming the MCU the old-fashioned way using specialized devices or special circuitry.

My advice on this: avoid development kits that use bootloaders to program the MCU. If the MCU programmed with the bootloader got busted, you’re dead. Good luck finding a copy (probably proprietary, closed-source) of the bootloader from your supplier. Oh you’re lucky to have one? Better buy your own programmer device! Oh, you don’t need the bootloader anymore… :D

Noriel Mallari is a Full-Time Instructor in DLSU. He is involved with several embedded systems design projects and is teaching Electronics and Communications, and Computer Engineering major courses. You can contact him via e-mail at noriel.mallari at gmail.com.

Leave a Comment

Turn your brain cells to cash: charging clients for engineering costs

So you are a fresh grad who just got onboard a big, confidential, “change the world” project. This is your first industry project outside school, and you don’t know what to do. Or maybe you’re the promil kid who haven’t graduated yet. Let me guess the first question you have in mind… How do I charge these people for my time and brain cells?

There are two ways to charge clients for your time, expertise, and brain cells: NRE cost + charge per unit or one-time design fee. One is good over the other depending on the situation and your disposition.

One option is NRE cost + charge per unit. NRE  means non-recurring engineering cost. This option allows you to get paid a minimum fee at the start of the project, and get paid (a small amount) based on the volume of products or devices that sells, which you helped design. This option is bad if you don’t see the device being sold in volume, specially with a very low initial fee. However, this option can be very good if your project is going to generate volume, something like the thousands. One peso per device times 100000 devices would be Php 100,000.

The other option is one-time “big-time” design fee. This is not limited to a one-time payment at the start of the project: payment can also be “staggered” and given to you in phases. This option is good for one-time design projects, specially if what you work on is just one device like a test machine or a prototype. The pay should also be significant over the other option. This option is bad if you see the project as generating lots of volume, in which case, you won’t be earning as much compared to the other option.

Some companies and clients prefer one option over the other. You just have to figure out which one will work for you and for them. :D

Leave a Comment

Follow

Get every new post delivered to your Inbox.