/vsf

Versaloon Software Framework -- a tiny preemptive-capable event-driven incremental software framework for embedded systems

Primary LanguageCApache License 2.0Apache-2.0

VSF -- Versaloon Software Framework

GitHub

windows-build cmake-native-build cmake-arm-cross-build

vsf.linux windows build cmake-arm-cross-build cmake-native-build

中文 |

Full name of VSF is "Versaloon Software Framework". VSF is an open-source software framework for embedded applications based on Apache2 license. VSF includes hal, a pre-emptive multi-thread kernel, services and components. VSF is implemented by C language with object-oriented programming methods(PLOOC).

Overall Framework

Catalogue

Name Description
document document
doxygen configuration of doxygen
example demo codes
hardware hardware of VSF development boards
patch some patches(for 3rd-party components, etc)
script
 cmake cmake scripts
source source code of VSF
 component component(filesystem, stacks, UI, drivers, etc)
 hal hardware abstraction layer(ARCH support, chip drivers)
 kernel VSF pre-emptive/collaborative kernel
 osa_service software services based on kernel
 service software services
 shell shell to use application software for other systems
 utilities base software utilities(preprocessor, compiler, list, etc)

Kernel

Pre-emptive kernel based on event-driven architecture, supporting mcs51, 8bit MCU, 32/64 bit ARM, riscv, x86, etc.

  • event-driven architecture, sleep if no event occurred, lower-power naturally
  • in pre-emptive mode, task switch is implemented by hardware swi(software interrupt), priority of task is the priority of the swi.
  • pre-emptive scheduling for tasks with different priority, collaborative scheduling for tasks with the same priority
  • can run in other RTOS as a task, or as swi ISR
  • different tasks
    • event handler task -- minimum resources usage, 20 bytes ram usage for minimum configuration, 40 bytes ram usage for normal configuration
    • pt task
    • thread with dedicated stack -- depending on setjmp in libc
    • fsm task
    • other tasks in shell, eg pthread
  • IPC: semaphore, mutex, trigger, queue, etc

Components

  • Reasonable framework for code re-use
  • declarative development model
  • standard interface, standard port for 3rd-party components
  • software components
    • distbus -- distributed bus framework
    • fifo
    • heap
    • json
    • pool
    • stream
    • trace
  • Components
    • fs -- filesystem with vfs support
    • input -- input sub-system
    • mal -- memory abstraction layer(normally known as 'block' device)
    • scsi -- SCSI device
    • tcpip -- TCPIP stack and netdrv drivers
    • ui -- UI and display drivers
    • usb -- USB host/slave stacks
    • bt -- bt stack(using btstack)

HAL -- hardware abstraction layer

  • standard hal interface and API -- eg: vsf_spi_init can be used with hardware SPI, GPIO emulated SPI, SPI from external usb device, etc
  • IP core driver -- simplify porting by implement clock, reset, interrupt functions which is not provided by IP core
  • template for different intefaces and functionalities
  • interfaces
    • PM
    • GPIO
    • SPI
    • I2C
    • PWM
    • ADC
    • SWI
    • USART
    • FLASH
    • USB
    • ethernet

Shell

To use applications from other system, shell can be used.

  • SDL -- use applications based on SDL directly
  • linux -- use applications based on linux directly
    • posix
    • devfs
    • socket
    • console
    • libraries
      • libusb
      • libgen
      • libsdl2
      • libcurl
      • etc

3rd-party

Software Path License Link
btstack source/component/3rd-party/btstack/raw Other https://github.com/bluekitchen/btstack
coremark source/component/3rd-party/coremark/raw Apache https://github.com/eembc/coremark
freetype source/component/3rd-party/freetype/raw FreeType https://freetype.org/
zlib source/component/3rd-party/zlib/raw zlib http://zlib.net/
nuklear source/component/3rd-party/nuklear/raw MTI https://github.com/Immediate-Mode-UI/Nuklear
nnom source/component/3rd-party/nnom/raw Apache 2.0 https://github.com/majianjia/nnom
lua source/component/3rd-party/lua/raw MIT https://www.lua.org/
lwip source/component/3rd-party/lwip/raw BSD https://savannah.nongnu.org/projects/lwip/
libpng source/component/3rd-party/libpng/raw PNG2 https://libpng.sf.net
libjpeg-turbo source/component/3rd-party/libjpeg-turbo/raw BSD https://libjpeg-turbo.org/
SDL_ttf source/shell/media/sdl2/3rd-party/SDL_ttf zlib https://hg.libsdl.org/SDL_ttf/
SDL_image source/shell/media/sdl2/3rd-party/SDL_image zlib https://hg.libsdl.org/SDL_image/
lvgl source/component/3rd-party/lvgl/raw/lvgl MIT https://lvgl.io/
lv_lib_freetype source/component/3rd-party/lvgl/extension/lv_lib_freetype/raw MIT https://lvgl.io/
CMSIS source/utilities/compiler/arm/3rd-party/CMSIS Apache 2.0 https://github.com/ARM-software/CMSIS_5
evm source/component/3rd-party/evm/raw Apache 2.0 https://github.com/scriptiot/evm
LingLongGUI source/component/3rd-party/LingLongGUI/raw Apache 2.0 https://gitee.com/gzbkey/LingLongGUI
PLOOC source/utilities/3rd-party/PLOOC/raw Apache 2.0 https://github.com/GorgonMeducer/PLOOC
mbedtls source/component/3rd-party/mbedtls/raw Apache 2.0 https://tls.mbed.org/
GuiLite source/component/3rd-party/GuiLite/raw Apache 2.0 https://github.com/idea4good/GuiLite
Segger_RTT source/component/3rd-party/segger/raw/RTT segger https://wiki.segger.com/RTT
Segger_SystemView source/component/3rd-party/segger/raw/SystemView segger https://wiki.segger.com/SystemView
nuconsole source/component/3rd-party/nuconsole/raw nuvoton https://www.nuvoton.com.cn/
AIC8800M_SDK source/hal/driver/AIC/AIC8800/vendor aic http://www.aicsemi.com/
awtk LGPL 2.1 https://www.zlg.cn/index/pub/awtk.html
littlefs source/component/3rd-party/littlefs/raw BSD https://github.com/littlefs-project/littlefs
getopt_long source/shell/sys/linux/lib/3rd-party/getopt OpenBSD https://github.com/openbsd/src
regex source/shell/sys/linux/lib/3rd-party/regex OpenBSD https://github.com/openbsd/src
fnmatch source/shell/sys/linux/lib/3rd-party/fnmatch BSD http://www.jbox.dk/sanos/source/lib/fnmatch.c.html
glob source/shell/sys/linux/lib/3rd-party/glob BSD https://github.com/cloudius-systems/musl
setjmp source/hal/arch/x86/win BSD
libtuv source/shell/sys/linux/lib/3rd-party/libtuv/raw Apache 2.0 https://github.com/Samsung/libtuv