Как стать автором
Обновить

ToolKit на базе Eclipse и GTK+, для «Toradex Colibri T20 (Linux)»

Время на прочтение4 мин
Количество просмотров3K
Эта статья рассчитана прежде всего на то, чтобы сэкономить время при создании тулкита, но при этом я постараюсь рассказать все достаточно объемно.

Описание оценочной платы
Плата составлена на базе двухъядерного процессора «NVIDIA Tegra Cortex-A9».
Может работать на Windows CE 7.0* и Linux.
RAM: 512MB
Полные характеристики доступны по ссылке.
*Должен предупредить — я не рекомендую WinCE7.0 в качестве ОС для данной платы, если принципиальным для разработки является C++, т.к toolkit лично мне собрать было не просто. Исключение — если ваше приложение является консольным, тогда проблем возникнуть не должно. CoDeSys и C# — проблем не вызывают.
Внешний вид платы
image
image


Содержание
  1. Скачать все необходимое
  2. Установка SDK
  3. Проверка SDK
  4. Установка Eclipse
  5. Подключение GTK к Eclipse
  6. Настройка проекта Eclipse
  7. Результат


Скачаем все необходимое:


Первое — это SDK для платы, которое можно скачать на официальном сайте Toradex.
Второе — нам нужен хост с Ubuntu 16.04 LTS.
Третье — непосредственно Eclipse для C/C++.

Установка SDK:


Важно: устанавливать его лучше по дефолтному пути, во избежания разного рода багов.

mon@mon:~$ cd /Downloads/SDK
mon@mon:~$ chmod +x angstrom-glibc-x86_64-armv7at2hf-vfp-v2017.12-toolchain.sh
mon@mon:~$ ./angstrom-glibc-x86_64-armv7at2hf-vfp-v2017.12-toolchain.sh
Angstrom SDK installer version nodistro.0
=========================================
Enter target directory for SDK (default: /usr/local/oecore-x86_64):
You are about to install the SDK to "/usr/local/oecore-x86_64". Proceed[Y/n]? y

После установки SDK у нас появится возможность запустить скрипт, для автоматической интеграции переменных:

. /usr/local/oecore-x86_64/environment-setup-armv7at2hf-vfp-angstrom-linux-gnueabi

Примечание: каждый раз, когда вы открываете новый терминал — необходимо снова запускать скрипт.

Необязательный шаг

Проверка SDK


1. Изменим оболочку Ubuntu с dash на bash:

sudo update-alternatives --install /bin/sh sh /bin/bash 100

2. Создадим файл FirstTest.c, cо следующим содержимым:

#include <stdio.h>
int main(int argc, char *argv[]){
printf("Hello world!!!\n");
return 0;
}

3. Компилируем:

${CC} -Wall FirstTest.c -o FirstTest

4. Любым способом сбросим на ПЛК и запустим:

Скриншот
image Похоже, что все в порядке.


Установка Eclipse


1. Для работы Eclipse необходима Java, установим ее:

sudo apt-get update
sudo apt-get install default-jre

2. Перейдем в каталог в котором у нас находится Eclipse и распакуем его:

cd ~
mkdir -p ~/eclipse/neon-3
tar xf ~/Downloads/eclipse-cpp-neon-3-linux-gtk-x86_64.tar.gz -C ~/eclipse/neon-3/

3. Перейдем в каталог Eclipse:

cd ~/eclipse/neon-3/eclipse

4. Экспортируем переменные и запускаем Eclipse:

. /usr/local/oecore-x86_64/environment-setup-armv7at2hf-vfp-angstrom-linux-gnueabi
./eclipse

На этом установка завершена.

Подключение и настройка GTK в Eclipse


1. Установим необходимые пакеты:

sudo apt-get install libgtk-3-dev gdb eclipse-cdt build-essential cmake git pkg-config

2. Перейдем в Help->Eclipse Marketplace

Скриншот
image

3. Найдем и установим pkg-config

Скриншот
image

После этого необходимо перезапустить Eclipse.

4. Перейдем в Property-->C/C++ Build-->Settings-->«pkg-config»

Скриншот
image

5. Найдем GTK и отметим его галочкой.

Скриншот
image

Так же, рекомендую, для того чтобы быстрее и лучше работать с интерфейсом — установить Glade.

sudo apt-get install glade-gnome

Настройка проекта Eclipse:


Перед запуском Eclipse не забываем интегрировать переменные:

. /usr/local/oecore-x86_64/environment-setup-armv7at2hf-vfp-angstrom-linux-gnueabi

1. Создаем новый проект C++:

Скриншот
image

2. Переходим в свойства проекта:

Cкриншот
image

3. Переходим в C/C++ Build --> Settings

Cкриншот
image

4. Теперь нам необходимо передать Eclipse переменные, по примеру:

Cкриншот
image

Для Cross GCC Compiler это:

${CC}

Для Cross GCC Compiler --> Miscellaneous это:

${CFLAGS} -c

Для Cross G++ Compiler это:

${CC}

Для Cross G++ Compiler --> Miscellaneous это:

${CFLAGS} -c

Для Cross G++ Linker это:

${CXX}

Для Cross G++ Linker --> Miscellaneous это:

${LDFLAGS}

Для Cross GCC Assembler это:

${AS}

Всё, теперь можно создать проект, скомпилировать и протестировать его на ПЛК.

Результат


Код
#include <gtk/gtk.h>

static void
print_hello (GtkWidget *widget,
             gpointer   data)
{
  g_print ("Hello World\n");
}

static void
activate (GtkApplication *app,
          gpointer        user_data)
{
  GtkWidget *window;
  GtkWidget *button;
  GtkWidget *button_box;

  window = gtk_application_window_new (app);
  gtk_window_set_title (GTK_WINDOW (window), "Window");
  gtk_window_set_default_size (GTK_WINDOW (window), 400, 400);

  button_box = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL);
  gtk_container_add (GTK_CONTAINER (window), button_box);

  button = gtk_button_new_with_label ("Hello World");
  g_signal_connect (button, "clicked", G_CALLBACK (print_hello), NULL);
  g_signal_connect_swapped (button, "clicked", G_CALLBACK (gtk_widget_destroy), window);
  gtk_container_add (GTK_CONTAINER (button_box), button);

  gtk_widget_show_all (window);
}

int
main (int    argc,
      char **argv)
{
  GtkApplication *app;
  int status;

  app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);
  g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
  status = g_application_run (G_APPLICATION (app), argc, argv);
  g_object_unref (app);

  return status;
}


Скриншот
image

Спасибо за внимание, удачи в разработке.
Теги:
Хабы:
Всего голосов 8: ↑8 и ↓0+8
Комментарии2

Публикации

Истории

Работа

Программист C++
114 вакансий
QT разработчик
9 вакансий

Ближайшие события

Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн
Антиконференция X5 Future Night
Дата30 мая
Время11:00 – 23:00
Место
Онлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург