Welcome to Embedded Artistry!
When corresponding with our readers, it’s common to hear statements like these:
- “I’m tired of wading through blogs to only find a rare gem here or there. It seems like everything is out-of-date, lacking the depth that I need, a teaser for on-site training, or a vendor sales pitch.”
- “I work on a small team, and there’s nobody around who can give me guidance on the practices I should be using or how to evolve in my career.”
- “Everything my team is doing seems so behind the times when I look at state-of-the-art software projects. We don’t take advantage of static analysis, automated tests, continuous integration, or modern debugging tools.”
We certainly understand how our readers feel. When we started building embedded systems, finding high-quality information was even harder than it is today. Even though the ARM Cortex-M was already widely used in industry, the state-of-the-art courses at the Georgia Institute of Technology still focused on teaching students how to use Windows Embedded and 8-bit PICs. Instructors never touched on topics like portability, debugging, or applying modern software development techniques. It took one-on-one mentorship, reading 1000-page manuals and specifications, trial & error, significant pain, and building dozens of products to develop our professional embedded skills to where they are today.
With the explosion in embedded devices being developed, along with the growth of the maker movement, the overall situation has certainly improved. Thousands of videos, tutorials, and articles have helped makers, hobbyists, and hackers around the world get started with embedded systems. Easy access to development platforms, submodules, parts kits, and software libraries makes assembling prototypes easier than ever.
But that’s where the progress seems to have stopped. There’s still very little information on translating those skills into a professional development environment where shipping quality products is tantamount. Blogs and articles that cover intermediate and advanced topics to a suitable level of depth are few and far between. Once popular embedded publications have become the home of thinly-veiled product marketing content instead of high-quality technical content.
We want to change that.
We originally launched this website because we wanted to share the hundreds of pages of notes, lessons, and insights that we’ve collected during our careers. Since then our mission has evolved, and now we aim to bring the state of embedded systems development out of the dark ages by accelerating and enhancing the learning process for all embedded systems developers.
We strive to provide in-depth and highly technical embedded systems content that will help teach you advanced skills and modern software practices. In our experience, these skills and practices enable us to:
- Complete projects faster
- Reduce the time you spend debugging
- Improve the quality of every system that you build
- Avoid painful schedule delays
If that sounds like what you’re after, read on!
Free Content
The majority of the content we produce is available for free. You will find over 300,000 words spread across more than 300 published articles (and counting!).
Our content is always growing, too. If you would like to be notified when new articles are published, you can subscribe to our RSS feed, follow us on Twitter, or follow us on LinkedIn. The majority of our new content is provided to our members, but we still post new free content on the blog and occasionally in the Embedded Systems Field Atlas.
We know how difficult it can be to orient yourself with a new website, especially one with hundreds of articles. You can browse the full set of content on the Archive page, using tags and categories to narrow down your search. However, we recommend starting your exploration with some of our favorite and most popular articles.
Most Popular Articles
- Creating a Circular Buffer in C/C++
- Demystifying Microcontroller GPIO Settings
- Embedded Rules of Thumb
- Mixing C and C++: extern C
std::string
vs C-strings- C++ Casting, or: “Oh No, They Broke Malloc!”
- Installing LLVM/Clang on OSX
- An Overview of C++ STL Containers
- Migrating from C to C++: NULL vs nullptr
- A GitHub Pull Request Template for Your Projects
- Code Cleanup: Splitting Up Git Commits in the Middle of a Branch
- Jenkins: Configuring a Linux Slave Node
- Jenkins: Running Steps as sudo
Our Favorite Articles
- Engineering Lessons I’ve Learned from Working at the Japanese Tea Garden
- What can Software Organizations Learn from the Boeing 737 MAX Saga?
- A Software Development Idea Inspired by Mushroom Cultivation
- A General Overview of What Happens Before Main
- Implementing Stack Smashing Protection for Microcontrollers (and Embedded Artistry’s libc)
- Practical Decoupling Techniques Applied to a C-Based Radio Driver
- Leveraging Our Build Systems to Support Portability
- Improving Our Software With 5 Lightweight Processes You Can Adopt This Month
- Creating and Enforcing a Code Formatting Standard with clang-format
- Implementing an Asynchronous Dispatch Queue
However, our website is more than a blog. You will also find:
Beginner’s Resources
We’ve collected our favorite beginner programming resources, introductory embedded material, and more.
Newsletter
Subscribe to receive embedded news, programming tips, interesting new parts, job postings, and more.
Glossary
The embedded world is full of terms and acronyms. We have a built-in Glossary, so defined terms are highlighted throughout the site.
Templates
Improve your processes with our Templates for software development, manufacturing, and consulting.
Our Favorite Libraries
The Libraries page catalogues our favorite open-source libraries.
What We’re Reading
Looking for something to read? Browse our favorite blogs, journals, and books.
YouTube Channel
Our YouTube Channel contains a variety of curated playlists related to embedded systems, programming, testing, architecture, and manufacturing.
Courses
Our in-depth technical courses are designed to help you take your embedded systems skills to the next level. Every course is filled with executable code examples and challenging hands-on exercises that enables you to apply the techniques in real-world scenarios.
Unlike a book, a blog, or a free online course, all of the Embedded Artistry courses include direct support from the Embedded Artistry team. We are here to help you whenever you get stuck or don’t understand something. Our course content is also continually evolving in response to student questions, feedback, and the ever-changing nature of the software world.
Find our full set of courses by following this link.
Featured Course
Designing Embedded Software for Change
Are you tired of every hardware or requirements change turning into a large rewrite? Our course teaches you how to design your software to support change. This course explores design principles, strategies, design patterns, and real-world software projects that use the techniques.
Membership
Are you a recent graduate who feels like your classes didn’t fully prepare you for professional development projects?
Are you an embedded systems developer that feels like your team is missing important practices or lagging behind in the software development industry?
Are you looking for new ways to evolve your embedded career and to become a technical leader?
Do you simply want to support our work and guaranteed that the website remains ad-free?
Become an Embedded Artistry Member!
Exclusive Educational Resources
Members receive exclusive access to the Embedded Systems Field Atlas, our curated guide to embedded topics. Select courses are available to all members.
The People Behind the Scenes
This website is run by Phillip and Rozi, the partners of Embedded Artistry LLC. Together, we’ve worked on a combined total of 21 shipping hardware products, supported hundreds of manufacturing builds in China, and worked with dozens of early-stage hardware companies. We continue to consult with clients, coach individuals, and actively maintain open-source software projects.
Phillip Johnston
Phillip specializes in firmware development and software architecture. His experience spans defense, consumer electronics, cameras, drones, and manufacturing. He is focused on early-stage product development and improving the processes we use to create new systems.
Prior to starting Embedded Artistry, Phillip worked at the Georgia Tech Research Institute‘s Electronic Systems (ELSYS) lab, Apple, and Pearl Automation.
Rozi Harris
Rozi is a project manager extraordinaire. She is experienced in publishing, packaging, product design, industrial design, product lifecycle management (PLM), materials & assembly, supply chain & manufacturing, consumer electronics, automotive, and robotics. Rozi specializes in bringing the creative ideas of engineers to life.
Prior to joining Embedded Artistry, Rozi spent 12 years building iPods and iPhones at Apple and four years in the publishing industry.