/* libevent timers example */
#include <stdio.h>
#include <event2/event.h>
struct event_base * base;
struct event * timer1;
struct event * timer2;
struct timeval period1 = {1, 0};
struct timeval period2 = {2, 0};
int tc1 = 10;
int tc2 = 5;
void timer1_handler(int fd, short int fo, void* arg)
{
printf("timer 1\n");
if(tc1 > 0)
{
tc1--;
evtimer_add(timer1, &period1);
}
}
void timer2_handler(int fd, short int fo, void* arg)
{
printf("timer 2\n");
if(tc2 > 0)
{
tc2--;
evtimer_add(timer2, &period2);
}
}
int main()
{
struct event_config *cfg = event_config_new();
event_config_avoid_method(cfg, "epoll");
base = event_base_new_with_config(cfg);
event_config_free(cfg);
timer1 = evtimer_new(base, timer1_handler, NULL);
timer2 = evtimer_new(base, timer2_handler, NULL);
evtimer_add(timer1, &period1);
evtimer_add(timer2, &period2);
event_base_dispatch(base);
return 0;
}
* This source code was highlighted with Source Code Highlighter.
Показаны сообщения с ярлыком Linux. Показать все сообщения
Показаны сообщения с ярлыком Linux. Показать все сообщения
понедельник, 26 сентября 2011 г.
вторник, 7 декабря 2010 г.
remserial - работа с последовательным портом через сеть.
Так получилось что одно из устройств, с которым взаимодействует наше оборудование производит другая фирма. Обмен между их устройством и нашим оборудованием происходит по RS232, т.е. по COM-порту. Фирмы наши находятся в противоположных частях города и поэтому стыкуемся мы достаточно редко и не продолжительное время. А вот софт меняется постоянно и нужно отлаживать взаимодействие. Поэтому решили что нужно организовать удаленную отладку, по сети.
На самом деле существует множество способов как получить доступ к COM-порту по сети, но некоторые нам не подошли, а некоторые показались скажем так... больше костылями, чем элегантным и понятным решением. В итоге решили использовать remserial. Схема получилась такая:
наше оборудование <----rs232----> наш ПК <----internet---> их ПК <---rs232---> их устройство
На обоих ПК стоял Linux, на которых мы собрали remserial (собирается легко, одной командой: make remserial ).
Далее всё просто, я подключил выход, предназначенный для их устройства к COM-порту своего компьютера и запустил в консоли команду:
На самом деле существует множество способов как получить доступ к COM-порту по сети, но некоторые нам не подошли, а некоторые показались скажем так... больше костылями, чем элегантным и понятным решением. В итоге решили использовать remserial. Схема получилась такая:
наше оборудование <----rs232----> наш ПК <----internet---> их ПК <---rs232---> их устройство
На обоих ПК стоял Linux, на которых мы собрали remserial (собирается легко, одной командой: make remserial ).
Далее всё просто, я подключил выход, предназначенный для их устройства к COM-порту своего компьютера и запустил в консоли команду:
$ ./remserial -d -p 23000 -s "115200 raw" /dev/ttyS0 &
где 23000 это номер порта, в кавычках опции -s скорость порта и тип (подходят настройки от
stty), а /dev/ttyS0 это имя порта, к которому я подключил наше оборудование.
И всё, дальше я кинул в аську мой внешний ip и номер порта. Ребята на той стороне подключили свое устройство к ПК. И запустили команду:
Тут отличие от моей команды только в опции -r, с помощью которой указывают к какому ip адресу подключится ( в нашем случае это xxx.xxx.xxx.xxx ;) ). После чего мы увидели что наши устройства подключились и теперь уже можно было отлаживать взаимодействие без лишних встреч. Вот люблю я такие программки - мелочь, а сколько времени сэкономила.
stty), а /dev/ttyS0 это имя порта, к которому я подключил наше оборудование.
И всё, дальше я кинул в аську мой внешний ip и номер порта. Ребята на той стороне подключили свое устройство к ПК. И запустили команду:
$ ./remserial -d -r xxx.xxx.xxx.xxx -p 23000 -s "115200 raw" /dev/ttyUSB0 &
Тут отличие от моей команды только в опции -r, с помощью которой указывают к какому ip адресу подключится ( в нашем случае это xxx.xxx.xxx.xxx ;) ). После чего мы увидели что наши устройства подключились и теперь уже можно было отлаживать взаимодействие без лишних встреч. Вот люблю я такие программки - мелочь, а сколько времени сэкономила.
Бесплатный NFS сервер для Windows
Понадобилось срочно написать прошивальщик для производства. Сроки горели, а нужно было максимально быстро прошить большое количество модулей для встроенной системы. На производстве человеко-ресурсов мало и требовалось что бы рабочий мог за раз шить десять-двадцать модулей. Модули шьются либо с usb-flash либо по NFS. Выбрал NFS, что бы не тыркаться с флешками. И тут началось...
На производстве стоит Windows, времени переучивать персонал некогда. А вот с NFS сервером проблема, таковых для винды не так много, либо в Cygwin поднимать, либо покупать поделия от малоизвестных контор за денюшку (а еще не известно подойдет мне их NFS сервер или нет). И тут мне фортануло:)
Откопал программку WinNFSd сначала усомнился что она вообще заработает (размер всего 146 Кб, написана в 2005 году). Но как оказалось, работает она отлично. В cmd просто заходите в папку где лежит WinNFSd и запускаете её следующим образом:
На производстве стоит Windows, времени переучивать персонал некогда. А вот с NFS сервером проблема, таковых для винды не так много, либо в Cygwin поднимать, либо покупать поделия от малоизвестных контор за денюшку (а еще не известно подойдет мне их NFS сервер или нет). И тут мне фортануло:)
Откопал программку WinNFSd сначала усомнился что она вообще заработает (размер всего 146 Кб, написана в 2005 году). Но как оказалось, работает она отлично. В cmd просто заходите в папку где лежит WinNFSd и запускаете её следующим образом:
> winnfsd.exe c:\shared_folder
где shared_folder - папка, которую вы хотите расшарить по NFS. Что бы получить доступ к этой папке в Linux нужно будет в консоли набрать:
# mount -t nfs -o vers=3 xxx.xxx.xxx.xxx:/c/shared_folder /mnt/nfs
здесь xxx.xxx.xxx.xxx - ip адрес компьютера, на котором запущен winnfsd, /mnt/nfs - директория в которую будет смонтирована NFS.
Мои задачи эта программка решила на все сто, но стоит упомянуть, что всё таки это не полноценный NFS сервер по следующим причинам:
- нет настройки прав доступа
- возможны проблемы с кодировкой символов
- может не работать на системах появившихся после Windows XP (на Vista у меня так и не заработала)
Подписаться на:
Сообщения (Atom)