From 12298d23a776e2e8051e5b8f63591e7e5c9864c3 Mon Sep 17 00:00:00 2001 From: Ayke van Laethem Date: Sat, 22 Sep 2018 01:44:47 +0200 Subject: [PATCH] all: move generic ARM bits into separate files --- src/runtime/runtime_arm.go | 55 ++++++++++++++++++++++++++++++++++++++ src/runtime/runtime_nrf.go | 48 --------------------------------- targets/arm.ld | 8 ------ targets/nrf52.ld | 10 +++++++ targets/pca10040.json | 4 +-- 5 files changed, 67 insertions(+), 58 deletions(-) create mode 100644 src/runtime/runtime_arm.go create mode 100644 targets/nrf52.ld diff --git a/src/runtime/runtime_arm.go b/src/runtime/runtime_arm.go new file mode 100644 index 00000000..1bc1a056 --- /dev/null +++ b/src/runtime/runtime_arm.go @@ -0,0 +1,55 @@ +/// +build arm + +package runtime + +import ( + "device/arm" + "unsafe" +) + +//go:extern _sbss +var _sbss unsafe.Pointer + +//go:extern _ebss +var _ebss unsafe.Pointer + +//go:extern _sdata +var _sdata unsafe.Pointer + +//go:extern _sidata +var _sidata unsafe.Pointer + +//go:extern _edata +var _edata unsafe.Pointer + +func preinit() { + // Initialize .bss: zero-initialized global variables. + ptr := uintptr(unsafe.Pointer(&_sbss)) + for ptr != uintptr(unsafe.Pointer(&_ebss)) { + *(*uint32)(unsafe.Pointer(ptr)) = 0 + ptr += 4 + } + + // Initialize .data: global variables initialized from flash. + src := uintptr(unsafe.Pointer(&_sidata)) + dst := uintptr(unsafe.Pointer(&_sdata)) + for dst != uintptr(unsafe.Pointer(&_edata)) { + *(*uint32)(unsafe.Pointer(dst)) = *(*uint32)(unsafe.Pointer(src)) + dst += 4 + src += 4 + } +} + +func postinit() { +} + +func abort() { + for { + arm.Asm("wfi") + } +} + +// Align on word boundary. +func align(ptr uintptr) uintptr { + return (ptr + 3) &^ 3 +} diff --git a/src/runtime/runtime_nrf.go b/src/runtime/runtime_nrf.go index bca187e8..eb1e5e49 100644 --- a/src/runtime/runtime_nrf.go +++ b/src/runtime/runtime_nrf.go @@ -5,7 +5,6 @@ package runtime import ( "device/arm" "device/nrf" - "unsafe" ) type timeUnit int64 @@ -21,42 +20,6 @@ func handleReset() { main() } -//go:extern _sbss -var _sbss unsafe.Pointer - -//go:extern _ebss -var _ebss unsafe.Pointer - -//go:extern _sdata -var _sdata unsafe.Pointer - -//go:extern _sidata -var _sidata unsafe.Pointer - -//go:extern _edata -var _edata unsafe.Pointer - -func preinit() { - // Initialize .bss: zero-initialized global variables. - ptr := uintptr(unsafe.Pointer(&_sbss)) - for ptr != uintptr(unsafe.Pointer(&_ebss)) { - *(*uint32)(unsafe.Pointer(ptr)) = 0 - ptr += 4 - } - - // Initialize .data: global variables initialized from flash. - src := uintptr(unsafe.Pointer(&_sidata)) - dst := uintptr(unsafe.Pointer(&_sdata)) - for dst != uintptr(unsafe.Pointer(&_edata)) { - *(*uint32)(unsafe.Pointer(dst)) = *(*uint32)(unsafe.Pointer(src)) - dst += 4 - src += 4 - } -} - -func postinit() { -} - func init() { initUART() initLFCLK() @@ -118,17 +81,6 @@ func ticks() timeUnit { return timestamp } -func abort() { - for { - arm.Asm("wfi") - } -} - -// Align on word boundary. -func align(ptr uintptr) uintptr { - return (ptr + 3) &^ 3 -} - type __volatile bool var rtc_wakeup __volatile diff --git a/targets/arm.ld b/targets/arm.ld index e5df3601..1cf41783 100644 --- a/targets/arm.ld +++ b/targets/arm.ld @@ -1,12 +1,4 @@ -MEMORY -{ - FLASH_TEXT (rw) : ORIGIN = 0x00000000, LENGTH = 256K /* .text */ - RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K -} - -_stack_size = 2K; - /* define output sections */ SECTIONS { diff --git a/targets/nrf52.ld b/targets/nrf52.ld new file mode 100644 index 00000000..a388cf7e --- /dev/null +++ b/targets/nrf52.ld @@ -0,0 +1,10 @@ + +MEMORY +{ + FLASH_TEXT (rw) : ORIGIN = 0x00000000, LENGTH = 256K /* .text */ + RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +} + +_stack_size = 2K; + +INCLUDE "targets/arm.ld" diff --git a/targets/pca10040.json b/targets/pca10040.json index 17d03769..48f800bd 100644 --- a/targets/pca10040.json +++ b/targets/pca10040.json @@ -1,8 +1,8 @@ { "llvm-target": "armv7em-none-eabi", - "build-tags": ["nrf", "nrf52", "nrf52832", "js", "wasm"], + "build-tags": ["nrf", "nrf52", "nrf52832", "arm", "js", "wasm"], "linker": "arm-none-eabi-gcc", - "pre-link-args": ["-nostdlib", "-nostartfiles", "-mcpu=cortex-m4", "-mthumb", "-T", "targets/arm.ld", "-Wl,--gc-sections", "-fno-exceptions", "-fno-unwind-tables", "-ffunction-sections", "-fdata-sections", "-Os", "-DNRF52832_XXAA", "-Ilib/CMSIS/CMSIS/Include", "lib/nrfx/mdk/system_nrf52.c", "src/device/nrf/nrf52.s"], + "pre-link-args": ["-nostdlib", "-nostartfiles", "-mcpu=cortex-m4", "-mthumb", "-T", "targets/nrf52.ld", "-Wl,--gc-sections", "-fno-exceptions", "-fno-unwind-tables", "-ffunction-sections", "-fdata-sections", "-Os", "-DNRF52832_XXAA", "-Ilib/CMSIS/CMSIS/Include", "lib/nrfx/mdk/system_nrf52.c", "src/device/nrf/nrf52.s"], "objcopy": "arm-none-eabi-objcopy", "flash": "nrfjprog -f nrf52 --sectorerase --program {hex} --reset" }