main.c (602B)
1 /* 2 2018 David DiPaola 3 licensed under CC0 (public domain, see https://creativecommons.org/publicdomain/zero/1.0/) 4 */ 5 6 #define pragma_section(name) __attribute__((section(name))) 7 8 typedef unsigned int u32; 9 10 /* PL011 registers (see DDI0183:3.2) */ 11 struct uart_pl011 { 12 volatile u32 dr; /* 0x000 */ 13 }; 14 15 pragma_section("SECTION_IO_UART0") struct uart_pl011 uart0; 16 17 static void 18 print(const char * s) { 19 char c; 20 for (;;) { 21 c = *s; 22 if (c == '\0') break; 23 uart0.dr = c; 24 s++; 25 } 26 } 27 28 static void 29 println(const char * s) { 30 print(s); 31 print("\r\n"); 32 } 33 34 void 35 main(void) { 36 for (;;) { 37 println("hi"); 38 } 39 } 40