-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathstartup.zig
59 lines (52 loc) · 1.41 KB
/
startup.zig
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
const builtin = @import("builtin");
extern fn main() void;
extern var __text_end: u32;
extern var __data_start: u32;
extern var __data_size: u32;
extern var __bss_start: u32;
extern var __bss_size: u32;
extern var __stack_top: u32;
export fn Reset_Handler() void {
// copy data from flash to RAM
const data_size = @ptrToInt(&__data_size);
const data = @ptrCast([*]u8, &__data_start);
const text_end = @ptrCast([*]u8, &__text_end);
for (text_end[0..data_size]) |b, i| data[i] = b;
// clear the bss
const bss_size = @ptrToInt(&__bss_size);
const bss = @ptrCast([*]u8, &__bss_start);
for (bss[0..bss_size]) |*b| b.* = 0;
// start
main();
}
export fn BusyDummy_Handler() void {
while (true) {}
}
export fn Dummy_Handler() void {}
extern fn NMI_Handler() void;
extern fn HardFault_Handler() void;
extern fn MemManage_Handler() void;
extern fn BusFault_Handler() void;
extern fn UsageFault_Handler() void;
extern fn SVC_Handler() void;
extern fn DebugMon_Handler() void;
extern fn PendSV_Handler() void;
extern fn SysTick_Handler() void;
const Isr = extern fn () void;
export var vector_table linksection(".isr_vector") = [_]?Isr{
Reset_Handler,
NMI_Handler,
HardFault_Handler,
MemManage_Handler,
BusFault_Handler,
UsageFault_Handler,
null,
null,
null,
null,
SVC_Handler,
DebugMon_Handler,
null,
PendSV_Handler,
SysTick_Handler,
};