Home

Awesome

<div align="center"> <img src="assets/text-logo-sh.png" width="24%" height="24%"> <h1>Programming Framework for Microcontrollers</h1> </div>

Aixt is a programming framework for microcontrollers which uses a modern language syntax based on V and able to be used by low-resource devices. Aixt is composed by 3 main components:

This diagram shows the Aixt blocks and their interactions:

stateDiagram-v2

    Aixt: Aixt (V-based)
    state Aixt {
        source: Source code

        API: Microcontroller API    
        state API {
            PICs: PIC
            ATM: AT
            ESP
            RP2040
            PSoC
            others2: ...
            NXT: NXT brick
        }
    }



    Aixt2C: Transpiler
    state Aixt2C {
        state V {
            Transpiler: Transpiler
        }
        
        state TOML {
            setup: Setup file
        }
    }

    C: C
    state C {
        Tr_Code: Transpiled code
    }

    state Compiler {
        XC8
        XC16
        Arduino
        GCC
        others: ...
        nbc: nbc (NXC)
    }

    state machine {
        BF: Binary file
    }

    source --> Aixt2C
    API --> Aixt2C
    Aixt2C --> C
    C --> Compiler
    Compiler --> machine

Aixt is designed as modular as possible to facilitate the incorporation of new devices and boards. This is mainly possible by using a configuration file (in TOML format) instead of creating new source code for each new device. That .TOML file contains the specific parameters of each device, board or compiler such as: variable types, initialization commands, compiler paths, etc.

Aixt to C Transpiler

The transpiler is written in V and uses V's native compiler facilities to transpile from V to C. This is implemented in the folders \aixt_build and \aixt_cgen, and the main source code is the aixt.v file. It generates code for 3 different backends:

Aixt Language

Aixt programing language implements a subset of the V language. The main differences are show as follows:

featureVAixt
variablesimmutable by defaultmutable by default
stringsdynamic-sizeddynamic-sized (only if supported)
arraysdynamic-sizeddynamic-sized (only if supported)
default integers size32 bitsdepends on the device
structsallow functions (object-oriented)don't allow functions (only structured)
functionsmultiple return valuesonly one return value
C-style preprocessor commandsonly V specific ones and #includesupport any command starting with #
C.functions()need to explicitly include the C fileauto include function.c for C.function()

Example with main function

/* Turning ON by 5.5 seconds the onboard LED 10 in the Explorer16 
board with a PIC24FJ microcontroller (XC16 compiler) */
import time { sleep_ms }
import pin { high, low }

fn main() {
    high(led10)    //turn ON the LED 10 (PORTA7)
    sleep_ms(5500)
    low(led10)
}

Example without main function (Script mode)

// Blinking LEDs on the Seeeduino XIAO-SAM21 board (Arduino backend)
import time
import pin

pin.setup(2, pin.output)
pin.setup(3, pin.output)

for i in 0 .. 10 { // 10 times
	pin.high(2)
	time.sleep_ms(250)
	pin.low(2)
	time.sleep_ms(250)
}

for {
	pin.high(3)
	time.sleep(1)
	pin.low(3)
	time.sleep(2)
}

Aixt API

The Aixt API is inspired by Micropython, Arduino and Tinygo. The API for all the ports includes at least functions for:

Using Aixt

Installing Aixt from source

git clone https://github.com/fermarsan/aixt.git
cd aixt
make # make.bat on Windows

Running Aixt

run it in a Linux-based system as:

./aixt <command> <device_or_board> <source_file>

or in Windows:

aixt.exe <command> <device_or_board> <source_file>

Running examples:

./aixt -t Emulator test.v
./aixt -b NXT ports/NXT/projects/1_motor_forward.v

Project's name

The project's name is inspired in Veasel, the Weasel pet of V Language, and at the same time is a tribute to Ticuna people who live in the Amazon forest between the borders of Colombia, Brasil and Perú. Weasels are mustelids just like otters, so the name Aixt comes from Aixtü, which is a way to say otter in Ticuna language.

Have questions?

Nice, you can contact me via mail.

Email: fmartinezsanta@gmail.com

<!-- Discord : https://discord.gg/-->

Want to contribute?

Cool, go ahead and make the contributions you want, then submit a new pull request

The microcontroller or board that you use is not listed here and you know how to program it in C?... You can easily add it to Aixt, please check CONTRIBUTING.md.

Take a look at TODO.md to find a task for you.

Please check CONTRIBUTING.md to learn how you can contribute.

License

The Aixt project is licensed under the MIT, which is attached in this repository.