An example project for the Heltec Turtle LoRa board (STM32L4 and SX1276 chips). The projects is only supported for the Nucleo-L432KC board platform in the mbed online and offline compiler environment. Visit www.radioshuttle.de (choose Turtle board) for instructions. Note that most source files and libraries are open source, however some files especially the RadioShuttle core protocol is copyrighted work. Check header for details.
Dependencies: mbed BufferedSerial SX1276GenericLib OLED_SSD1306 HELIOS_Si7021 NVProperty RadioShuttle-STM32L4 USBDeviceHT
arch.cpp
00001 /* 00002 * $Id: $ 00003 * This is an unpublished work copyright (c) 2019 HELIOS Software GmbH 00004 * 30827 Garbsen, Germany 00005 */ 00006 #include <mbed.h> 00007 #include "arch.h" 00008 00009 // -------------------------------------------------------------------------------------------------------------------- 00010 #ifndef TOOLCHAIN_GCC 00011 00012 _extern_c size_t strnlen(const char *s, size_t maxlen) { 00013 const char *endp = static_cast<const char *>(memchr(s, 0, maxlen)); 00014 if (endp == NULL) { 00015 return maxlen; 00016 } else { 00017 return endp - s; 00018 } 00019 } 00020 00021 _extern_c char *strdup(const char *s) { 00022 size_t sz = strlen(s) + 1; 00023 char *news = static_cast<char *>(malloc(sz)); 00024 if (news) { 00025 memcpy(news, s, sz); 00026 } 00027 return news; 00028 } 00029 00030 // _extern_c char *stpcpy(char *dest, const char *src) { 00031 // size_t l = strlen(src); 00032 // memcpy(dest, src, l+1); 00033 // return dest + l; 00034 // } 00035 00036 #endif 00037 00038 // -------------------------------------------------------------------------------------------------------------------- 00039 #ifdef TARGET_STM32L0 00040 #ifdef TOOLCHAIN_GCC 00041 _extern_c unsigned int __atomic_fetch_or_4(volatile void *mem, unsigned int val, int model) { 00042 volatile unsigned int *ptr = static_cast<volatile unsigned int *>(mem); 00043 core_util_critical_section_enter(); 00044 unsigned int tmp = *ptr; 00045 *ptr = tmp | val; 00046 core_util_critical_section_exit(); 00047 return tmp; 00048 } 00049 00050 _extern_c unsigned int __atomic_exchange_4(volatile void *mem, unsigned int val, int model) { 00051 volatile unsigned int *ptr = static_cast<volatile unsigned int *>(mem); 00052 core_util_critical_section_enter(); 00053 unsigned int tmp = *ptr; 00054 *ptr = val; 00055 core_util_critical_section_exit(); 00056 return tmp; 00057 } 00058 00059 #else 00060 _extern_c bool __user_cmpxchg_1(unsigned char *ptr, unsigned char oldp, unsigned char newp) 00061 { 00062 return !core_util_atomic_cas_u8(ptr, &oldp, newp); 00063 // core_util_critical_section_enter(); 00064 // bool r = (*ptr == oldp); 00065 // if (r) { 00066 // *ptr = newp; 00067 // } 00068 // core_util_critical_section_exit(); 00069 // return !r; 00070 } 00071 00072 _extern_c bool __user_cmpxchg_4(unsigned int *ptr, unsigned int oldp, unsigned int newp) 00073 { 00074 return !core_util_atomic_cas_u32(ptr, &oldp, newp); 00075 // core_util_critical_section_enter(); 00076 // bool r = (*ptr == oldp); 00077 // if (r) { 00078 // *ptr = newp; 00079 // } 00080 // core_util_critical_section_exit(); 00081 // return !r; 00082 } 00083 #endif 00084 #endif
Generated on Wed Jul 13 2022 12:02:31 by 1.7.2