Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
RRR_RRR_RRR
1 / 1 / 1
Регистрация: 28.02.2013
Сообщений: 89
1

Java.lang.IllegalArgumentException в нативных функциях (embedded Java, MicroEJ, STM32F4Discovery)

11.02.2015, 15:21. Просмотров 630. Ответов 2
Метки нет (Все метки)

Добрый день!

Пытаюсь связать embedded Java и C посредством нативных функций.

Идея в следующем: мне нужно вернуть из нативной функции 4 примитивных (int) значения - 1 возвращаемое и 3 посредством параметров.

В Java примитивные типы можно передать только "по значению", и, значит, изменения внутри функции не смогу увидеть снаружи. Но можно использовать массивы примитивных типов, и тогда изменения в элементах массива вполне можно увидеть после вызова функции.

Это подтверждает код:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  private static int testArrayFunk(int[] arr)
  {
    arr[0] = 6;
    arr[1] = 0;
    arr[2] = -11;
 
    return 7;
  }
 
  private static void test(int a, int b, int c)
  {
  }
.............
  int[] arr = new int[3];
  arr[0] = arr[1] = arr[2] = 0; 
 
  test(arr[0], arr[1], arr[2]); // a = 0, b = 0, c = 0
  testArrayFunk(arr);
  test(arr[0], arr[1], arr[2]); // a = 6, b = 0, c = -11
Но если testArrayFunk объявить как нативную

Java
1
public static native int testArrayFunk (int[] arr);
и на C уровне написать реализацию этой нативной функции при условии, что (см. приаттаченный файл)
3.2.2 Java Array
The Java arrays (of base types) are represented in C functions as C arrays: the array is a pointer on
the first element of the array, all the elements in line within the memory.
Note that in C, strings are represented with C char2 array with a '\0' as last character. In Java,
strings are jchar array, not terminated by '\0'.
SNI-GT allows to get a Java array length in a C function.
int32_t SNI_getArrayLength(void* array);
C
1
2
3
4
5
6
7
8
jint Java_com_is2t_examples_microui_leds_LedAnimation_testArrayFunk(jint *arr)
{
  arr[0] = 6;
  arr[1] = 0;
  arr[2] = -11;
 
  return 7;
}
, то я получаю java.lang.IllegalArgumentException.

Так же пробовал в нативной функции использовать
C
1
void *
и
C
1
int *
, но с тем же результатом.

На официальном сайте нужных мне примеров не нашел. И в сети про использование массивов примитивных типов в Java нативных функций не нашел примеров.

Кто может подсказать в чем может быть проблема?

Спасибо.
0
Вложения
Тип файла: pdf ESR-SPE-0012-SNI_GT-1.2-A.pdf (320.0 Кб, 2 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.02.2015, 15:21
Ответы с готовыми решениями:

TCP эхо-сервер на STM32F4Discovery (embedded Lua)
Добрый день! Пытаюсь за стартовать TCP эхо-сервер на STM32F4Discovery. Это micro python (не...

Java Embedded
Похоже, что в полку программистов STM32 скоро будет большое прибавление, учитывая популярность...

STM32F4DISCOVERY + JAVA или .NET Micro Framework
Здравствуйте. Недавно приобрел себе демонстрационную плату STM32F4DISCOVERY в промэлектронике с...

Cursor Android Studio (java.lang.IllegalArgumentException: column '_id' does not exist)
Пытаюсь создать приложения с двумя кнопками: Добавить и Удалить, EditText для ввода значения. Но...

JIDEFX MaskTextField java.lang.NoSuchMethodError: java.lang.invoke.LambdaMetafactory.metaFactory
Имеется тестовое приложение: package testinputmask; import javafx.application.Application;...

2
raxp
10192 / 6575 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
11.02.2015, 21:33 2
...модель МК?
0
RRR_RRR_RRR
1 / 1 / 1
Регистрация: 28.02.2013
Сообщений: 89
11.02.2015, 22:20  [ТС] 3
Борда STM32F4Discovery

http://easystm32.ru/stm32f4-discover...m32f4discovery
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.02.2015, 22:20

Java.lang.ClassCastException: MyBaza.Diag cannot be cast to java.lang.Comparable
Подскажите как исправить... Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException:...

Апплет,java.lang.RuntimeException: java.lang.NoClassDefFoundError
апплет использует сторонние подключенные либы, при его загрузке вылетает такой вот эксепшн.......

Переполнение кучи java.lang.OutOfMemoryError: Java heap space
Доброго времени суток! Помогите настроить jvm. Многое уже перепробовал. Задача в том, чтобы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru