commit 1be28b565b3da52c64f87f313806d554d1f39afe
parent 09706d2cb7559581198b024d80e25c83fec32ee2
Author: Sylvia Ivory <git@sivory.net>
Date: Tue, 20 Jan 2026 18:30:06 -0800
Add more proper panic handler
Diffstat:
3 files changed, 21 insertions(+), 5 deletions(-)
diff --git a/src/devices/mini-uart.zig b/src/devices/mini-uart.zig
@@ -34,10 +34,10 @@ const RxPin = enum(u8) {
Gpio37 = 37,
};
-// var is_initialized = false;
+var initialized = false;
pub fn initialize(baud: u32, tx_pin: TxPin, rx_pin: RxPin) Error!void {
- // if (is_initialized) return Error.AlreadyInitialized;
+ if (initialized) return Error.AlreadyInitialized;
// Set GPIO pins first (as specified by manual)
// Page 102 specifies which alt mode
@@ -100,7 +100,11 @@ pub fn initialize(baud: u32, tx_pin: TxPin, rx_pin: RxPin) Error!void {
mem.put_u32(@ptrFromInt(AUX_MU_CNTL_REG), 0x3);
// mem.put_u32(@ptrFromInt(AUX_MU_CNTL_REG), 2);
- // is_initialized = true;
+ initialized = true;
+}
+
+pub fn is_initialized() bool {
+ return initialized;
}
fn can_write() bool {
diff --git a/src/main.zig b/src/main.zig
@@ -2,5 +2,7 @@ const uart = @import("devices/mini-uart.zig");
pub fn main() !void {
try uart.initialize(115200, .Gpio14, .Gpio15);
- uart.write_slice("Hello, World!");
+ uart.write_slice("Hello, World!\n");
+
+ @panic("oops");
}
diff --git a/src/root.zig b/src/root.zig
@@ -1,4 +1,6 @@
const std = @import("std");
+
+const uart = @import("devices/mini-uart.zig");
const fake_main = @import("main.zig").main;
export fn abort() noreturn {
@@ -11,8 +13,16 @@ pub export fn kmain() void {
}
fn panic_handler(msg: []const u8, trace_addr: ?usize) noreturn {
- _ = msg;
+ @branchHint(.cold);
_ = trace_addr;
+
+ if (uart.is_initialized()) {
+ uart.write_slice("Panic: ");
+ uart.write_slice(msg);
+ uart.write_byte('\n');
+ }
+
+ // TODO; proper abort
abort();
}