initial commit
commit
f529a3b0f8
@ -0,0 +1,3 @@
|
||||
*.sw*
|
||||
.zig-cache/
|
||||
zig-out/
|
@ -0,0 +1,23 @@
|
||||
const std = @import("std");
|
||||
|
||||
pub fn build(b: *std.Build) void {
|
||||
const target = b.resolveTargetQuery(.{
|
||||
.cpu_arch = .thumb,
|
||||
.os_tag = .freestanding,
|
||||
.abi = .none
|
||||
});
|
||||
const optimize = .Debug; // .ReleaseSmall
|
||||
|
||||
const exe = b.addExecutable(.{
|
||||
.name = "stm32",
|
||||
.root_source_file = b.path("src/main.zig"),
|
||||
.target = target,
|
||||
.optimize = optimize,
|
||||
.linkage = .static,
|
||||
});
|
||||
|
||||
exe.addAssemblyFile(b.path("src/bootstrap.s"));
|
||||
exe.setLinkerScriptPath(b.path("link.ld"));
|
||||
|
||||
b.installArtifact(exe);
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
ENTRY(_start)
|
||||
|
||||
/* description of memory regions */
|
||||
MEMORY {
|
||||
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 1024K
|
||||
RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 96K
|
||||
}
|
||||
|
||||
/* description of ELF sections */
|
||||
SECTIONS {
|
||||
.text : {
|
||||
. = ALIGN(8);
|
||||
*(.isr_vector)
|
||||
*(.text)
|
||||
*(.text*)
|
||||
} > FLASH
|
||||
|
||||
/* read-only data sections */
|
||||
.rodata : {
|
||||
. = ALIGN(8);
|
||||
*(.rodata)
|
||||
*(.rodata*)
|
||||
} > FLASH
|
||||
|
||||
/* initialized data */
|
||||
_sidata = LOADADDR(.data);
|
||||
.data : {
|
||||
. = ALIGN(8);
|
||||
_sdata = .;
|
||||
*(.data)
|
||||
. = ALIGN(8);
|
||||
_edata = .;
|
||||
} > RAM AT > FLASH
|
||||
|
||||
/* uninitialized data */
|
||||
.bss : {
|
||||
. = ALIGN(8);
|
||||
_sbss = .;
|
||||
*(.bss)
|
||||
. = ALIGN(8);
|
||||
_ebss = .;
|
||||
} > RAM
|
||||
}
|
||||
|
@ -0,0 +1,38 @@
|
||||
.cpu cortex-m4
|
||||
.thumb
|
||||
|
||||
.extern _start
|
||||
.extern fault_handler
|
||||
|
||||
.section .text
|
||||
|
||||
fault1:
|
||||
mov r0, 1
|
||||
b fault_handler
|
||||
fault2:
|
||||
mov r0, 2
|
||||
b fault_handler
|
||||
fault3:
|
||||
mov r0, 3
|
||||
b fault_handler
|
||||
fault4:
|
||||
mov r0, 4
|
||||
b fault_handler
|
||||
fault5:
|
||||
mov r0, 5
|
||||
b fault_handler
|
||||
|
||||
.section .bss
|
||||
.skip 128
|
||||
stack_top:
|
||||
|
||||
.section .isr_vector
|
||||
.word stack_top
|
||||
.word _start
|
||||
.word fault1
|
||||
.word fault2
|
||||
.word fault3
|
||||
.word fault4
|
||||
.word fault5
|
||||
.skip 4 * 91
|
||||
|
@ -0,0 +1,13 @@
|
||||
//! By convention, main.zig is where your main function lives in the case that
|
||||
//! you are building an executable. If you are making a library, the convention
|
||||
//! is to delete this file and start with root.zig instead.
|
||||
//const std = @import("std");
|
||||
|
||||
export fn _start() callconv(.C) noreturn {
|
||||
while (true) {}
|
||||
}
|
||||
|
||||
export fn fault_handler() callconv(.C) void {
|
||||
while (true) {}
|
||||
}
|
||||
|
Loading…
Reference in New Issue