Firmware development is not easy! Writing production level firmware requires deep knowledge of computer engineering, processor architecture, electrical engineering, and software development. Many people claim to write 'code' but CLI Systems knows how to write firmware.
Areas of Expertise
The following are our areas of expertise, we encourage you to stack our knowledge up against other developers!
- Development in C and Assembly
- Microcontroller startup, interrupts, and clocking
- Cooperative multitasking architecture design (No-OS mainloop)
- RTOS integration, setup, and threading
- Device drivers for microcontroller hardware
- Embedded protocols
- I2C, SPI, CAN, Modbus RTU, RS485, RS232, and more
- Embedded Linux system image building
- Yocto, Buildroot, Ubuntu, etc
- Linux device driver development and improvement
- Application development for Linux systems
- Legacy systems
If you have an existing (legacy) embedded system written in C, we promise we can work with it. We are true experts in C, and we have worked with some really old and wild code!
This tends to surprise many people, but most C code we have seen is not well designed and/or not well written. If your code is like that, don't worry, we really have seen it all! We are perfectly comfortable digging in to an old application where the development team didn't quite get it right, or the original developer moved on with no documentation.
CLI Systems has provided the following services for legacy systems:
- Analyze C firmware and/or provide documentation
- Add features to a system
- Bug fixes
- Improve performance
- Yes, we can typically make it run faster
- Improve resource utilization
- Smart programming can recover RAM and flash space!
- Add OTA or a bootloader
- It's not uncommon for this to be an afterthought!
Microcontrollers (MCUs) are single chip solutions which contain all the core components for a computer system including CPU, RAM, program storage, and hardware for reading sensors or communicating with external systems over protocols such as SPI or RS232. Microcontrollers are full computer systems but come with absolutely no programming, it is the responsibility of the developer to write all the code for the MCU, and the responsibility of the manufacturer to program the final code release on to the MCU. Some libraries are available for things like simple operating systems, or WiFi protocols, but all 'application specific' programming must be done by an embedded developer, typically, from scratch.
CLI Systems has worked with the following processors and architectures
- ARM Cortex M0/M0+/M3/M4
- 8051 Architecture
The Linux operating system is a large open source project by thousands of developers over the last 30+ years. The source code for Linux is free and not owned by any company, so it is a common OS to use in an embedded system. Linux is designed to run on small computers up to large multi-processor mainframe servers and because of this, the hardware requirements for running Linux are much higher than running a small RTOS; Linux is not an option for a microcontroller system.
Many embedded hardware platforms support Linux, and CLI Systems has worked with many different embedded Linux systems for many different products. We have developed custom Linux images for products using the Yocto project, the Buildroot project, and OpenWRT Linux distribution. We are developers of device drivers for the Linux kernel as well as application level programs.
We have worked with the following processor families and Linux board manufacturers
- Broadcom BCM28xx family (Raspberry Pi)
- iMX.6 UL/Solo/Dual
- Technologic Systems
- Digi ConnectCore
- Ralink MIPS
We love hearing about new projects!
Yes, lets do some firmware!
Want an NDA? No problem, just let us know in the message!