Hard-Soft News

Новости железа и софта

Archive for the ‘soft’ Category

Программирование в Qt: создаем виджет в стиле HUD

Среда, Февраль 1st, 2012

Меню с поисковой строкой
Под влиянием новых интерфейсов GNOME я решил сделать виджет для Qt – меню с поисковой строкой в верхней части. Этот виджет можно расматривать как дополнение к примерам нестандартных виджетов, описанных в. В остальной части меню отображаются команды приложения, в наименование которых входит текст, введенный в строке. Такое меню может быть полезно для пользователей, которые помнят, как называется команда, но не помнят, в каком разделе главного меню он находится, или не хотят «ползать» по бесконечным» выпадающим под-меню.

Меню с поисковой строкой

Читать дальше

Разработка программ для микроконтроллеров ARM для работы на голом железе

Понедельник, Январь 16th, 2012

Поскольку в некоторых (правда не очень широких) кругах я считаюсь специалистом по процессором ARM и всем, что с ними связано, еще недавно мне часто задавали вопрос как установить Linux на ту или иную железку ARM. Сейчас после появления Android такие вопросы задают гораздо реже и это еще одна польза от Android (по крайней мере для меня). Главная проблема с установкой Linux ARM заключается в том, что не существует стандартный платформы ARM, подобной стандартный платформе PC. Современные системы ARM, это системы выполненные на одном кристалле, на котором помимо процессора расположены различные контроллеры. Проблема в том, что в разных моделях и архитектура контроллеры и адреса регистров, и даже значение, которые записываются в эти адреса, могут развиться даже в рамках одного модельного ряда. Это значит, что для установки Линукса на любое железо ARM необходим свой уникальный набор драйверов. Этот факт очень важно понять не только тем кто пытается поставить Линукс на ARM, но и тем, кто просто пишет программы для ARM-систем, например для микроконтроллеров. Далее мы рассмотрим три типа современных систем на основе ARM и пример программы, предназначенной для работы на голом железе микроконтроллера ARM.

Читать дальше…

YAGF 0.8.9

Воскресенье, Декабрь 18th, 2011

Очередной релиз. Основные новшества: функция автоматического исправления наклона страницы (deskew) и улучшенный пользовательский интерфейс.

Страница проекта:  http://symmetrica.net/cuneiform-linux/yagf-ru.html

YAGF 0.8.9

Читать дальше…

Безопасный запуск Linux на устройстве ARM

Понедельник, Ноябрь 7th, 2011

Речь пойдет о запуске полноценного дистрибутива Linux на устройствах, на которых уже установлен урезанный Linux. Проще говоря, на устройствах с Android и Angstrom.

Этот способ установки является на сегодняшний день самым безболезненным для девайса, что хорошо подходит тем, кто хочет по-прежнему пользоваться устройством по назначению, а не только как площадкой для тестирования Linux. При использовании этого способа файлы Linux вообще не будут устанавливаться на устройство с Андроидом. Вместо этого мы установим их на USB-флешку. Читать дальше…

Системные вызовы ARM Linux

Понедельник, Октябрь 31st, 2011

Номера и порядок передачи аргументов системных вызовов ARM Linux соответствуют таковым на платформе Intel, и это очень хорошо и правильно. Существует два режима системных вызовов – старый и новый (новый является частью стандарта EABI). Нынешние ядра ARM Linux поддерживают оба режима, но использовать режим EABI, разумеется, предпочтительнее. У двух режимов много общего: аргументы вызова передаются в регистрах r0-r6, а сам вызов выполняется с помощью инструкции SWI.
В старом режиме номер вызова является частью операнда инструкции SWI. Операнд инструкции выглядит так:

MOV r0, дескриптор_файла;
MOV r1, адрес_буфера;
MOV r2, длина_буфера;
SWI 0x900004;

В режиме EABI номер вызова передается в регистре r7, а операндом SWI всегда является значение 0×0. Еще одно отличие связано с передачей 64-битных аргументов. В обоих режимах их передают в паре 32-битных регистров, но в старом режиме это просто два следующих не занятых регистра, а в режиме EABI – следующая пара регистров, в которой первый регистр имеет четный номер. Тот же вызов _write() в режиме EABI будет выглядеть так:

MOV r0, дескриптор_файла;
MOV r1, адрес_буфера;
MOV r2, длина_буфера;
MOV r7, #4;
SWI 0x0;

Помимо прочего, между двумя режимами существует одно, не сразу заметное, различие: режим EABI может использовать как в режиме ARM MODE (32-битные инструкции), так и в более компактном THUMB MODE. Старый режим не может использоваться в THUMB MODE просто потому, что число 0×900000 не поместится в 16-битном операнде инструкции SWI режима THUMB.
Ну и напоследок, описания нескольких системных вызовов ARM Linux. Зная общий принцип, остальные описания легко «конвертировать» из описаний аналогичных вызовов для Intel.

Номер Обозначение Используемые регистры
1 sys_exit() r0
3 sys_read() r0, r1, r2
4 sys_write() r0, r1, r2
5 sys_open() r0, r1, r2
6 sys_close() r0

Самый компактный исполнимый файл для Linux

Четверг, Октябрь 27th, 2011

Размер исполнимого файла обычной программы Hello World при сборке в моей системе (X86-64, Linux) после выполнения strip составляет  6208 байтов. Для ARM Linux (ARMv9) — 2720 байтов. Можно ли улучшить эти результаты? Читать дальше…

Qt и ActiveX

Вторник, Октябрь 18th, 2011

Qt и ActiveX

Придумал сравнительно простой и удобный способ работать с интерфейсами COM в программе Qt в том случае, если dumpcpp не справляется с генерацией классов.

Алгоритм анализа связных компонент растра, реализованный с помощью Qt

Суббота, Октябрь 8th, 2011

Написал алгоритм анализа связных компонент на Qt.

Демо-программа

Демо-программа

Программирование для ARM, часть II

Вторник, Сентябрь 27th, 2011

Одно из самых существенных отличий разработки для ARM от разработки для обычного ПК заключается в том, что устройства, работающие на ARM, как правило, не могут собирать программы сами для себя. В принципе они, конечно, могут это делать, и если у вас есть компьютер на процессоре ARM с полноценной ОС Linux и средствами разработки, вам беспокоиться не о чем, но большинству устройств просто не хватает ресурсов для самостоятельной сборки чего-либо. Для таких устройств программы собираются на «обычных» интеловских ПК, а затем загружаются в компьютер на процессоре ARM. Одно из таких средств основано на системе Scratchbox и инструментарии сборки CodeSourcery. С помощью этого набора можно создавать и отлаживать программы, предназначенные для различных вариантов ОС Linux, выполняющихся на процессоре ARM.

Scratchbox представляет собой «песочницу», в которой можно выполнять различные действия (в том числе, в режиме эмуляции root), не затрагивая работу остальной системы. Одна из функций Scratchbox – кросс-платформенная сборка, в процессе которой программа связывается не с библиотеками хозяйской системы, а с библиотеками,  установленными в песочнице Scratchbox. Эти библиотеки могут быть предназначены для другой архитектуры процессора, например, для ARM.

Читать дальше…

Сравнение качества распознавания tesseract и cuneiform

Суббота, Сентябрь 3rd, 2011

Теперь, когда YAGF поддерживает и cuneiform, и tesseract, у меня появилась возможность сравнить работу обоих движков распознавания в наиболее подходящих условиях: распознать с их помощью серию текстов с одних и тех же сканов. Собранных мной данных, конечно, не хватит для полновесного статистического анализа (нет у меня на это времени), но некоторые результаты очевидны и так.

Читать дальше…