<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Bare Metal on TiJet</title><link>https://www.tainuohc.com/en/tags/bare-metal/</link><description>Recent content in Bare Metal on TiJet</description><generator>Hugo</generator><language>en</language><lastBuildDate>Sun, 19 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://www.tainuohc.com/en/tags/bare-metal/index.xml" rel="self" type="application/rss+xml"/><item><title>Rust on Bare Metal: Rewriting Our Bootloader Without a Single Page Fault</title><link>https://www.tainuohc.com/en/blog/2026-07-19-rust-embedded/</link><pubDate>Sun, 19 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tainuohc.com/en/blog/2026-07-19-rust-embedded/</guid><description>&lt;h2 id="1-the-bootloader-problem">1. The Bootloader Problem&lt;/h2>
&lt;p>Tainuo&amp;rsquo;s industrial control boards ship with an MCU that manages power sequencing, watchdog timers, and over-the-air (OTA) firmware updates. The bootloader — roughly 8,000 lines of C — had been stable for years, but &amp;ldquo;stable&amp;rdquo; in the embedded sense means &amp;ldquo;the bugs are known and we have workarounds.&amp;rdquo;&lt;/p>
&lt;p>Every 6–9 months, a new OTA edge case would surface: a buffer overflow during firmware image verification, an off-by-one in the flash erase routine, a use-after-free in the CAN bus command dispatcher. Each of these bugs required a full recall-cycle OTA fix, which on a deployed fleet of industrial controllers is a multi-week ordeal.&lt;/p></description></item></channel></rss>