Embox is a configurable RTOS designed for resource constrained and embedded systems

Embox Coverity Scan Build Status

Embox is a configurable RTOS designed for resource constrained and embedded systems. Embox main idea is using Linux software without Linux.

Achievements

Key features

  • POSIX-compliant
  • C++ support
  • File systems: FAT, ext2/3/4, ...
  • TCP/IP: BSD sockets; supported protocols: UDP, HTTP, ARP, NTP, ICMP, ...
  • Cross-platform: ARM, MIPS, x86, Microblaze, SPARC, PowerPC, E2K
  • Popular platforms: STM32, i.MX6, RaPi, ...
  • Provides popular desktop software on MCU (e.g. STM32): Qt, OpenCV, PJSIP, dropbear, ...
  • Unix-like shell utilities: ls, cat, mount, ...
  • Popular programming languages: java, python, lua, tcl, lisp, ruby

Contacts

Mailing lists:

Telegram chats:

Documentation

Getting started

Here's a quick overview on how to build and run Embox.

Required environment:

  • gcc and make
  • cross compiler for the target platform

Preparing environment

For Debian-based systems (most packages are installed out of box though):

$ sudo apt-get install build-essential gcc-multilib curl libmpc-dev python

For Arch Linux:

$ sudo pacman -S make gcc-multilib cpio qemu

For MAC OS X (requires MacPorts installed):

$ sudo port install i386-elf-gcc i386-elf-binutils cpio gawk qemu

For any system with Docker (more info on wiki Emdocker):

$ ./scripts/docker/docker_start.sh
$ . ./scripts/docker/docker_rc.sh

Building Embox

First of all:

$ git clone https://github.com/embox/embox.git embox
$ cd embox

Since Embox is highly configurable project, it is necessary to specify modules to be built and params for them. To build the OS make command is used. All commands described below are called from the embox directory, which includes src/, templates/, ...

Configuring the project

For configuring it is needed to specify params and modules supposed to be included into the system. Embox has several templates prepared, to list them use the following command:

$ make confload

The simplest way to load a template is to specify its name in the command:

$ make confload-
   

For the quick overview you can use one of qemu templates that exist for most architectures, that is, x86/qemu for x86:

$ make confload-x86/qemu

Building the image

After configuring the project just run make to build:

$ make

Running on QEMU

The resulting image can now be run on QEMU. The simplest way is to execute ./scripts/qemu/auto_qemu script:

$ sudo ./scripts/qemu/auto_qemu

sudo is requried to setup a TUN/TAP device necessary to emulate networking.

After the system is loaded, you’ll see the embox> prompt, now you are able to run commands. For example, help lists all existing commands.

To test the connection:

ping 10.0.2.16

If everything's fine, you can connect to the Embox terminal via telnet.

To exit Qemu type ctrl + A and X after that.

Debugging

You can use the same script with -s -S -no-kvm flags for debugging:

$ sudo ./scripts/qemu/auto_qemu -s -S -no-kvm

After running that QEMU waits for a connection from a gdb-client. Run gdb in the other terminal:

$ gdb ./build/base/bin/embox
...
(gdb) target extended-remote :1234
(gdb) continue

The system starts to load.

At any moment in gdb terminal you can type ctrl + C and see the stack of the current thread (backtrace) or set breakpoints (break , break : ).

Other architectures

Embox supports the following CPU architectures: x86, ARM, Microblaze, SPARC, PPC, MIPS.

In order to work with architectures other than x86 you'll need a cross compiler. After installing the cross compiler just repeat the step above, starting with configuring:

make confload-
   
    /qemu
make
sudo ./scripts/qemu/auto_qemu

   

The output is quite the same as in the case of the x86 architecture.

Networking support

Embox supports networking on qemu x86, ARM, MIPS and Microblaze.

