Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/fermarsan/aixt
Programming framework for microcontrollers based on a V-like language.
https://github.com/fermarsan/aixt
compiled-language microcontrollers programming-language transcompiler transpiler v-like v-programming-language vlang
Last synced: 3 months ago
JSON representation
Programming framework for microcontrollers based on a V-like language.
- Host: GitHub
- URL: https://github.com/fermarsan/aixt
- Owner: fermarsan
- License: mit
- Created: 2023-12-10T02:20:35.000Z (11 months ago)
- Default Branch: main
- Last Pushed: 2024-04-23T06:38:21.000Z (7 months ago)
- Last Synced: 2024-04-24T02:41:50.236Z (7 months ago)
- Topics: compiled-language, microcontrollers, programming-language, transcompiler, transpiler, v-like, v-programming-language, vlang
- Language: V
- Homepage:
- Size: 54.5 MB
- Stars: 31
- Watchers: 2
- Forks: 32
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
- awesome-v - Aixt - Programming framework for microcontrollers based on a V-based language and written in V. (Applications / Interpreters/Compilers)
README
Programming Framework for Microcontrollers
Aixt is a programming framework for microcontrollers which uses a modern language syntax based on [_V_](https://vlang.io/) and able to be used by low-resource devices. Aixt is composed by 3 main components:
- The **Aixt** programming language based on the [_V language_](https://vlang.io/) syntax.
- The **Aixt to C Transpiler**, which translate the **Aixt** source code to _C_, for the specific _C_ compiler of each microcontroller.
- The **Aixt API**, which makes the programming easy by standardizing the setup and I/O functions.This diagram shows the Aixt blocks and their interactions:
```mermaid
stateDiagram-v2Aixt: Aixt (V-based)
state Aixt {
source: Source codeAPI: 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_](https://vlang.io/) 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:
- **c**: for the microcontroller native C compiler
- **nxc**: for the NXC compiler (LEGO Mindstorms NXT)
- **arduino**: for the Arduino IDE **WIP...**## Aixt Language
**Aixt** programing language implements a subset of the [_V language_](https://vlang.io/). The main differences are show as follows:
feature | V | Aixt
------------------------------|-----------------------------------------|---------------------------------------------
variables | immutable by default | mutable by default
strings | dynamic-sized | dynamic-sized (only if supported)
arrays | dynamic-sized | dynamic-sized (only if supported)
default integers size | 32 bits | depends on the device
structs | allow functions (object-oriented) | don't allow functions (only structured)
functions | multiple return values | only one return value
C-style preprocessor commands | only V specific ones and `#include` | support any command starting with `#`
`C.functions()` | need to explicitly include the C file | auto include `function.c` for `C.function()`### Example with `main` function
```v
/* 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)
```v
// Blinking LEDs on the Seeeduino XIAO-SAM21 board (Arduino backend)
import time
import pinpin.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:
- Digital input/output
- Analog inputs (ADC)
- PWM outputs
- Serial port (UART)## 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
```
or in Windows:
```
aixt.exe
```### 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_](https://www.sil.org/system/files/reapdata/90/20/51/90205190508691852389084667097660892450/tca_Ticuna_Dictionary_2016_web.pdf) language.
## Have questions?
Nice, you can contact me via mail.
Email: [email protected]
## 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](docs/Devices%20and%20Boards.md) and you know how to program it in C?... You can easily add it to Aixt, please check [CONTRIBUTING.md](CONTRIBUTING.md).
Take a look at [TODO.md](TODO.md) to find a task for you.
Please check [CONTRIBUTING.md](CONTRIBUTING.md) to learn how you can contribute.
# License
The Aixt project is licensed under the [MIT](LICENSE), which is attached in this repository.