VSF -- Versaloon Software Framework

April 7, 2026 · View on GitHub

GitHub

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

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

vsf.demo 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

NameDescription
documentdocument
doxygenconfiguration of doxygen
exampledemo codes
hardwarehardware of VSF development boards
patchsome patches(for 3rd-party components, etc)
script
 cmakecmake scripts
sourcesource code of VSF
 componentcomponent(filesystem, stacks, UI, drivers, etc)
 halhardware abstraction layer(ARCH support, chip drivers)
 kernelVSF pre-emptive/collaborative kernel
 osa_servicesoftware services based on kernel
 servicesoftware services
 shellshell to use application software for other systems
 utilitiesbase 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 interfaces 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

SoftwarePathLicenseLink
btstacksource/component/3rd-party/btstack/rawOtherhttps://github.com/bluekitchen/btstack
coremarksource/component/3rd-party/coremark/rawApachehttps://github.com/eembc/coremark
freetypesource/component/3rd-party/freetype/rawFreeTypehttps://freetype.org/
zlibsource/component/3rd-party/zlib/rawzlibhttp://zlib.net/
nuklearsource/component/3rd-party/nuklear/rawMTIhttps://github.com/Immediate-Mode-UI/Nuklear
nnomsource/component/3rd-party/nnom/rawApache 2.0https://github.com/majianjia/nnom
luasource/component/3rd-party/lua/rawMIThttps://www.lua.org/
lwipsource/component/3rd-party/lwip/rawBSDhttps://savannah.nongnu.org/projects/lwip/
libpngsource/component/3rd-party/libpng/rawPNG2https://libpng.sf.net
libjpeg-turbosource/component/3rd-party/libjpeg-turbo/rawBSDhttps://libjpeg-turbo.org/
SDL_ttfsource/shell/media/sdl2/3rd-party/SDL_ttfzlibhttps://hg.libsdl.org/SDL_ttf/
SDL_imagesource/shell/media/sdl2/3rd-party/SDL_imagezlibhttps://hg.libsdl.org/SDL_image/
lvglsource/component/3rd-party/lvgl/raw/lvglMIThttps://lvgl.io/
lv_lib_freetypesource/component/3rd-party/lvgl/extension/lv_lib_freetype/rawMIThttps://lvgl.io/
CMSISsource/utilities/compiler/arm/3rd-party/CMSISApache 2.0https://github.com/ARM-software/CMSIS_5
PLOOCsource/utilities/3rd-party/PLOOC/rawApache 2.0https://github.com/GorgonMeducer/PLOOC
mbedtlssource/component/3rd-party/mbedtls/rawApache 2.0https://tls.mbed.org/
Segger_RTTsource/component/3rd-party/segger/raw/RTTseggerhttps://wiki.segger.com/RTT
Segger_SystemViewsource/component/3rd-party/segger/raw/SystemViewseggerhttps://wiki.segger.com/SystemView
nuconsolesource/component/3rd-party/nuconsole/rawnuvotonhttps://www.nuvoton.com.cn/
AIC8800M_SDKsource/hal/driver/AIC/AIC8800/vendoraichttp://www.aicsemi.com/
awtkLGPL 2.1https://www.zlg.cn/index/pub/awtk.html
littlefssource/component/3rd-party/littlefs/rawBSDhttps://github.com/littlefs-project/littlefs
getopt_longsource/shell/sys/linux/lib/3rd-party/getoptOpenBSDhttps://github.com/openbsd/src
regexsource/shell/sys/linux/lib/3rd-party/regexOpenBSDhttps://github.com/openbsd/src
fnmatchsource/shell/sys/linux/lib/3rd-party/fnmatchBSDhttp://www.jbox.dk/sanos/source/lib/fnmatch.c.html
globsource/shell/sys/linux/lib/3rd-party/globBSDhttps://github.com/cloudius-systems/musl
setjmpsource/hal/arch/x86/winBSD
libtuvsource/shell/sys/linux/lib/3rd-party/libtuv/rawApache 2.0https://github.com/Samsung/libtuv
scguisource/component/ui/tgui/view/scgui_view/scgui.c&hMIThttps://gitee.com/li_yucheng/scgui