From a5c0c0c98a6146bce594b0f51e7f53253d140f0d Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Fri, 19 May 2017 17:27:28 +0200 Subject: [PATCH 1/3] add _end symbol to linker script --- variants/arduino_101/linker_scripts/flash.ld | 3 +++ 1 file changed, 3 insertions(+) diff --git a/variants/arduino_101/linker_scripts/flash.ld b/variants/arduino_101/linker_scripts/flash.ld index 7ba34942..a6cad99b 100644 --- a/variants/arduino_101/linker_scripts/flash.ld +++ b/variants/arduino_101/linker_scripts/flash.ld @@ -158,6 +158,9 @@ SECTIONS { . = ALIGN(4); __start_heap = .; + end = __start_heap; + _end = end; + __end = end; . = . + __HEAP_SIZE_MIN; __end_heap = ALIGN(__PAGE_SIZE); } > SRAM From c8ea5d04d8e54c113dbd0507a4e680ec905ea6e6 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Fri, 19 May 2017 17:30:01 +0200 Subject: [PATCH 2/3] avoid exporting __assert_func symbol from system lib __assert_func and its dependencies are automatically added by libc unless we provide a stub implementation and avoid uisng -Wl,--whole-archive when linking against system lib --- cores/arduino/abi.cpp | 6 ++++++ platform.txt | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/cores/arduino/abi.cpp b/cores/arduino/abi.cpp index bf3511b2..35656407 100644 --- a/cores/arduino/abi.cpp +++ b/cores/arduino/abi.cpp @@ -21,6 +21,12 @@ extern "C" void __cxa_pure_virtual(void) __attribute__ ((__noreturn__)); extern "C" void __cxa_deleted_virtual(void) __attribute__ ((__noreturn__)); +extern "C" void __assert_func(void) __attribute__ ((__noreturn__)); + +void __assert_func(void) { + while (1) + ; +} void __cxa_pure_virtual(void) { // We might want to write some diagnostics to uart in this case diff --git a/platform.txt b/platform.txt index 7550a7b3..65a41685 100644 --- a/platform.txt +++ b/platform.txt @@ -68,7 +68,7 @@ recipe.cpp.o.pattern="{compiler.path}{compiler.cpp.cmd}" {compiler.cpp.flags} -D recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} {compiler.ar.extra_flags} "{archive_file_path}" "{object_file}" ## Combine gc-sections, archives, and objects -recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" {compiler.c.elf.flags} "-T{build.variant.path}/{build.ldscript}" "-Wl,-Map,{build.path}/{build.project_name}.map" {compiler.c.elf.extra_flags} -o "{build.path}/{build.project_name}.elf" "-L{build.path}" "-L{build.variant.path}" -Wl,--whole-archive "-l{build.variant_system_lib}" -Wl,--no-whole-archive -Wl,--start-group "-l{build.variant_system_lib}" -lnsim -lc -lm -lgcc {object_files} "{build.path}/{archive_file}" +recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" {compiler.c.elf.flags} "-T{build.variant.path}/{build.ldscript}" "-Wl,-Map,{build.path}/{build.project_name}.map" {compiler.c.elf.extra_flags} -o "{build.path}/{build.project_name}.elf" "-L{build.path}" "-L{build.variant.path}" -Wl,--no-whole-archive -Wl,--start-group -lnsim -lc -lm -lgcc -l{build.variant_system_lib} {object_files} "{build.path}/{archive_file}" ## Save output with debug symbols (.debug.elf file). Uncomment if you wish to use OpenOCD to debug. recipe.hooks.objcopy.preobjcopy.1.pattern="{runtime.tools.arduino101load.path}/arduino101load" -c -from="{build.path}/{build.project_name}.elf" -to="{build.path}/../arduino101_sketch.debug.elf" From bb102108cd590d9f15f7e5653a17cee642aa09ad Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Fri, 19 May 2017 17:32:13 +0200 Subject: [PATCH 3/3] Avoid exporting BLE symbols in sketches which don't use BLE By moving the BLE stack initialization to its library we can avoid including it in any build. --- .../src/internal/BLEDeviceManager.cpp | 1 + libraries/CurieBLE/src/internal/ble_client.c | 9 +++++++++ libraries/CurieBLE/src/internal/ble_client.h | 1 + .../framework/include/cfw_platform.h | 1 + .../framework/src/cfw_platform.c | 3 +-- variants/arduino_101/libarc32drv_arduino101.a | Bin 190830 -> 190896 bytes 6 files changed, 13 insertions(+), 2 deletions(-) diff --git a/libraries/CurieBLE/src/internal/BLEDeviceManager.cpp b/libraries/CurieBLE/src/internal/BLEDeviceManager.cpp index d5ddd181..c4d493b0 100644 --- a/libraries/CurieBLE/src/internal/BLEDeviceManager.cpp +++ b/libraries/CurieBLE/src/internal/BLEDeviceManager.cpp @@ -132,6 +132,7 @@ bool BLEDeviceManager::begin(BLEDevice *device) { if (NULL == _local_ble) { + ble_cfw_init(); _local_ble = device; bt_le_set_mac_address(_local_bda); diff --git a/libraries/CurieBLE/src/internal/ble_client.c b/libraries/CurieBLE/src/internal/ble_client.c index 5a9e6164..b24f19b8 100644 --- a/libraries/CurieBLE/src/internal/ble_client.c +++ b/libraries/CurieBLE/src/internal/ble_client.c @@ -77,6 +77,15 @@ static void *ble_client_update_param_event_param; extern "C" { #endif +static bool initialized = false; + +inline void ble_cfw_init() { + if (!initialized) { + ble_cfw_service_init(BLE_SERVICE_ID, cfw_get_service_queue()); + initialized = true; + } +} + static void on_connected(bt_conn_t *conn, uint8_t err) { if (ble_client_connect_event_cb) diff --git a/libraries/CurieBLE/src/internal/ble_client.h b/libraries/CurieBLE/src/internal/ble_client.h index 75c3d59f..df380f12 100644 --- a/libraries/CurieBLE/src/internal/ble_client.h +++ b/libraries/CurieBLE/src/internal/ble_client.h @@ -102,6 +102,7 @@ typedef void (*ble_client_update_param_event_cb_t)(struct bt_conn *conn, extern "C" { #endif +void ble_cfw_init(); void ble_client_init(ble_client_connect_event_cb_t connect_cb, void* connect_param, ble_client_disconnect_event_cb_t disconnect_cb, void* disconnect_param, ble_client_update_param_event_cb_t update_param_cb, void* update_param_param); diff --git a/system/libarc32_arduino101/framework/include/cfw_platform.h b/system/libarc32_arduino101/framework/include/cfw_platform.h index aa5cb29e..b59a8495 100644 --- a/system/libarc32_arduino101/framework/include/cfw_platform.h +++ b/system/libarc32_arduino101/framework/include/cfw_platform.h @@ -40,6 +40,7 @@ extern "C" { void cfw_platform_init(void); T_QUEUE cfw_get_service_queue(void); +void ble_cfw_service_init(int service_id, T_QUEUE queue); #ifdef __cplusplus } diff --git a/system/libarc32_arduino101/framework/src/cfw_platform.c b/system/libarc32_arduino101/framework/src/cfw_platform.c index 5daa0951..f8c8cbb0 100644 --- a/system/libarc32_arduino101/framework/src/cfw_platform.c +++ b/system/libarc32_arduino101/framework/src/cfw_platform.c @@ -46,7 +46,6 @@ /* FIXME: Service manager API */ extern void _cfw_init(void *); -extern void ble_cfw_service_init(int service_id, T_QUEUE queue); extern void *services; @@ -115,7 +114,7 @@ void cfw_platform_init(void) shared_data->services, shared_data->service_mgr_port_id); #else _cfw_init(service_mgr_queue); - ble_cfw_service_init(BLE_SERVICE_ID, service_mgr_queue); + //ble_cfw_service_init(BLE_SERVICE_ID, service_mgr_queue); /* Initialized shared structure. */ shared_data->ports = port_get_port_table(); diff --git a/variants/arduino_101/libarc32drv_arduino101.a b/variants/arduino_101/libarc32drv_arduino101.a index db6e5b4591162ed7abd8d50f81b0b7d077847d32..46b88a7911b24d91f8cc23a782b637928827524b 100644 GIT binary patch delta 6085 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