LINUX.ORG.RU

Сообщения Camel

 

Поморгать светодиодом Arduino с прерываниями.

Форум — Development

Что-то у меня ум за разум заходит. Не удаётся написать тривиальную программу для Arduino UNO. Хочу чтобы светодиод (который на ноге digital 13) моргал.

Алгоритм такой. Есть таймер, который каждые N миллисекунд вызывает прерывание, где добавляет 1 к переменной-счётчику. В основном цикле крутится проверка значения этой переменной. Если значение достигло некоторой величины, то меняем уровень сигнала на digital 13, и обнуляем переменную-счётчик. Вроде бы всё просто, но не работает. ЧЯДНТ?

Да, Arduino, конечно, offtopic на linux'овом сайте. Но надеюсь мне кто-нибудь поможет.

Вот код:

#include <avr/interrupt.h>

int status; // Глобальная переменная в которой лежит состояние светодиода, горит-не_горит.
int tick_counter; // Переменная-счётчик вызовов прерывания.

void init (void) {
  cli(); // Запрещаем все прерывания на время инициализации.

  DDRB |= (1<<PB5);  // Set D13 as output pin.
  //PORTB |= (1<<PB5); // Set D13 level high.

  status = 0;
  tick_counter = 0;

  OCR0A = 65535;
  TIMSK0 |= (1<<TOIE0); // Включаем прерывание по достижению Timer/Counter0 значения OCR0A.
  TCCR0A |= (1<<WGM01) | (1<<WGM00); // Работаем в режиме FastPWM.
  TCCR0B |= (1<<WGM02) | (1<<CS02) | (1<<CS00); // Делитель 1/1024. С таким делителем и OCR0A прерывание будет вызываться примерно каждые 4 мс.

  sei(); // Закончили инициализацию, разрешаем все прерывания.
}

void run() {
  while(1) {

    if (tick_counter >= 5) {
      if (status == 1) {
	PORTB &= ~(1<<PB5);
	status = 0;
      }
      else {
	PORTB |= (1<<PB5);
	status = 1;
      }
      tick_counter = 0;
    }
  }
}

ISR(TIMER0_OVF_vect) {//Обработка прерывания по переполнению Timer/Counter0
  tick_counter++;
}

int main(void) {
  init();
  run();

  return 0;
}

 , ,

Camel
()

Напишите новость про выходо Upstart-1.8.

Форум — Talks

Дорогие друзья, напишите кто-нибудь, пожалуйста, новость про выход свежей версии Upstart'а. Сам я не специалист в системах иницилазации. Кроме того я не нашёл release notes или changelog'а. Запишем это Upstart'у в минус.

 

Camel
()

Реально ли аппаратно кодировать/декодировать видео на Mele A2000G?

Форум — Linux-hardware

Есть железка Mele A2000G, в ней стоит ARM'овский процессор Allwinner A10, в нём есть графическое ядро Mali-400. В характеристиках заявлено, что имеется возможность аппаратно кодировать и декодировать h264 и MPEG. Подозреваю, что планшеты с Android'ом на том же чипе даже это используют. Ещё есть открытый драйвер для Mali под названием Lima, с которым даже удалось запустить Quake III.

Скажите, а в Ubuntu возможно использовать аппаратное кодирование/декодирование видео, или приходтся об этом пока только мечтать?

 , , , ,

Camel
()

Вышла новая минорная версия планировщика Fcron.

Форум — Talks

Поскольку минорная версия в которой только исправлены баги и ускорены некоторые места в программе даже на мини-новость для главной страницы не тянет, но всё же я считаю нужным объявить об этом здесь. 3 марта вышла новая минорная версия планировщика заданий Fcron.

Fcron является несомненно самым гибким в семействе подобных программ (vixie-cron, dcron, anacron). Имеет удобный синтаксис конфигурационного файла, который помимо стандартных «запускай в такое-то время» и «запускай каждые Nчасовминут» позволяет создавать задания видя «запусти с 1 часу ночи до 5 утра как только load упадёт ниже 3.0» или «запусти в случайный момент между 16:00 и 19:35», а так же многие другие. Конечно всё это можно реализовать стандартным vixie-cron'ом и bash'евскими сценариями, но зачем городить костыли.

Выход очередной версии означает, что проект жив и развивается.

Для меня остаётся загадкой почему Fcron до сих пор не стал планировщиком по умолчанию в большинстве дистрибутивов GNU/Linux, ведь он реально превосходит vixie-cron по удобству и возможностям, и не уступает по надёжности.

 , , , minor,

Camel
()

Поиск посылки из DX.

Форум — Talks

Кто-нибудь может хотя бы дать ссылку на описание успешной истории вытрясания из Почты РФ посылки из DX, а лучше ещё и получения с них компенсации за нарушение сроков доставки? Есть истории как удавалось вытрясти деньги когда посылало частное лицо, но там всё начиналось с подачи заявления с:

  • номером отслеживания (трекинг)
  • копией чека за оплату почтовых услуг
  • формой CP72

Первое есть, а с последними двумя пунктами загвоздка. Звонил в DX, там китаянка обещала подать заявление на розыск с их стороны. Это, конечно, хорошо, но подозреваю на такое заявление откуда-то из Китая на Почте РФ наплюют или пришлют отписку. В любом случая я не смогу оказывать довление и капать на мозг как в этой истории. Кроме того я не смогу вытрясти из Почты РФ компенсацию за нарушение сроков доставки, а очень хочется, для острастки, так сказать.

Update: по телефону горячей линии оператор Елена сказала, что для подачи заявления на розыск достаточно копии invoice и трекинг.

 , , ,

Camel
()

Как преобразовать GLib.Value к Gst.Pad?

Форум — Development

В Gstreamer'е у всякого элемента можно вызвать весьма полезный итератор iterate_pads() или iterate_sink_pads(). У этого итератор есть метод next() без которого использование его лишено смысла. Однако в качестве параметра этот метод принимает GLib.Value, соответственно в соответствующее место в памяти этот метод next() кладёт GLib.Value, а не Gst.Pad. По-простому преобразовать GLib.Value к Gst.Pad не получилось, возможно это надо делать каким-то специальным методом. Каким, спрашивается? Кто-нибудь может показать пример использовать итераторов в Vala и GStreamer (на Vala)?

 , , , ,

Camel
()

Как дела у MIPS'а?

Форум — Talks

На фоне бурного расцвета этих ваших ARM'ов хочется узнать как дела у другой «альтернативной» архитектуры, у MIPS'а?

Когда-то у меня был ноутбук на MIPS'е (Альфа-400), кажется на MIPS'е был первый планшет способный проигрывать FullHD, возможно Столман до сих пор пользуется ноутбуком на MIPS'е, изредка проскакивают новости о выпуске каких-то системных плат с MIPS'ом и поддержкой PCIexpress, DDR2 и других более-менее привычных комплектующих, но это капля в море по сравнению с потоком новостей про ARM. Свежих новостей про MIPS как-то не слышно. Неужели пациент скорее мертв, чем жив? А ведь MIPS изначально разрабатывался как архитектура для «серьёзных» вычислений и суперкомпьютеров, в отличие от энергоэффективного ARM'а.

На ARM'е, тем временем, помимо ноутбуков и планшетов можно настольную машину сделать задёшево. Например из Mele A2000G. А где пощупать живой MIPS?

 ,

Camel
()

На главной чатик.

Форум — Linux-org-ru

На главной странице ресурса под видом новости висит какой-то уютный чатик. Зачем заблокирована возможность отправки комментариев для посетителей ресурса не пояснено.

Camel
()

Использование функций и переменных из C в Vala.

Форум — Development

Как в Vala использовать функцию на C? Знаю, что можно воспользоваться словом extern, но есть ещё вопросы.

У меня есть функция, которая принимает 2 параметра: gchar* и GHashTable*. В первом лежит имя файла, а по второй ссылке GHashTable в который эта функция кладёт всякие штуки. В Vala указателей нет, есть ссылки (reference). Как мне имея строку с именем файла и объект HashTable передать их в extern функцию?

А ещё, как это всё собирать/канпелять? С какими опциями запускать valac если в файле есть внешние функции из C?

 ,

Camel
()

Помогите разобраться с GSources, GMainContext.

Форум — Development

