Recently, I was assigned to a project that assisted a customer in rapidly designing a micro controller embedded system capable of wired communication with other devices. Our involvement in the development of this project allowed the customer to focus on higher-level details, which were then built off of our implementation.
This completed project has resulted in a functional embedded system controller that can be used to send and receive messages over a Controller Area Network (CAN) bus, as well as over a wired Ethernet connection using the User Datagram Protocol (UDP). We intend to use the knowledge gained from this development to further advance the quality of future software, as well as continue to improve the current implementation.
The custom Application Programming Interface (API) focuses on simplicity and re-usability, since less time spent programming results in shorter, cheaper development and potentially fewer mistakes. Developers can quickly implement desired functionality and tune as needed for adding functionality.
Building from the Ground up
Included in the programming environment is a tool chain that interfaces with the micro controller on a very low-level; for example, the micro controller has CAN pins and a simple driver. However, we needed to develop implementation-dependent functionality, including initialization and data transfer. Another challenge was making this software to be extendable to future projects to minimize the overall work required.
The CAN communication API involves an initialization function and simple data send and receive functions with little overhead. We added first in, first out buffers to the transfer functions to decrease the number of calls needed. The functions are highly configurable and allow the customer to alter functionality further down the road.
For wired Ethernet communication, UDP was chosen in order to reduce complexity when compared to other protocols, including the Transmission Control Protocol (TCP) which involves handshaking and more overhead. The developed API allows for data transfer function calls that can be built upon further.
Simplifying the Process
One of the most important aspects of software development is creating software that can be continued by another team as easily as possible. While re-usability involves crafting straightforward implementations with intuitive functionality, it also means supplying sufficient documentation so teams are able to work without the need to consult the original developers. We included a detailed guide that includes project installation instructions, code descriptions, and sample code to allow the customer to quickly adapt our supplied code to their needs.
To adapt the software for future usage, a developer can use the base API to create further, more advanced functionality. However, low-level details are accessible if required, and developers can change these functions if desired as well.
If you have a project that could benefit from our custom development services, reach out to us at firstname.lastname@example.org.