Ограничения
(Версия
Firmware: 1.11)
Страничка посвящена
текущим ограничениям
Tini
API.
И хотя это далеко не полный список, в нем приведены основные ограничения
TINI
API.
Список основан на фирменном документе “Limitations
of
TINI
Firmware 1.11”.
- Начнем с загрузчика:
ВНИМАНИЕ !!! При
первом запуске системы скорость обмена между
JavaKit и
TINI
Board
должна быть установлена на 115200, далее ее можно изменить.
Загрузчик
не поддерживает скорости ниже 19200
-
Multicast Socket поддерживает только 1
локальный интерфейс в текущей группе
·
TINI поддерживает до 24 одновременных соединений
·
TINI не поддерживает фрагментацию/сборку
IP
датаграмм
·
TINI
не
поддерживает
IP
маршрутизацию
·
Для
printStackTrace()
организована частичная реализация. Подробнее..(ссылка на
api_diffs)
·
Трассировка стека ограничена 20 предшествующими вызовами
·
Native модули
не могут быть более чем 64 Кб
·
Максимальный размер всех массивов не может превышать 64 Кб
·
TINI
OS
ограничивается максимально 8ю процессами, с 32 «нитками» на процесс (в
отличии от 16 в версии 1.02х). При этом реально доступно не более 7
процессов, т.к. по умолчанию первым процессом автоматически становится «сборщик
мусора». Ваше приложение (или
Slush
)всегда будет №2, это полезно помнить при программировании и отладке.
·
Ограничения по длине локальных переменных: Максимальный объем локальных
переменных 64 ячейки. 32х разрядные переменные (int,char,byte
итп) занимают объем в 1 ячейку стека, соответственно 64х разрядные
переменные (long,double)
занимают 2е ячейки
·
Размер
Thread’s
стека 768 ячеек. Новый метод
TINIOS.setStackSize(int)
в классе com.dalsemi.system.TINIOS позволяет изменить размер стека «ниток»
·
Класс
ограничивается 255ю статическими полями (включая все статические поля «супер
класса») и 255ю
instance полями (включая все
instance поля «супер класса»)
·
Метод
ограничен 63-мя локальными переменными
·
ByteToChar ( и CharToByte) по умолчанию поддерживают две кодировки:
UTF8
и
ISO_8859_1,
все остальное нужно делать самим
·
Отконвертированный файл класса не может превышать по размеру 32 Кб.
·
Текущие
ограничения
PPP
-
«Набор по запросу» пока не поддерживается
-
Пока не поддерживаются методы:
get/setIdleTimeout()
·
Текущие
ограничения по 1-Wire
-Стоит обратить
внимание на то, что драйвер
DS2480 работает только с 1м встроенным
UARTом (S1)
·
Метод
intern()
возвращает не корректный результат
·
Есть
проблемы при работе с некоторыми
DHCP серверами :
vDHCP,
MagikDHCP,
также существуют проблемы при работе с
Umax
Ugate
3000
ADSL.
·
Файловая система
TINI поддерживает максимально до 254 файлов на директорию. При превышении
этого ограничения получается
IOException.
Так же к
IOException
приведет попытка создания файла с именем более чем 247 символов.
·
Следует
обратить внимание на процесс записи и модификации файлов. В случае если
во время модификации файла будет снято питание или произойдет «системная
перезагрузка» то значение времени будет соответствовать не реальному, а
тому, что было перед началом модификации.
·
Не
стоить открывать на чтение/запись (имеется ввиду
RandomAccessFile)
уже исполненный файл, это вызывает
IOException.
·
Метод
Date.toLocaleString()
возвращает то же самое значение что и
Date.toString(). Объясняется это тем, что
TINI
не поддерживает классы форматирования даты.
·
В том
случае если файл датирован ранее чем 1м Января 1970 года, то объекты
Calendar и
Date
будут возвращать неверные значения.
·
Вызов
методов
set(int,
int) и
clear(int), а так же объекта
GregorianCalendar
недаст нужного
эффекта в том случае если запись примет одно из значений:
-DAY_OF_WEEK
-DAY_OF_WEEK_IN_MONTH
-ERA
-WEEK_OF_MONTH
-WEEK_OF_YEAR
·
Методы
Double.toString()
и
Double.valueOf(String)
возвращают неправильные значения. В описание указано что «что настолько
точны насколько это возможно для
API и общего быстродействия». Например:
o
System.out.println(3.05f);
возвратит значение "3.0499999". Имейте ввиду что это происходит только
при преобразовании
String
à
“Float
Point”
или обратном преобразовании “Float
Pointӈ
String
·
Возможно использование не более 255 интерфейсов в приложении. Возможно,
в бедующем это будет изменено;
·
Перед
запуском любого приложения обязательно осуществляется статическая
инициализация класса java.lang.System. Сделано это для того, что бы,
любые запущенные процессы инициализации не нарушали спецификацию
Java
VM.
> Ограничения по загрузке классов:
- Метод
getClassLoader()
из
java.lang.Class
возвращает не
корректный результат;
- Отсутствует
верификация байт кода
- Метод
loadClass(String,boolean)
из
java.lang.ClassLoader
всегда
разрешает загрузку класса, т.е. значение аргумента (boolean)
просто игнорируется;
- Метод
resolveClass(Class)
из
java.lang.ClassLoader
ничего не
делает;
-
Метод
setSigners(Class,Object[])
из
java.lang.ClassLoader
так
же
ничего
не
делает;
- Динамически
загружаемые классы не могут определять новые «нативные» методы;
- «Выгрузка» класса и
освобождение ресурсов до момента завершения приложения возможна только
при использовании метода:
-TINIClassLoader.unloadClasses(ClassLoader)
·
Поддержка
I2C,CAN
и
URL
Protocol
выведена из
состава основного
API
и перенесена в
отдельные модули, которые можно встраивать в свое приложение. Более
подробно смотри BuildDependency_README.txt
> «Отражения»
- В настоящее время
AccessibleObject является фиктивным классом, он не выставляет флаг «доступности»
объекта;
- getExceptionTypes
не существует;
- Модификатор
strictfp не отражается в модификаторах методов;
- Для высвобождения
места информация «отражения» для
private
методов,
static
final
записей,
private
static
записей,
private
transient
записей не
включены в
API.
Все это необходимо включать в свое приложение самому.
>Сериализация
TINI
API 1.1 совместима с
JDK
1.2.2 относительно сериализации за исключением следующих моментов:
-java.util.GregorianCalendar:
операции с 'nextStamp'
происходят несколько иначе чем это делается в
JDK;
-
java.util.Properties:
используется несколько другой «фактор загрузки» и размеры таблицы чем в
JDK;
-
java.util.Stack:
по умолчанию используется другой размер «default
Vector» чем в
JDK;
-
java.net.InetAddress:
по
умолчанию
family=1,
хотя
для
JDK 1.2.2
и
1.4 family=2. TINI
и
JDK
устанавливают
family
в
InetAddress
в соответствии
с
Inet4Address=1;
-
java.net.URL
по умолчанию
устанавливает значение стандартного порта для протокола, например для
FTP
port=21.
Объект
URL
создается
следующим способом:
URL=new
URL(“ftp://ftp.dalsemi.com);
- В отличии от
JDK
в
TINI
установка
идентификатора “file” задается как “/”
·
TC_LongString
(Строка более чем 64k)
не поддерживается из-за ограничения на максимальный размер строк.
·
Насчет
других ограничений пока не ясно. Сказано «что все остальные ограничения
применимы». Будем выяснять.
(C)2002-2003 AK
|