Trice is an embedded logging and tracing toolchain consisting of a lightweight C instrumentation library for microcontrollers and a Go-based host CLI tool. The C library provides variadic macros that emit compact binary records (ID + values) instead of format strings, drastically reducing flash and bandwidth usage. The Go tool manages Trice IDs (insert, clean, bind), decodes incoming binary streams from targets over UART, RTT, TCP/UDP, or file, and displays formatted logs with timestamps, colors, and filtering. It supports multiple buffer strategies (stack, static, double, ring), framing protocols (COBS, TCOBS), optional XTEA encryption, and local logging on the target itself. The architecture is a classic host-target split: the target runs the C library, the host runs the Go CLI. The codebase is well-tested with a large matrix of CGO test configurations and CI pipelines for multiple STM32 example projects. It is actively maintained with frequent releases and a responsive issue tracker.
This repository is a step-by-step tutorial for building an operating system from scratch, progressing from a simple boot sector to a kernel with interrupts, memory management, and a basic shell. The code is organized into sequential lessons, each building upon the previous. The system boots via a custom boot sector, loads a kernel into memory, transitions to 32-bit protected mode, sets up interrupt handling (including timer and keyboard), and provides a shell that can echo user input and handle basic commands like 'END' to halt and 'PAGE' to test memory allocation. While educational and well-commented, the codebase shows signs of abandonment per the README, though the last commit date indicates recent activity. The architecture is monolithic with modular components for bootloader, kernel, drivers (screen, keyboard, timer), and a lightweight libc.