Embedded systems and firmware engineer. I work close to the hardware — writing peripheral drivers by hand from the reference manual, building real-time firmware on microcontrollers, and developing device drivers inside the Linux kernel.
Most of my projects start from a datasheet rather than a library. I enjoy understanding exactly what the silicon is doing — which register bit flips, when an interrupt fires, how a task gets scheduled — and building up from there. Lately I've also been putting more effort into testing and CI, because firmware that isn't verified isn't finished.
A few things I'm comfortable with:
- Bare-metal driver development for GPIO, SPI, I2C, and USART, written without a vendor HAL
- Real-time firmware on FreeRTOS — tasks, priorities, queues, semaphores, and ISR-safe design
- Linux internals — character device drivers, kernel modules, and upstream contributions (an IIO sensor-driver bug fix + staging cleanups merged to mainline)
- IoT systems end to end, from an ESP8266 collecting sensor data to an MQTT dashboard
- Unit testing, coverage, and continuous integration
| Project | What it shows |
|---|---|
| Nucleof411xx_drivers | STM32F411 GPIO, SPI, I2C, and USART drivers written from scratch — no vendor libraries |
| FreeRTOS | Nine progressive RTOS labs: tasks, priorities, queues, timers, semaphores, notifications |
| IoT-Soilless-Hydroponic-System | A smart-farm prototype: ESP8266 to MQTT to Raspberry Pi to a Node-RED dashboard |
| linux_device_driver | Linux kernel modules and a character device driver with dynamic major/minor allocation |
| Parallel-Computing | Optimizing a physics engine with OpenMP and OpenCL — up to a 34x speedup |
Bug fix — IIO (pressure sensors): iio: pressure: dps310: fix NULL pointer dereference on ACPI probe — fixed a kernel crash during probe when the DPS310 is enumerated via its
ACPI HID (the i2c device-id lookup returned NULL and was dereferenced). Reviewed by the IIO
maintainers, applied to the IIO subsystem tree, and marked for stable backport.
Patch on lore.kernel.org
drivers/staging cleanups — merged to mainline:
d5c28c0—staging: sm750: rename CamelCase variable Bpp to bppe6900ce—staging: rtl8723bs: rename shortGIrate to short_gi_rate(rtw_ap.c)d9c2a00—staging: rtl8723bs: rename shortGIrate to short_gi_rate(rtl8723b_hal_init.c)
- PR #114097 — documentation fix in the Getting Started guide.
Domains: embedded firmware, RTOS, Linux kernel and drivers, sensor and signal I/O, IoT, and test automation.