JuC

Projekt ma na celu wykonanie oprogramowania i sprzętu pozwalającego na uruchamianie i debugowanie programów napisanych w języku Java na wybranych rodzinach mikrokontrolerów.

Podstawowym założeniem projekty jest stworzenie kompilatora, który zamieni bytecode języka java na kod maszynowy. Kompilator musi posiadać mocną optymalizację kodu, ponieważ bezpośrednia translacja nie jest dopuszczalna dla małych platform. Kompilator powinien być w stanie wykonać część kodu, który może się wykonać jeszcze przy kompilacji, dynamicznie przydzielaną pamięć powinien zamieniać na statyczną wszędzie gdzie to tylko możliwe i wiele innych rzeczy, które pomogą zmniejszyć kod maszynowy i zajętość pamięci danych. Powinna istnieć też platforma x86/x64, Windows/Linux, dzięki której kompilator może kompilować sam siebie.

Powinien też istnieć debbuger (sprzęt i oprogramowanie), który umożliwi debugowanie programu w sposób zbliżony do aktualnie znanych debbugerów java.

Przykładowy program, który może zostać uruchomiony na mikrokontrolerze PIC10F200 może wyglądać następująco:


import juc.pic10f200.Port;
import juc.pic10f200.Timer;
import juc.pic10f200.Power;

class Main
{

	// 
	const short MAX_COUTER = 32767;

	// Current switches state (xor of all switches)
	static boolean switchState;
	static boolean _GET_switchState()
	{
		boolean on = Port.data[0];
		on = on != Port.data[1];
		on = on != Port.data[2];
		return on;
	}

	public static void Main()
	{
		short counter;		// Timer overflows counter
		boolean onState;	// Switch state, when lights are on

		Port.wakeOnChange = true;
		Port.outputDirection = new byte[] { false, false, false, true };

		Timer.wakeOnOverflow = true;
		Timer.source = Timer.CLOCK_1_256;
		Timer.enable = true;

		counter = 0;
		onState = !switchState;

		do {

			if (switchState == onState) {

				Port.output[3] = true;
				if (Timer.overflow) {
					Timer.overflow = false;
					if (counter == MAX_COUTER) {
						onState = !switchState;
					} else {
						counter++;
					}
				}

			} else {

				Port.output[3] = false;
				counter = 0;
				if (Timer.overflow)
					Timer.overflow = false;

			}

			Power.sleep();

		} while (true);

	}


}

Powyższy program to sterownik oświetlenia, który zapala światło przy wciśnięciu dowolnego z trzech włączników i gasi po zadanym czasie.

Aktualny stan prac

Aktualnie projekt jest zawieszony i istnieje prawdopodobieństwo, że nie zostanie wznowiony z powodu zbyt dużego nakładu pracy w stosunku do przydatności dla mnie oraz przypuszczalnego zainteresowania innych osób. Dotychczas zostały rozpoczęte prace nad pewnymi podstawowymi częściami kompilatora oraz projekt urządzenia do debugowania i programowania mikrokontrolerów. Projekt JuC nie zawiera jeszcze niczego wartego publikacji na tej stronie.

© 2012 Dominik Kilian