Помогите разобраться с источниками событий (GSource, GIOSource), контекстами (GMainContext) и обработчиками этих событий.

У меня есть Beaglebone, на котором я хочу обрабатывать прерывание изменения уровня на одном из GPIO. Вот пример того как это делается на C. Для Ъ:

struct pollfd pfd[1];
pfd[0].fd = open ("/sys/class/gpio/gpio34/value", O_RDONLY);
pfd[0].event = POLLPRI;
pfd[0].revent = 0;

while (1) {
    poll (pfd, 1, -2);
    something_useful ();
}
Функция poll() не завершается пока не происходит событие на которое настроено прерывание. Когда это событие происходит выполнение poll() завершается, выполняется какая-то полезная функция, после чего снова переходим к функции poll() и ожидаем события.

А теперь вопрос, как это сделать с использованием GLib, желательно даже на Vala, но и на C пойдёт.

Правильно я понимаю, что «вместо» while (1) будет GMainLoop? Правильно ли я понимаю, что нужно в каком-то контексте завести источник событий (GIOSource?) ? А ещё нужно к чему-то прицепить g_source_add_poll() и g_source_set_callback(). Может кто-нибудь показать пример кода?

 event source, , ,

Camel
()

Можно ли получить с USB'шной камеры небоработанный поток данных?

Форум — Linux-hardware

Если я подключаю USB'шную камеру, то в системе она видится как /dev/video0. Если я GStreamer'ом беру с неё поток данных, то это video/x-raw, хотя я подозреваю, что камера на самом деле передаёт по USB поток сжатый каким-то кодеком, возможно mpeg2 или mpeg4, а распаковкой его занимается драйвер (возможно сильно неоптимальным способом). Прав ли я? Можно ли получить необработанный поток данных чтобы самому с ним что-то делать, например писать на файловую систему, или передавать по сети, или распаковывать аппаратным декодером.

 , ,

Camel
()

Как разбивать программу на множество файлов?

Форум — Development

Как в Vala разбивать программу на множество мелких файлов? В C и C++ для этого были заголовочные файлы и #include'ы, а собственно исполняемый код можно было писать почти в произвольном порядке и разбивке по файлам. Ещё можно было в заголовочном файле объявить класс и его методы, а определение сделать в другом файле.

В Vala, насколько я смог понять, нет опции #include, нет заголовочных файлов, определение метода нельзя вынести за пределы его объявления. В результате классы у разрастаются, программа разрастается ещё больше, заповедям написания «чистого» кода это совершенно противоречит. Что же делать? С++ не предлагать.

 ,

Camel
()

О наследовании и вызове методов.

Форум — Development

Я привык, что в ОО языках если есть:

  • Класс A
  • В классе A определён метод action()
  • Есть класс B наследующий от A

, то я могу вызывать метод action() для экземпляров B. Другими словами, если возможно A.action() и B::A, то возможно B.action().

А если я использую GObject, то это так или нет?

Пусть у нас есть

typedef _MamanBar MamanBar;
typedef _SonBar SonBar;

struct _MamanBar
{
GObject parent_instance;
};

struct _SonBar
{
MamanBar parent_instance;
};

void maman_bar_action (MamanBar *self)

Я ведь не могу вызывать

SonBar *son;
/* */
maman_bar_action (son);
Так? Нужно ведь вызывать
SonBar *son;
/* */
maman_bar_action (MAMAN_BAR (son));

Получается, что мне чтобы вызывать метод недостаточно знать, что он был определён в родительском классе, но точно знать, что в каком из классов иерархии наследования он был определён. Это так?

Помимо того что это лишняя головная боль, не является ли это нарушением принципов ООП?

Или я что-то делаю не так?

 

Camel
()

Почему пол холодный?

Форум — Talks

Почему в многоэтажках пол холодный? Ведь этажом ниже тоже есть квартира, и в ней топят, и в ней тёплый воздух поднимается к потолку, значит должен греть мой пол.

 

Camel
()

Индексирование видеофайла.

Форум — Multimedia

Что такое индексы в файле? Читая индексы видеопроигрыватель может определить как долго длится видеофрагмент в файле? Дело в том, что моя программа испльзующая GStreamer создаёт файлы, если я правильно понимаю, без индекса. Их нельзя перематывать, а при воспроизведении не показывается сколько осталось до конца. Как это исправить? Я смотрел свойства элементов, у них у всех has no indexing capabilities. Единственно, у matroskamux есть свойство min-index-interval, но установка его в значение 0 или 1000000 ничего не меняет. Как заставить gstreamer проиндексировать файл?

 , , matroskamux,

Camel
()

Как понять когда оборвался сигнал IP'шной камеры наблюдения?

Форум — Development

Как в программе использующей GStreamer понять, что пропал сигнал с IP'шной камеры (ASF'ной или RTSP'шной)?

То есть предположим у меня в сети есть камера отдающая поток RTSP, на сервере крутится программа с gstreamer'овским pipeline'ом. Как понять, что поток данных прекратился? Например из-за отключения камеры.

Отлов сообщения GST_STREAM_STATUS_TYPE_LEAVE не подходит, поскольку внутри программы есть елемент tee к котором то подключаются, то отключатся «потребители», а указанное сообщение проходит по шине сообщений если кто-то отключается, что вовсе не означает отключения камеры и остановки всех элементов.

Если камера отключилась, то перейдут ли какие-нибудь элементы из состояния PLAYING в PAUSED или NULL? Какие элементы? source, demux? Вызываются ли при этом какие-то сигналы или выдаются сообщения? Может у source'а или demux'а какие-то pad'ы должны отвалится? Вообще, при каких условиях они отваливаются?

 , , , ,

Camel
()

Терминальный сервер и compiz.

Форум — General

Предположим, что у меня есть интернет-кафе на 20 мест. Конечно же я хочу минимизировать расходы, потому ставлю один терминальный сервер и 20 тонких терминалов. Можно ли на этих терминалах использовать всякие эффекты задействующие видеокарту? Будет ли видеокарта терминального сервера использоваться при проигрывании видео? Или видеокарта такой ресурс, который невозможно делить?

 , ,

Camel
()

Записать GStreamer'ом файл mp4.

Форум — General

Как GStreamer'ом создать нормальный файл mp4? То что мне выдаёт mp4mux не играется, выдаёт ошибку

This file contains no playable streams.

Что примечательно, пример из руководства работает. То есть, вот такая команда выдаёт неиграемый файл:

gst-launch-1.0 souphttpsrc location='http://192.168.27.101/videostream.asf' ! asfparse ! asfdemux ! avdec_mjpeg ! videoconvert ! videorate ! video/x-raw,framerate=25/1,width=640,height=480 ! clockoverlay ! queue ! x264enc ! mp4mux ! filesink location=file.mp4

А вот такая играемый:

gst-launch-1.0 v4l2src device=/dev/video0 num-buffers=50 ! queue ! x264enc ! mp4mux ! filesink location=file2.mp4

Причём я уверен, что декодирование у меня делается нормально, потому что если вставить xvimagesink вместо queue перед энкодером, то на экране я увижу картинку с камеры, то есть до video/x-raw я нормально декодировал, а потом пытаюсь закодировать и муксить в mp4, но не достигаю успеха. ЧЯДНТ?

 , , mp4mux

Camel
()

Как понять когда нужно делать unref?

Форум — Development

Помогите разобраться в каких случая при работе с GLib и GObject происходит выделение памяти. Правильно я понимаю, что объект уничтожается когда количество ссылок на него становится равных 0? При этом высвобождается занимаемая память. Если я вызываю unref(), то количество ссылок уменьшается на 1. А в каких случаях оно растёт? Что происходит со ссылками, если я вызываю remove() или destroy() ? Есть какие-то руководства по этому делу?

 , , ,

Camel
()

Об устройстве ксилофона.

Форум — Talks

Друзья, поясните мне за устройство ксилофона. Если взглянуть на живой пример ксилофона или фотографии в Википедии, то можно увидеть, что длина деревянных чушек убывает линейно. Однако при этом извлекаемая частота растёт экспоненционально, потому что в музыке частота нот растёт по экспоненте. Как же так? Ведь собственная частота колебаний должна расти линейно. Или я не прав?

 , ,

Camel
()

RSS подписка на новые темы