Owner
Embox
Essential toolbox for embedded development
Embox
Comments
  • risc-v version command wrong output

    risc-v version command wrong output

    template: riscv/qemu-sifive-u qemu: 4.1.0 gcc:

    $ riscv64-unknown-elf-gcc --version
    riscv64-unknown-elf-gcc (SiFive GCC 8.2.0-2019.05.3) 8.2.0
    
    $qemu-system-riscv32 -nographic -machine sifive_u -kernel embox
    ***
    [email protected]:/#version                                                            
    
    .------.          _
    |  ____|         | | 
    | |____ _ __ ___ | |_    _____  __
    |  ____| '_ ` _ \|  _ \ / _ \ \/ /
    | |____| | | | | | |_) | (_) >  <  
    |______|_| |_| |_|____/ \___/_/\_\
    
    Tue Jan 28 18:30:00 MSK 2020
    
    Compiler: 8.2.0
    

    On host:

    $ date
    Tue Jan 28 19:24:41 MSK 2020
    

    But version works fine on x86 and arm.

  • modified: riscv_clk.c and qemu-sifive-u/mods.config

    modified: riscv_clk.c and qemu-sifive-u/mods.config

    Closes #1791 The recommended frequency of sifive coreclk is 1.0 GHz. include embox.arch.system(core_freq=1000000000) #define HZ 100000 then the clock works correctly

  • Implemented functions feof(), ferror() and clearerr()

    Implemented functions feof(), ferror() and clearerr()

    closes #997: Implementing ferror and friends and closes #1746 I have added functionality for detection of EOF and any ERR in the files->flags by creating macros IO_EOF_ (0x0010) and IO_ERR_ (0x0020) and updating files->flags, whenever any file IO function encounters EOF or any kind of error occurs, which is detected by functions feof() and ferror() and cleared by clearerr(). file IO functions where EOF may occur -> fread() file IO functions where ERR is set -> fflush(), fread(), fseek() and fwrite().

  • STM32F4 default config keeps restarting

    STM32F4 default config keeps restarting

    Using arm/stm32f4-discovery default configuration, immediately after exec'ing tish and showing the prompt, it show the following error and restarts.

    Started shell [tish] on device [diag]
    loading start script:
    (...)
    > ifconfig lo 127.0.0.1 netmask 255.0.0.0 up
    > route add 127.0.0.0 netmask 255.0.0.0 lo
    > ifconfig eth0 192.168.1.128 netmask 255.255.255.0 hw ether AA:BB:CC:DD:EE:02 up
    > route add 192.168.1.0 netmask 255.255.255.0 eth0
    embox>
    
      ______
     |  ____|                                            __          __
     | |___  _ __ ___            ____  ____  ____  _____/ /   _____ / /
     |  ___|| '_ ` _ \          / __ \/ __ \/ __ \/ ___/ /   |_____| |
     | |____| | | | | |_ _ _   / /_/ / /_/ / /_/ (__  )_/    |_____| |
     |______|_| |_| |_(_|_|_)  \____/\____/ .___/____(_)           | |
                                         /_/                        \_\
     ASSERTION FAILED on CPU 0
            at src/kernel/irq.c:163
            in function irq_dispatch
    
    irq_stack_protection() == 0
    
            (Stack overflow detected on irq dispatch)
    Embox kernel start
            unit: initializing embox.arch.arm.fpu.fpv5:
    (...)
    

    After bisecting the tree, the bug started at: 84747575fc6d87bbca4e1a1d713a4ca6265c4794 : third-party: Porting new version of linenoise

    Obs: There are two different observable behaviors: The one explained previously happens after 84747575fc6d87bbca4e1a1d713a4ca6265c4794, and before 4d092c573d10883c0cef3f8bad7b68d6d3f42414: drivers: Refactor cortexm systick. It changes after 4d092c573d10883c0cef3f8bad7b68d6d3f42414, showing the following instead:

    > ifconfig lo 127.0.0.1 netmask 255.0.0.0 up
    > route add 127.0.0.0 netmask 255.0.0.0 lo
    > ifconfig eth0 192.168.1.128 netmask 255.255.255.0 hw ether AA:BB:CC:DD:EE:02 up
    > route add 192.168.1.0 netmask 255.255.255.0 eth0
    
    done
    runlevel: init level is 3
    

    apparently, leaving 'gracefully' the shell, however leaving the system without ways of interacting with it anymore.

    Just reverting 84747575fc6d serves as a workaround, however 4d092c573d10 probably implies a different bug is occurring.

  • driver: clock: Add driver support for SP804

    driver: clock: Add driver support for SP804

    This adds driver support for ARM Dual-Timer Module (SP804) which is emulated in qemu-vexpress-a9.

    This closes #1769.

    Signed-off-by: Nishant Malpani [email protected]

  • compat: Add atexit()

    compat: Add atexit()

    • static implementation of atexit() with ATEXIT_MAX=32 registered functions.

    I wrote this yesterday so I thought it could be useful after seeing that an issue was opened for it. It's a simple static solution. Expanding it to one that allocates memory would be relatively simple, although I don't know if it would be actually needed. It might solve #1816 .

  • Third-party: BSP: Port Embox to Nucleo-l476rg

    Third-party: BSP: Port Embox to Nucleo-l476rg

    Add the BSP and template for the ST's Nucleo-l476rg Board. This closes #2034 It builds correctly but I have to test it on the board.

    Signed-off-by: Puranjay Mohan [email protected]

  • add test for pthread_kill

    add test for pthread_kill

    Close #1716 Done with several problems.

    • Send signal 0 with pthread_kill will return -1
    • Send signal to terminated threads behave wierd (Even crashed when the signal is SIGALRM)
  • Mirror Linux lsblk command

    Mirror Linux lsblk command

    Fixes #1699

    • This PR improves the available lsblk command in Embox. It mirrors the linux lsblk command adding the -b, --bytes flags to choose the unit of displaying size.

      lsblk

    I tried multiple ways to round the value of size to the nearest integer but they all failed resulting in the error message posted on the issue page. The current behavior is typecasting the float to uint64_t (flooring).

  • Implement 'du' command

    Implement 'du' command

    man du

    Implement only for regular files and it's enough to follow flags:

          -B, --block-size=SIZE
                  scale  sizes  by  SIZE  before printing them; e.g., '-BM' prints
                  sizes in units of 1,048,576 bytes; see SIZE format below
    
           -b, --bytes
                  equivalent to '--apparent-size --block-size=1'
    
  • Extend block_dev_test command with new options

    Extend block_dev_test command with new options

    block_dev_test command is a simple testing tool for block devices like hdd, usb, flash, etc. It checks that read/write routines work correct.

    We suggest extending the existing functionality with the following options:

    • Add parameter which specifies the block number at which the command should start at.
    • Add parameter which specifies blocks count to be tested.
    • Add option to read/write multiple blocks in a single iteration (currenly, we read/write only single block in one iteration)
  • Unable to Build Opencv

    Unable to Build Opencv

    Hi, I tried to build the opencv with stm32f746g-discovery template in Ubuntu 20.04 I am using the release version of embox-0.5.6

    Its downloading gcc version 6.3 and fails to compile it make confload-project/opencv/stm32f746g-discovery Config complete make -j4

    Failed as below checking for the correct version of gmp.h... no configure: error: Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+. Try the --with-gmp, --with-mpfr and/or --with-mpc options to specify

    then I ran this command to download those sources

    embox-0.5.6/build/extbld/third_party/gcc/gcc_build/gcc-6.3.0$ ./contrib/download_prerequisites

    and tried to compile gcc manually it fails at

    0.5.6/build/extbld/third_party/gcc/gcc_build/gcc-6.3.0/isl/include -o ubsan.o -MT ubsan.o -MMD -MP -MF ./.deps/ubsan.TPo ../.././gcc/ubsan.c ../.././gcc/ubsan.c: In function ‘bool ubsan_use_new_style_p(location_t)’: ../.././gcc/ubsan.c:1474:23: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]

    then after correcting this It got failed again at

    g++ -fno-PIE -c -DIN_GCC_FRONTEND -g -O2 -DIN_GCC -DCROSS_DIRECTORY_STRUCTURE -fno-exceptions -fno-rtti -fasynchronous-unwind-tables -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wmissing-format-attribute -Woverloaded-virtual -pedantic -Wno-long-long -Wno-variadic-macros -Wno-overlength-strings -DHAVE_CONFIG_H -I. -I. -I../.././gcc -I../.././gcc/. -I../.././gcc/../include -I../.././gcc/../libcpp/include -I/home/prabhumk/Downloads/embox-0.5.6/build/extbld/third_party/gcc/gcc_build/gcc-6.3.0/host-x86_64-pc-linux-gnu/gmp -I/home/prabhumk/Downloads/embox-0.5.6/build/extbld/third_party/gcc/gcc_build/gcc-6.3.0/gmp -I/home/prabhumk/Downloads/embox-0.5.6/build/extbld/third_party/gcc/gcc_build/gcc-6.3.0/host-x86_64-pc-linux-gnu/mpfr -I/home/prabhumk/Downloads/embox-0.5.6/build/extbld/third_party/gcc/gcc_build/gcc-6.3.0/mpfr -I/home/prabhumk/Downloads/embox-0.5.6/build/extbld/third_party/gcc/gcc_build/gcc-6.3.0/mpc/src -I../.././gcc/../libdecnumber -I../.././gcc/../libdecnumber/dpd -I../libdecnumber -I../.././gcc/../libbacktrace -I/home/prabhumk/Downloads/embox-0.5.6/build/extbld/third_party/gcc/gcc_build/gcc-6.3.0/host-x86_64-pc-linux-gnu/isl/include -I/home/prabhumk/Downloads/embox-0.5.6/build/extbld/third_party/gcc/gcc_build/gcc-6.3.0/isl/include -o cc1-checksum.o -MT cc1-checksum.o -MMD -MP -MF ./.deps/cc1-checksum.TPo cc1-checksum.c g++: error: cc1-checksum.c: No such file or directory g++: fatal error: no input files compilation terminated.

    Is there anyway to skip the gcc compilation and use the inbuilt gcc compiler.

    Below the version of gcc and arm-gcc compilers in the system gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper OFFLOAD_TARGET_NAMES=nvptx-none:hsa OFFLOAD_TARGET_DEFAULT=1 Target: x86_64-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.4.0-1ubuntu1~20.04.1' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-Av3uEd/gcc-9-9.4.0/debian/tmp-nvptx/usr,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu Thread model: posix gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)

    arm-none-eabi-gcc -v Using built-in specs. COLLECT_GCC=arm-none-eabi-gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-none-eabi/9.2.1/lto-wrapper Target: arm-none-eabi Configured with: ../configure --build=x86_64-linux-gnu --prefix=/usr --includedir='/usr/lib/include' --mandir='/usr/lib/share/man' --infodir='/usr/lib/share/info' --sysconfdir=/etc --localstatedir=/var --disable-silent-rules --libdir='/usr/lib/lib/x86_64-linux-gnu' --libexecdir='/usr/lib/lib/x86_64-linux-gnu' --disable-maintainer-mode --disable-dependency-tracking --mandir=/usr/share/man --enable-languages=c,c++,lto --enable-multilib --disable-decimal-float --disable-libffi --disable-libgomp --disable-libmudflap --disable-libquadmath --disable-libssp --disable-libstdcxx-pch --disable-nls --disable-shared --disable-threads --enable-tls --build=x86_64-linux-gnu --target=arm-none-eabi --with-system-zlib --with-gnu-as --with-gnu-ld --with-pkgversion=15:9-2019-q4-0ubuntu1 --without-included-gettext --prefix=/usr/lib --infodir=/usr/share/doc/gcc-arm-none-eabi/info --htmldir=/usr/share/doc/gcc-arm-none-eabi/html --pdfdir=/usr/share/doc/gcc-arm-none-eabi/pdf --bindir=/usr/bin --libexecdir=/usr/lib --libdir=/usr/lib --disable-libstdc++-v3 --host=x86_64-linux-gnu --with-headers=no --without-newlib --with-multilib-list=rmprofile CFLAGS='-g -O2 -fdebug-prefix-map=/build/gcc-arm-none-eabi-Gl9kT9/gcc-arm-none-eabi-9-2019-q4=. -fstack-protector-strong' CPPFLAGS='-Wdate-time -D_FORTIFY_SOURCE=2' CXXFLAGS='-g -O2 -fdebug-prefix-map=/build/gcc-arm-none-eabi-Gl9kT9/gcc-arm-none-eabi-9-2019-q4=. -fstack-protector-strong' FCFLAGS='-g -O2 -fdebug-prefix-map=/build/gcc-arm-none-eabi-Gl9kT9/gcc-arm-none-eabi-9-2019-q4=. -fstack-protector-strong' FFLAGS='-g -O2 -fdebug-prefix-map=/build/gcc-arm-none-eabi-Gl9kT9/gcc-arm-none-eabi-9-2019-q4=. -fstack-protector-strong' GCJFLAGS='-g -O2 -fdebug-prefix-map=/build/gcc-arm-none-eabi-Gl9kT9/gcc-arm-none-eabi-9-2019-q4=. -fstack-protector-strong' LDFLAGS='-Wl,-Bsymbolic-functions -Wl,-z,relro' OBJCFLAGS='-g -O2 -fdebug-prefix-map=/build/gcc-arm-none-eabi-Gl9kT9/gcc-arm-none-eabi-9-2019-q4=. -fstack-protector-strong' OBJCXXFLAGS='-g -O2 -fdebug-prefix-map=/build/gcc-arm-none-eabi-Gl9kT9/gcc-arm-none-eabi-9-2019-q4=. -fstack-protector-strong' INHIBIT_LIBC_CFLAGS=-DUSE_TM_CLONE_REGISTRY=0 AR_FOR_TARGET=arm-none-eabi-ar AS_FOR_TARGET=arm-none-eabi-as LD_FOR_TARGET=arm-none-eabi-ld NM_FOR_TARGET=arm-none-eabi-nm OBJDUMP_FOR_TARGET=arm-none-eabi-objdump RANLIB_FOR_TARGET=arm-none-eabi-ranlib READELF_FOR_TARGET=arm-none-eabi-readelf STRIP_FOR_TARGET=arm-none-eabi-strip Thread model: single gcc version 9.2.1 20191025 (release) [ARM/arm-9-branch revision 277599] (15:9-2019-q4-0ubuntu1)

  • add Embox article to English Wikipedia

    add Embox article to English Wikipedia

    @anton-bondarev

    Embox is mentioned in https://en.wikipedia.org/wiki/Comparison_of_real-time_operating_systems but I can't find the Embox article in the English Wikipedia. There is https://ru.wikipedia.org/wiki/Embox but there is no https://en.wikipedia.org/wiki/Embox .

X-CUBE-AZRTOS-F4 (Azure RTOS Software Expansion for STM32Cube) provides a full integration of Microsoft Azure RTOS in the STM32Cube environment for the STM32F4 series of microcontrollers.
X-CUBE-AZRTOS-F4 (Azure RTOS Software Expansion for STM32Cube) provides a full integration of Microsoft Azure RTOS in the STM32Cube environment for the STM32F4 series of microcontrollers.

X-CUBE-AZRTOS-F4 Azure RTOS Software Expansion for STM32Cube With Azure RTOS complementing the extensive STM32Cube ecosystem providing free developmen

Dec 7, 2022
X-CUBE-AZRTOS-F7 (Azure RTOS Software Expansion for STM32Cube) provides a full integration of Microsoft Azure RTOS in the STM32Cube environment for the STM32F7 series of microcontrollers.
X-CUBE-AZRTOS-F7 (Azure RTOS Software Expansion for STM32Cube) provides a full integration of Microsoft Azure RTOS in the STM32Cube environment for the STM32F7 series of microcontrollers.

X-CUBE-AZRTOS-F7 Azure RTOS Software Expansion for STM32Cube With Azure RTOS complementing the extensive STM32Cube ecosystem providing free developmen

Nov 17, 2022
A place to collaborate on code for the Embedded.fm book club. Currently reading "STM32 ARM Programming for Embedded Systems".

