Классы InputStream
и OutputStream
в пакете mcujavasource.mcu.io
похожи на стандартные классы из java.io
. Сейчас потоки (stream) используются для UART, они не закрываются, значит, у них нет метода close() (позже это может измениться). Особенность переводчика для AVR: не используйте getInputStream(), если ни один из методов read() или available(), или skip() не вызывается в программе (получится плохое прерывание, и МК будет постоянно сбрасываться). Если прием данных по UART не нужен, уберите из программы упоминание про приемник (метод getInputStream()).
Классов Reader и Writer нет в МК. Поддержка кодировок не реализована (используется только кодировка по умолчанию). Она не вмещается в микроконтроллер. Вместо буферизированных Reader и Writer есть BufferedInputStream
и BufferedOutputStream
Массивы в Java всегда нужно инициализировать. В MCU Java source массивы обязательно нужно определять и инициализировать в одном операторе:
int[] numberArray = new int[20]; //numberArray имеет 20 элементов
int array2[] = new int[10]; //array2 имеет 10 элементов
Принимает данные из терминала, и когда нажимают Enter (символ '\n') или размер текста доходит до максимального, передает назад фразу "You entered ", затем принятый текст.
Вместо текста "You entered " можно ввести свой, например "Повторяю ещё раз: ", "И я подумал: " и т. п.
import mcujavasource.mcu.*;
import mcujavasource.mcu.io.*;
/** Учебник 4: UART repeater.
* Receives text from a terminal and when Enter is pressed ('\n' char) or
* maximum text size is reached, transmits back "You entered ",
* then the text received.
* Uart speed = 4800 bps at 1 MHz MCU clock frequency, 38400 bps at 8 MHz.
* Uart settings: 8 bits character, no parity, one stop bit.
* Maximum text size is 32 chars.
*/
public class Tutorial4 extends Microcontroller
{
private static final String HELLO = "Hello from Java!\r\n";
private static final String BEROFE_TEXT = "You entered '";
private static final String AFTER_TEXT = "'.\r\n";
private UartInputStream uartInput;
private UartOutputStream uartOutput;
private byte[] buffer = new byte[32];
/** Buffer limit */
private int limit = 0;
public void init()
{ //register initialization on startup
Uart uart = getHardware().getDefaultUart();
uart.init(25, true, 8, Uart.Parity.NONE, false);
uartInput = uart.getInputStream();
uartOutput = uart.getOutputStream();
}
public void start()
{ //main program
getHardware().setInterruptsEnabled(true);
uartOutput.write(HELLO);
while(true)
{ limit = 0;
byte b;
do
{ b = (byte) uartInput.read();
buffer[limit++] = b;
}
while(b != '\n' && limit < 32);
uartOutput.write(BEROFE_TEXT);
int position;
for(position = 0; position < limit; position++)
{ uartOutput.write(buffer[position]);
}
uartOutput.write(AFTER_TEXT);
}
}
}