Advertisement
Guest User

Untitled

a guest
Jun 17th, 2019
264
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.97 KB | None | 0 0
  1. /////////////////////////////////////Linker script/////////////////////////////////////
  2.  
  3. MEMORY {
  4. RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K
  5. FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 512K
  6. }
  7.  
  8. ENTRY(_start);
  9.  
  10. EXTERN(RESET_VECTOR);
  11. EXTERN(EXCEPTIONS);
  12.  
  13. SECTIONS {
  14. .vector_table : ALIGN(4) {
  15. FILL(0xFF)
  16. LONG(ORIGIN(RAM) + LENGTH(RAM));
  17. KEEP(*(.vector_table.reset_vector));
  18.  
  19. KEEP(*(.vector_table.exceptions));
  20. } > FLASH
  21.  
  22. .text : {
  23. . = ALIGN(4);
  24. *(.text .text.*);
  25. } > FLASH
  26.  
  27. .rodata : {
  28. . = ALIGN(4);
  29.  
  30. *(.rodata .rodata.*);
  31.  
  32. . = ALIGN(4);
  33. } > FLASH
  34.  
  35. .bss :
  36. {
  37. . = ALIGN(4);
  38. _sbss = .;
  39.  
  40. *(.bss .bss.*);
  41. *(COMMON);
  42.  
  43. . = ALIGN(4);
  44. _ebss = .;
  45. } > RAM
  46.  
  47. .data : AT(ADDR(.rodata) + SIZEOF(.rodata))
  48. {
  49. . = ALIGN(4);
  50. _sdata = .;
  51.  
  52. *(.data .data.*);
  53.  
  54. . = ALIGN(4);
  55. _edata = .;
  56. } > RAM
  57.  
  58. _sidata = LOADADDR(.data);
  59.  
  60. /DISCARD/ : {
  61. *(.ARM.exidx .ARM.exidx.*);
  62. }
  63. }
  64.  
  65. PROVIDE(NMI = DefaultExceptionHandler);
  66. PROVIDE(HardFault = DefaultExceptionHandler);
  67. PROVIDE(MemManage = DefaultExceptionHandler);
  68. PROVIDE(BusFault = DefaultExceptionHandler);
  69. PROVIDE(UsageFault = DefaultExceptionHandler);
  70. PROVIDE(SVCall = DefaultExceptionHandler);
  71. PROVIDE(PendSV = DefaultExceptionHandler);
  72. PROVIDE(SysTick = DefaultExceptionHandler);
  73.  
  74. /////////////////////////////////// main.zig ///////////////////////////////
  75. extern var _sbss: u8;
  76. extern var _ebss: u8;
  77.  
  78. extern var _sdata: u8;
  79. extern var _edata: u8;
  80. extern const _sidata: u8;
  81.  
  82. export const RESET_VECTOR linksection(".vector_table.reset_vector") = _start;
  83.  
  84. const std = @import("std");
  85. const mem = std.mem;
  86.  
  87. var text = "ditiseentest";
  88. var x: [100]u32 = undefined;
  89. var y: u32 = 0xff;
  90.  
  91. export nakedcc fn _start() noreturn {
  92. // clear bss section
  93. const bss_length = @ptrToInt(&_ebss) - @ptrToInt(&_sbss);
  94. const bss_section = @ptrCast([*]u8, &_sbss);
  95. mem.set(u8, bss_section[0..bss_length], 0);
  96.  
  97. const data_length = @ptrToInt(&_edata) - @ptrToInt(&_sdata);
  98. const data_section = @ptrCast([*]u8, &_sdata);
  99. const source_data_section = @ptrCast([*]const u8, &_sidata);
  100. mem.copy(u8, data_section[0..data_length], source_data_section[0..data_length]);
  101.  
  102. main();
  103. }
  104.  
  105. const Vector = packed union {
  106. reserved: u32,
  107. handler: extern fn() noreturn
  108. };
  109.  
  110. extern fn NMI() noreturn;
  111. extern fn HardFault() noreturn;
  112. extern fn MemManage() noreturn;
  113. extern fn BusFault() noreturn;
  114. extern fn UsageFault() noreturn;
  115. extern fn SVCall() noreturn;
  116. extern fn PendSV() noreturn;
  117. extern fn SysTick() noreturn;
  118.  
  119. export const EXCEPTIONS: [14]Vector linksection(".vector_table.exceptions") = [14]Vector{
  120. Vector { .handler = NMI },
  121. Vector { .handler = HardFault },
  122. Vector { .handler = MemManage },
  123. Vector { .handler = BusFault },
  124. Vector {
  125. .handler = UsageFault,
  126. },
  127. Vector { .reserved = 0 },
  128. Vector { .reserved = 0 },
  129. Vector { .reserved = 0 },
  130. Vector { .reserved = 0 },
  131. Vector { .handler = SVCall },
  132. Vector { .reserved = 0 },
  133. Vector { .reserved = 0 },
  134. Vector { .handler = PendSV },
  135. Vector { .handler = SysTick },
  136. };
  137.  
  138. export fn DefaultExceptionHandler() noreturn {
  139. while(true) {}
  140. }
  141.  
  142. fn main() noreturn {
  143. for (x) |*item, i| {
  144. item.* = @intCast(u32, i);
  145. }
  146.  
  147. var _text = &text;
  148. var _x = &x;
  149. var _y = &y;
  150.  
  151.  
  152.  
  153. while(true) {}
  154. }
  155.  
  156. //////////////////////////////// build.zig ///////////////////////////
  157. const Builder = @import("std").build.Builder;
  158. const builtin = @import("builtin");
  159.  
  160. pub fn build(b: *Builder) void {
  161. const mode = b.standardReleaseOptions();
  162. const exe = b.addExecutable("stm32", "src/main.zig");
  163. exe.setBuildMode(mode);
  164.  
  165. const arch = builtin.Arch{ .thumb = .v7m };
  166. const environ = builtin.Abi.eabi;
  167. exe.setTarget(arch, .freestanding, environ);
  168.  
  169. exe.setLinkerScriptPath("src/linker.ld");
  170. exe.setOutputDir("zig-cache");
  171.  
  172. b.default_step.dependOn(&exe.step);
  173. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement