roboforum.ru

Технический форум по робототехнике.

Обсуждение реализации шлюз-контроллера [ORFA]

Правила форума
Правила раздела OpenRobotics

Re: Обсуждение реализации шлюз-контроллера [ORFA]

Vooon » 19 май 2009, 20:16

Пример! лениво в ман лезть :)

Re: Обсуждение реализации шлюз-контроллера [ORFA]

blindman » 19 май 2009, 20:23

Примерно так:


Makefile
Код: Выделить всёРазвернуть
ifeq "$(CONFIG_FILE)"  ""
    CONFIG_FILE = config.mak
endif
include $(CONFIG_FILE)
include resolve.mak



config.mak
Код: Выделить всёРазвернуть
VOS_TARGET = AVR128
SRC = test.c
EXE = VelaOS

VOS_F_CPU = 14745600L

VOS_USE_SLEEP = 1
#VOS_USE_SIR = 1
VOS_CFG_SIR_ENTRIES = 10
VOS_CFG_PRIORITIES = 5
VOS_USE_VBUS = 1
VOS_VELABUS_BUFSIZE = 2
VOS_USE_MUTEX = 1
VOS_USE_TIMER = 1
VOS_USE_PREEMPTION = 1
VOS_NUM_TIMERS = 4
VOS_USE_QUEUE = 1
VOS_NUM_QUEUES = 4


resolve.mak
Код: Выделить всёРазвернуть
ifneq "$(VOS_USE_PREEMPTION)" ""
    DEFINES += -DVOS_CFG_PRIORITIES=$(VOS_CFG_PRIORITIES)
    DEFINES += -DVOS_USE_PREEMPTION
   VOS_USE_SIR = 1
else
    DEFINES += -DVOS_CFG_PRIORITIES=0
endif

ifneq "$(VOS_USE_SIR)" ""
    DEFINES += -DVOS_USE_SIR
endif

include vos/target/resolve.mak
include vos/lib/resolve.mak
include vos/kernel/resolve.mak

ifeq "$(strip $(VOS_F_CPU))" ""
    MESSAGES += |F_CPU is 14.7456 MHz by default
    VOS_F_CPU = 14745600L
endif

DEFINES += -DF_CPU=$(VOS_F_CPU)
INCLUDES += -includevos/kernel/scheduler.h
INCLUDES += -includevos/kernel/errors.h

ifneq "$(strip $(VOS_TICK_PERIOD))" ""
    DEFINES += -DVOS_TICK_PERIOD=$(VOS_TICK_PERIOD)
else
    DEFINES += -DVOS_TICK_PERIOD=8000
endif

resolve.mak есть и в подкаталогах

Re: Обсуждение реализации шлюз-контроллера [ORFA]

Vooon » 19 май 2009, 21:04

Понятно, сделаю неснолько конфигов...
А вот сами драйверы думаю все же вынести из registers
но без шаманства с симлинками, просто их всех поместить в drivers.

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

Re: Обсуждение реализации шлюз-контроллера [ORFA]

Vooon » 21 май 2009, 16:22

Вынес драйвера в отдельный каталог,
добавил конфиги,
немного перетряхнул доксиген

Re: Обсуждение реализации шлюз-контроллера [ORFA]

=DeaD= » 21 май 2009, 19:54

А вот эта версия - http://hg.vehq.ru/orfa/file/809791b9ae1b/main.c#l1
она откуда берет команды? С уарта или с и2с?

Re: Обсуждение реализации шлюз-контроллера [ORFA]

Vooon » 21 май 2009, 21:23

Смотри на мэйн, а там вместо главного цикла serialgate_mainloop();
Из чего можно догадаться, что используется библиотека для уарта.
Для слейва еще нет кода, т.к. у меня нет необходимости...

Добавлено спустя 4 минуты 29 секунд:
Нужно поправить драйвера, чтобы они использовали gate_register_allocate()

Re: Обсуждение реализации шлюз-контроллера [ORFA]

blindman » 21 май 2009, 21:32

В описании драйвера не надо хранить все номера регистров - достаточно начального номера и количества регистров

Добавлено спустя 3 минуты 44 секунды:
Соответственно gate_gregister_allocate() надо переписать - чтобы он драйвер запрашивал для себя n регистров, а ядро возвращало начальный номер

Re: Обсуждение реализации шлюз-контроллера [ORFA]

=DeaD= » 21 май 2009, 21:40

Как-то не ясно как это работает. Я себе представляю так:

Мы в главной процедуре по идее должны зарегистрировать в ядре:
1. Все драйверы - на нужные адреса;
2. Источник команд (i2c-slave-receiver или serial-gate);

После чего надо включить источник команд и драйверы.

Оно примерно так работает или нет?

Добавлено спустя 1 минуту 18 секунд:
blindman писал(а):чтобы он драйвер запрашивал для себя n регистров, а ядро возвращало начальный номер

Неее, думаю лучше явно их размещать, просто ядро должно проверять, что пересекаются эти интервалы.

Чтобы лишний раз не двигать драйверы, а то не все будут через интроспекцию их адреса получать.

Re: Обсуждение реализации шлюз-контроллера [ORFA]

blindman » 21 май 2009, 21:44

Не лучше.Драйвер будет думать, что его регистры нумеруются с нуля - проще добавить новые регистры не затрагивая прочие драйвера. Ядро через интроспекцию будет выдавать реальные номера. Получать через интроспекцию будут все. В приказном порядке :)

Re: Обсуждение реализации шлюз-контроллера [ORFA]

=DeaD= » 21 май 2009, 21:47

Не понял - будет возможность убрать 1 старый драйвер и добавить 1 новый с другим кол-вом регистров не тронув старые драйвера кроме одного удалённого?

Re: Обсуждение реализации шлюз-контроллера [ORFA]

blindman » 21 май 2009, 21:50

Убрать, добавить, убрать регистры, добавить регистры - что угодно. Не думая, а не занят ли уже регистр который мы хотим использовать. Меньше возможностей для ошибок, проще сборка.

Re: Обсуждение реализации шлюз-контроллера [ORFA]

=DeaD= » 21 май 2009, 21:58

При этом адреса старых останутся? Ядро автоматом не сдвинет следующие за удаляемым драйверы?

Re: Обсуждение реализации шлюз-контроллера [ORFA]

blindman » 21 май 2009, 22:01

Сдвинет. Потому я и говорю - интроспекцию использовать в приказном порядке

Добавлено спустя 2 минуты 21 секунду:
Если делать так, что можно не использовать интроспекцию, а ориентироваться на фиксированные регистры - смысла в такой интроспекции немного

Re: Обсуждение реализации шлюз-контроллера [ORFA]

=DeaD= » 21 май 2009, 22:02

Не-не-не, нафиг интроспекцию в приказном порядке :) зачем людям жизнь усложнять сразу? А что нам мешает сохранять адреса? Ну сделать так, что можно желаемый адрес при регистрации передать - это то мы можем? :)

Re: Обсуждение реализации шлюз-контроллера [ORFA]

blindman » 21 май 2009, 22:08

Если будет 50 драйверов - есть шанс что они займут все доступные номера, да еще и не хватит. А вот шансов, что все эти драйвера будут собраны в 1 девайсе - немного. Лучше сразу сделать так, что бы избежать проблем, чем потом все ломать и в итоге сделать именно так.


Rambler\'s Top100 Mail.ru counter