Язык c Java подобным синтаксисом + RTOS + кросс-платформенные драйверы для 8-битных МК
🚀 Черновая документация, в процессе написания, содержит ошибки!
Полное руководство по созданию первого проекта на J8B
Проект находится на ранней, но активной стадии разработки
Существующие решения (Arduino, MicroPython) не обеспечивают:
Arduino и MicroPython, несмотря на популярность, имеют ограничения для кросс-платформенной разработки под 8-битные МК:
Особенности языка:
Пример класса для GPIO:
class Led {
private byte pin;
public Led(byte pin) { this.pin = pin; }
public void on() { HAL.GPIO.write(pin, HIGH);}
}
Поддерживаемые архитектуры:
Функционал:
В проекте будут применены(и частично улучшены) решения и архитектурные подходы, отработанные в предыдущих разработках:
Репозиторий проекта: github.com/w5277c/vm5277
bool, byte, short, int, fixed (Q7.8), enumif-else, switch-case)for, while, do-while) с поддержкой break/continuetry-catch) с трассировкой стекаexamples/j8b/
Сейчас лучше всего начать знакомство с тулкитом на ATmega168p или ATmega328p (например, на плате Arduino Uno).
Хотя все инструменты кроссплатформенные (Java),
рекомендую начать под GNU Linux (Debian), так как на текущем этапе
тулкит тестируется только под Debian.
Вот как выглядит код с обработкой исключений, его сборка и результат выполнения на реальном МК:
// Пример работы с исключениями в J8B
class Main {
exception TestException {
FIRST,
SECOND;
}
public static void main() {
final byte b1 = 200;
byte b2; b2 = 200;
byte b3; b3=0;
final byte b4=0;
System.out("\nСложение с переполнением вне обработчика искючения(статика): "); System.out(b1+100);
System.out("\nСложение с переполнением вне обработчика искючения(runtime): "); System.out(b2+100);
try {
System.out("\nСложение с переполнением в обработчике искючения(статика): "); System.out(b1+100);
}
catch(MathOverflowException ex) {
System.out("MathOverflowException");
}
try {
System.out("\nСложение с переполнением в обработчике искючения(runtime): "); System.out(b2+100);
}
catch(MathOverflowException ex) {
System.out("MathOverflowException");
}
System.out("\nДеление на 0 вне обработчика искючения(runtime): "); System.out(b1/b3);
try {
System.out("\nДеление на 0 в обработчике искючения(runtime): "); System.out(b1/b3);
}
catch(DivByZeroException ex) {
System.out("DivByZeroException");
}
try {
System.out("\nIOException.throw(): ");
IOException.throw();
}
catch(Exception ex) {
System.out("IOException");
}
System.out("\nОбрабчик MathException для цикла for(byte f=5;;f--):");
try {
for(byte f=5;;f--) {
System.out(f); System.outChar(' ');
}
}
catch(MathException ex) {
System.out("MathException, typeId:"); System.out(ex.typeId()); System.out(", code:"); System.out(ex.code());
}
System.out("\nВызов цепочки методов, последний сгенерирует TestException с кодом CODE_SECOND: ");
try {
method1();
}
catch(TestException ex) {
System.out(ex);
}
System.out("\nБросаем Runtime исключение - выход из программы с трассировкой исключения: ");
RuntimeException.throw();
System.out("\ndone");
}
public static void method1() throws TestException {
method2();
}
public static void method2() throws TestException {
method3();
}
public static void method3() throws TestException {
method4();
}
public static void method4() throws TestException {
method5();
}
public static void method5() throws TestException {
method6();
}
public static void method6() throws TestException {
method7();
}
public static void method7() throws TestException {
method8();
}
public static void method8() throws TestException {
TestException.throw(TestException.SECOND);
}
}
kostas@work:~/repos/w5277c/vm5277_local/examples/j8b/exception$ mvn j8b:run -Parduino-uno
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------< ru.vm5277.j8b.examples:exception >------------------
[INFO] Building exception 1.0-SNAPSHOT
[INFO] from pom.xml
[INFO] --------------------------------[ j8b ]---------------------------------
[INFO]
[INFO] --- j8b:0.1.0:run (default-cli) @ exception ---
[INFO] === J8B Maven plugin - RUN ===
[INFO] Using toolkit at: /home/kostas/vm5277
[INFO] Main source file: /media/kostas/repos/w5277c/vm5277_local/examples/j8b/exception/src/Main.j8b
Compile SUCCESS, warnings:0
Assemble SUCCESS, warnings:0
;j8b flasher: firmware flasher for vm5277 Embedded Toolkit
;Version: 0.2 | License: Apache-2.0
;================================================================
;WARNING: This project is under active development.
;The primary focus is on functionality; testing is currently limited.
;Please report any bugs found to: konstantin@5277.ru
;================================================================
Toolkit path: /home/kostas/vm5277
Source: /media/kostas/repos/w5277c/vm5277_local/examples/j8b/exception/target/arduino-uno/Main_cseg.hex
----- Source segments -----
Start = 0x0000, Length = 0x0954 bytes
Start = 0x7BFF, Length = 0x0001 bytes
-----
Total : 2389 bytes 7.5%
Connecting to device: auto detect
Serial port: /dev/ttyUSB0
Connection mode:2 wire mode
Device info:BLDR NORMAL v.00: AVR, sig:001e950f, uid:6e19fb01efa9fda1
Flashing(smart mode)...
______________________________________________________________
[wiiwwwwwwwwwwwwwwww-------------------------------------------]
[--------------------------------------------------------------]
[--------------------------------------------------------------]
[-------------------------------------------------------------i]
Success, time: 0.351 s
Rebooting...
Success, time: 0.005 s
Entering interactive mode. Press Ctrl+C to exit.
Сложение с переполнением вне обработчика искючения(статика): 44
Сложение с переполнением вне обработчика искючения(runtime): 44
Сложение с переполнением в обработчике искючения(статика): MathOverflowException
Сложение с переполнением в обработчике искючения(runtime): MathOverflowException
Деление на 0 вне обработчика искючения(runtime): 255
Деление на 0 в обработчике искючения(runtime): DivByZeroException
IOException.throw(): IOException
Обрабчик MathException для цикла for(byte f=5;;f--):5 4 3 2 1 0 MathException, typeId:6, code:0
Вызов цепочки методов, последний сгенерирует TestException с кодом CODE_SECOND:
Stacktrace for TestException, code:SECOND
Main.j8b:118 TestException.throw(byte)
Main.j8b:115 Main.method8()
Main.j8b:112 Main.method7()
Main.j8b:109 Main.method6()
Main.j8b:106 Main.method5()
Main.j8b:103 Main.method4()
Main.j8b:100 Main.method3()
Main.j8b:97 Main.method2()
Main.j8b:84 Main.method1()
End stacktrace
Бросаем Runtime исключение - выход из программы с трассировкой исключения:
Stacktrace for RuntimeException, code:0
Main.j8b:91 RuntimeException.throw()
End stacktrace
Что демонстрирует этот пример:
try-catch
NetBeans IDE с плагином J8B: подсветка синтаксиса, дерево проекта
Возможности плагина в релизе:
Плагин находится в черновой версии и плохо оттестирован.
Скачать:
nb-lsp-plugin-0.1.nbm
| Этап | Задачи | Срок |
|---|---|---|
| Бета компилятора и RTOS Core |
|
Q1 2026 |
| Кросс-платформенность |
|
Q2 2026 |
В виде фоновой задачи, для удобства разработки планируется реализация LSP-сервера с:
VS Code, Kate и вероятно IntelliJ
Обсуждение проекта: Telegram | Контакты: konstantin@5277.ru