Welcome to the Book Club Code site! This is a place for the Embedded.fm book club to collaborate and learn together. Repo Structure Guide Top-level fo

Jul 21, 2022
Application server for constrained platforms

micurest Application server for constrained platforms Introduction μcuREST is a C++11 library for implementing REST services on constrained platforms,

Jan 21, 2022
CML - The Configurable Math Library

Configurable Math Library For CML version 1, please see https://github.com/demianmnave/CML1. License The Configurable Math Library (CML) is released u

Dec 30, 2022
Randomized configurable bodies for Skyrim: Anniversary Edition

autoBody AE A SKSE Plugin for distributing CBBE and HIMBO presets throughout the gameworld Configurable through morphs.ini files (optionally created b

Dec 14, 2022
A configurable in-memory binary patcher.

?? Lyptus ?? A configurable in-memory binary patcher. ?? Usage Set up the Lyptus config with a list of patches to apply, and inject the Lyptus DLL int

Dec 29, 2022
Fast glsl deNoise spatial filter, with circular gaussian kernel, full configurable
Fast glsl deNoise spatial filter, with circular gaussian kernel, full configurable

glslSmartDeNoise Fast glsl spatial deNoise filter, with circular gaussian kernel and smart/flexible/adaptable -> full configurable: Standard Deviation

Dec 24, 2022
Realtime Micro Kernel -- Event-driven Run-to-Completion RTOS with Active Objects, Timed Events, Memory Pools, and Message Queues

Realtime Micro Kernel Features Active Objects Message queues Variable sized, custom messages Periodic and single timed events Memory pools Supported P

Nov 7, 2022
AnalogWrite for ESP32 and ESP32-S2 with LEDC PWM. Includes PWM Phase Control, DAC and Smart GPIO resource management.
AnalogWrite for ESP32 and ESP32-S2 with LEDC PWM. Includes PWM Phase Control, DAC and Smart GPIO resource management.

analogWrite() ESP32 Installation Instructions This library was tested using using the ESP32 Arduino IDE Boards Manager installation method. Stable rel

Jan 5, 2023
Because why not? Pi Zero bare metal project that ends in an RTOS implementation

PiZeroRTOS Because why not? This repo starts out as a Pi Zero bare metal project and it could very well end up as a viable RTOS implementation with a

Feb 13, 2022
A small RTOS for ARM Cortex-M3/M4 based Microcontrollers.
A small RTOS for ARM Cortex-M3/M4 based Microcontrollers.

A tiny RTOS for ARM Cortex-M3/M4 based Microcontrollers. Explore the docs » View Demo · Report Bug · Request Feature Table of Contents About The Proje

Dec 31, 2022
Tiny implementation of the GNU/Linux CGroupFS (sans resource controllers) as a PUFFS or FUSE filesystem for BSD platforms

CGrpFS CGrpFS is a tiny implementation of the GNU/Linux CGroup filesystem for BSD platforms. It takes the form of a either a PUFFS or FUSE filesystem,

Nov 8, 2022
Unix pager (with very rich functionality) designed for work with tables. Designed for PostgreSQL, but MySQL is supported too. Works well with pgcli too. Can be used as CSV or TSV viewer too. It supports searching, selecting rows, columns, or block and export selected area to clipboard.
Unix pager (with very rich functionality) designed for work with tables. Designed for PostgreSQL, but MySQL is supported too. Works well with pgcli too. Can be used as CSV or TSV viewer too. It supports searching, selecting rows, columns, or block and export selected area to clipboard.

Unix pager (with very rich functionality) designed for work with tables. Designed for PostgreSQL, but MySQL is supported too. Works well with pgcli too. Can be used as CSV or TSV viewer too. It supports searching, selecting rows, columns, or block and export selected area to clipboard.

Jan 4, 2023
Embedded Flutter runtime targeting Embedded Linux with Wayland

ivi-homescreen IVI Homescreen for Wayland Strongly Typed (C++) Lightweight Clang 11 Release Stripped = 151k GCC 9.3 Release Stripped = 168k Source run

Dec 13, 2022
This is a project from my Embedded Systems Lab course. It's made using C and intended for the MSP430FG461 microcontroller.

This is a project from my Embedded Systems Lab course. It's made using C and intended for the MSP430FG461 microcontroller.

Dec 21, 2021
SAE J1939 protocol free to use for embedded systems or PC with CAN-bus
SAE J1939 protocol free to use for embedded systems or PC with CAN-bus

Open SAE J1939 SAE J1939 is a protocol for shaping the CAN-bus message in a specific way that suits industrial vehicles such as tractors, machinery, t

Dec 23, 2022
Newlib for Xuantie RISC-V CPU, a lightweight C library for embedded systems.

README for GNU development tools This directory contains various GNU compilers, assemblers, linkers, debuggers, etc., plus their support routines, d

Sep 9, 2022
F Graphics Library (FGL) is a small graphics C++ portable library for LCD displays on embedded systems

F Graphics Library (FGL) Full documentation: fgl.docsforge.com (By Filipe Chagas) F Graphics Library is a C++ library that I created for use in embedd

Oct 31, 2022