Skip to content
/ ustd Public

Micro-standard-library providing minimal and portable array, queue and map for attiny avr, arduinos, esp8266/32 and linux, mac

License

Notifications You must be signed in to change notification settings

muwerk/ustd

Folders and files

NameName
Last commit message
Last commit date

Latest commit

818b725 · Aug 2, 2023
Feb 15, 2021
Oct 17, 2022
Aug 15, 2022
Mar 23, 2022
Aug 20, 2018
Jul 30, 2023
Jan 30, 2021
Jan 30, 2021
Jul 30, 2023
Jul 30, 2023
Jan 30, 2021
Oct 19, 2021
Jun 7, 2021
Feb 9, 2021
Aug 2, 2023
Feb 9, 2021

Repository files navigation

ustd

Dev Docs Cmake PlatformIO CI Raspberry_Pico

ustd provides minimal and highly portable implementations of the following classes:

  • ustd::array, a lightweight c++11 array implementation (ustd_array.h).
  • ustd::queue, a lightweight c++11 queue implementation (ustd_queue.h).
  • ustd::map, a lightweight c++11 map implementation (ustd_map.h).

The libraries are header-only and should work with any c++11 compiler and support platforms starting with 8k attiny, avr, arduinos, up to esp8266, esp32 and mac and linux.

Documentation: ustd:: documentation

Platform defines

Make sure to use the appropriate platform define before including from ustd.

Platform #define (by user) Comment
ATtiny __ATTINY__ For very low resource ATMELs
Arduino __UNO__ Should work with low resource arduinos
Arduino __ATMEGA__ Should work with most arduinos
FeatherM0 __FEATHER_M0__ Adafruit feather M0 (Wifi)
RP PICO __RP2040__ Raspberry Pi PICO RP2040
FeatherM4 __FEATHER_M4__ Adafruit feather M4 (Wifi)
STM32 __BLUEPILL__ STM32F103C8T6 ARM Cortex-M3
STM32 __BLACKPILL__ STM32F411 ARM Cortex-M4
NRF52 __NRF52__ Feather NRF52832 Cortex-M4
Teensy40 __TEENSY40__ Teensy 4.0 Cortex-M7
Nano33BLE __NANOBLE__ Arduino Nano 33 BLE (Sense) nRF52840
ESP8266 __ESP__ For ESP8266 and ESP32
ESP32 __ESP32__ ESP32
ESP32-C3 __ESP32_RISC_ ESP32-C3 (RISC-V)
ESP32DEV __ESP32DEV__ ESP32 git head
Maix Bit __MAIXBIT__ Sipeed Maix Bit RISC-V
Longan __LONGAN_NANO__ Sipeed Longan Nano RISC-V
Mac __APPLE__ Should be defined already
Linux __linux__ Should be defined already

Note: If the desired MCU is not in that list, select one with similar characteristics, these platform defines are used to generate feature-lists that are used by muwerk's modules.

Additional selectable options

Option Comment
USTD_OPTION_FS_FORCE_SPIFFS to continue to use old SPIFFS instead of LittleFS. New default for ESP8266 is LittleFS.
USTD_OPTION_FS_FORCE_NO_FS Disable all filesystem related functionality
USTD_OPTION_FS_FORCE_LITTLEFS switch to LittleFS on ESP32 (currently SPIFFS is still used as default for tensilica-based ESPs for compatibility reasons). New ESP32 cores have LittleFS support. For ESP32_RISC cores (e.g. ESP32-C3), LITTLEFS is ALWAYS used, since there is no legacy.

Defines generated by ustd_platform.h depending on the platform define above

Note: All defines below are automatically generated, they are derived from the platform define above:

Family defines

Platform define Automatically defined family Comment
__UNO__ __ARDUINO__ 8-bit Atmel Arduinos
__MEGA__ __ARDUINO__ "
__FEATHER_MO__ __ARM__ ARM cortex
__RP2040__ __ARM__, __RP_PICO__ "
__FEATHER_M4__ __ARM__ "
__BLUEPILL__ __ARM__ "
__BLACKPILL__ __ARM__ "
__NRF52__ __ARM__ "
__TEENSY40__ __ARM__ "
__NANOBLE__ __ARM__ "
__ESP__ __TENSILICA__ Espressif Tensilica
__ESP32__ __TENSILICA__ "
__ESPDEV__ __TENSILICA__ "
__ESP32_RISC__ __RISC_V__ RISC-V ESP32-C3
__MAIXBIT__ __RISC_V__ RISC-V based MCUs
__LONGAN_NANO__ __RISC_V__ RISC-V based MCUs
__APPLE__ __UNIXOID__ macOS computer
__linux__ __UNIXOID__ Linux computer

Features

Define Comment
USTD_FEATURE_MEMORY This is set to a class of available memory, see below for possible values.
USTD_FEATURE_FILESYSTEM The system has a filesystem, muwerk APIs defined in filesystem.h and jsonfile.h are available.
USTD_FEATURE_FS_SPIFFS Filesystem is SPIFFS format (legacy ESP8266 and all ESP32 with tensilica cores)
USTD_FEATURE_FS_LITTLEFS Filesystem is LittleFS (standard for ESP8266 and ESP32C3 RISC-V)
USTD_FEATURE_FS_SD Future: SD Filesystem
USTD_FEATURE_EEPROM Platform has EEPROM storage
USTD_FEATURE_SYSTEMCLOCK System has a clock
USTD_FEATURE_CLK_READ Time can be read
USTD_FEATURE_CLK_SET Time can be set
USTD_FEATURE_NETWORK Network access available
USTD_FEATURE_FREE_MEMORY freeMemory() is available
USTD_FEATURE_SUPPORTS_NEW_OPERATOR Platform SDK has it's own new operator

Possible values for USTD_FEATURE_MEMORY

(Automatically derived by ustd_platform.h from platform define __xxx__)

Value Example platform
USTD_FEATURE_MEM_512B ATtiny85
USTD_FEATURE_MEM_2K Arduino UNO, ATtiny1614, AT328P
USTD_FEATURE_MEM_8K Arduino MEGA
USTD_FEATURE_MEM_32K ESP8266, Bluepill, Cortex M0, M3, M4F
USTD_FEATURE_MEM_128K Blackpill, ESP32
USTD_FEATURE_MEM_512K
USTD_FEATURE_MEM_1M Unixoids & RISC-V

To make code dependent on a memory-class, use something like:

#if USTD_FEATURE_MEMORY >= USTD_FEATURE_MEM_2K
// Feature that requires at least 2k RAM
#endif

Example

// first a platform define (see table above):
#define __ESP32__
#include "ustd_array.h"

const int ci[]={1,2,3,4,5};
ustd::array<int> ia(ci,5);
for (auto i : ia) {
    printf("%d\n",i);
}

Installation

ustd is available via Arduino library manager or platformio:

Complete example

See Examples for a complete build example with ustd and linux, Arduino-IDE or platformio.

Related projects

  • ustd is used by muwerk to implement a portable cooperative scheduler with MQTT-like communication queues.

History

  • 0.7.5 (2023-07-30) Sipeed Longan RISC-V
  • 0.7.4 (2022-10-17) Support for ESP32-C3 (RISC-V), tested with Adafruit QTPY ESP32-C3, platform define __ESP32_RISC__. 'Legacy' ESPs automatically define family __TENSILICA__, whereas the new RISC-V based chip defines family __RISC_V__. Note: __ESP32_RISC__ always uses LittleFS!
  • 0.7.3 (2022-08-26) Minimal doc fixes.
  • 0.7.2 (2022-08-04) New option USTD_OPTION_FS_FORCE_LITTLEFS for ESP32. Switches to LittleFS for new cores. For compatibility reasons currently default file system for ESP32 is still SPIFFS.
  • 0.7.1 (2022-05-03) Teensy 4.0 support (#20, thanks @SteveEisner).
  • 0.7.0 (2021-10-19) Slight breaking change in array-read handling: Earlier versions allowed read-operations to grow (thus mutating) the array, if the array was initialized as growing. Changed via #17, thanks @mzanetti.
  • 0.6.2 (2021-06-07) Support multiple inclusion of global operators / functions in one submodule (Thanks @mo22, #13)
  • 0.6.1 (2021-02-26) Initial Raspberry PICO rp2040 support.
  • 0.6.0 (2021-02-09) New platforms, iterator and copy-constructor support.
    • Support for iterators and copy-constructors in ustd::array, ustd::queue, and ustd::map. (Thanks proddy for iterator sample implementation.)
    • Platforms: Feather M4 added: __FEATHER_M4__
    • Blackpill STM32F411 added.
    • Arduino Nano 33 BLE added. Note: requires platformio's lib_ldf_mode = chain+ definition in platform.ini, otherwise platformio will get confused about including WiFi.h, because of faulty #ifdef parsing of ustd_platformio.h.
    • ASSERT() macros removed due to clashes.
  • 0.5.0 (2021-01-30) BREAKING CHANGE: In order to prevent name-clashes for include-files for Arduino-IDE users, all ustd include files now have an ustd_ prefix. Compatibility-versions without ustd_ that include the ustd_ versions are provided, with exception of queue.h (clash with ESP8266-Wifi) and platform.h (clash with RISC-V sdk).
  • CI (2021-01-28) Use Github actions to test build for all platform defines.
  • 0.4.4 (2021-01-25) Missing USTD_FEATURE_FILESYSTEM defines for ESPs added.
  • 0.4.2 (2021-01-24) New platforms __FEATHER_M0__ (ARM Cortex M0), __BLUEPILL__ (ARM Cortex M3), __NRF42__ (ARM Cortex M4F), __MAIXBIT__ (RISC-V). Bugfix for zero-initialisation of array, map, and queue (no longer uses memset).
  • 0.4.1 (2021-01-22) Bugfix for USTD_FEATURE_MEMORY handling. ATtiny no longer supports ustd::function<>.
  • 0.4.0 (2021-01-19) Feature defines in ustd_platform.h for better hardware specific adaptations.
  • 0.3.6 (2021-01-12) Support for UNO and MEGA in functional.h via __ARDUINO__ define.
  • 0.3.5 (2021-01-12) New function freeMemory(), new platform define __UNO__. (Both __UNO__ and __ATMEGA__ implicitly define __ARDUINO__)
  • 0.3.4 (2021-01-11) Small documentation fixes.
  • 0.3.3 (2021-01-08) ustd::array::resize() did not correctly update the array size, which would lead to memory corrupts (tuxpoldo). Improvements for debug macros.
  • 0.3.2 (2021-01-07) More consistent debug interface using DBG() macros (see ustd_platform.h), fixes to USTD_ASSERT macro that was inconsistently named ASSERTS.
  • 0.3.1 (2020-12-25) More SPIFFS vs LittleFS preparations
  • 0.3.0 (2020-10-26) Cleanup ustd_platform.h: ESP32 continues to use SPIFFS by default, ESP8266 LittleFS (since SPIFFS is deprecated for ESP8266, and LittleFS is not (yet) available for ESP32). This is a breaking change for ESP8266 installations that require the filesystem, since an upgrade from SPIFFS to LittleFS is required, see munet Readme for additional information.
  • 0.2.2 (2020-09-27) Support for LittleFS as successor of ESP8266/ESP32 filesystem
  • 0.2.1 (2019-09-19) Functional support for AVRs added (from project functional-avr by winterscar).

References