Vooon писал(а):Ну почему нет? Раньше регистр 0 перехватывался, на том уровне можно перехватить любой регистр(ы).
Там нет ядра в том виде как оно присутствует у нас - снаружи девайса
roboforum.ruТехнический форум по робототехнике. |
|
|
Vooon писал(а):Ну почему нет? Раньше регистр 0 перехватывался, на том уровне можно перехватить любой регистр(ы).
blindman писал(а):Ага, только там ядра нет, которое должно знать что это регистр какой-то специальный.
blindman писал(а):Можно ввести дополнительный флаг "новый запрос" - и передавать его вместе с номером регистра, в старшем бите.
=DeaD= писал(а):Мы же вроде были против мультибуферов? Как тут без них?
=DeaD= писал(а):А вот продолжение запроса к этому же контроллеру сделать можно - через запрос к драйверу с номером регистра 0xFF, если к контроллеру просто обратились с запросом прочитать еще байт без указания нового регистра.
Я предлагаю передавать номер регистра с установленным старшим битом, если это новый запрос, и сброшенным - если продолжение
Vooon писал(а):Будем холивар устраивать или нет? Мне лениво...
Vooon писал(а):Я предлагаю передавать номер регистра с установленным старшим битом, если это новый запрос, и сброшенным - если продолжение
Уж лучше наоборот.
blindman писал(а):Легко. Ядро держит буфер только при чтении, и только для повторяющего регистра. При записи и при смене регистра для чтения буфер сбрасывается, и драйверу передается флаг, получив который он сбрасывает свой буфер. На каждый драйвер нужно держать небольшой буфер (в самом драйвере) - это мы уже решили. Буфер нужен только один, при смене регистра из которого читаем он все равно сбросится
blindman писал(а):Еще раз : как драйвер узнает к какому регистру обращение, если ему передано FF?
blindman писал(а):Я предлагаю передавать номер регистра с установленным старшим битом, если это новый запрос, и сброшенным - если продолжение
Vooon писал(а):Мне вот только остается не ясным как формировать NAck в конце чтения будешь?
Может не нужно придумывать все это шаманство с буферами?
=DeaD= писал(а):А зачем ему знать? У него в буфере инфа, он её выдаёт.
=DeaD= писал(а):Это значит регистров сразу в 2 раза меньше себе сделали, при том что реально это нужно будет в единичных случаях и реально в 90% драйверов не надо будет длинные ответы возвращать, всё будет умещаться в 20 байтный буфер.
=DeaD= писал(а):Всё бы ок, если бы опять не этот злосчастный повторяющийся регистр
=DeaD= писал(а):я предлагаю продолжать чтение только если не было обращения к этому же контроллеру по другим или этому же регистру.
Vooon писал(а):Мне вот только остается не ясным как формировать NAck в конце чтения будешь?
GATE_RESULT init_my_driver(void)
{
GATE_RESULT res;
// ...
// ...
res = gate_driver_register(&driver);
if (res == GR_OK) {
res = gate_task_register(&task);
}
return res;
}
blindman писал(а):Драйвер может вернуть меньше данных чем у него запросили - когда данные кончились, тогда и NAck
blindman писал(а):А что он будет делать если ее там нет? Просто тупо кончилась, и надо подгрузить?
blindman писал(а):Тебе не хватит 128 регистров на 1 драйвер? Да ты гигант
blindman писал(а):Где логика?
blindman писал(а):Драйвер может вернуть меньше данных чем у него запросили - когда данные кончились, тогда и NAck
Vooon писал(а):Ну пока я вижу что нужно это только для ограниченного кол-ва драйверов, а именно: для чтения серв и результатов ацп.
Вот для этого имхо не нужно перетряхивать все ядро.
И добавлять в структуру драйвера считаю лишним.
Vooon писал(а):ПС: имхо этот диф не нужен, т.к. собственный процесс нужен малому кол-ву драйверов
проще (и экономней) сделать так:
blindman писал(а):Но если действительно понадобится - придется не только ядро перетряхнуть, но и драйвера все.
=DeaD= писал(а):Обратится с 0xFF-запросом на продолжение чтения к соотв. драйверу. Последнее обращение он может помнить
=DeaD= писал(а):В драйвере и так общий буфер - оттуда и читаем. Или ты имеешь в виду что тогда не надо будет помнить к какому регистру обращались отдельно? так это тогда надо будет помнить на уровне ядра. Хотя это конечно удобней, но я предполагал, что в буфер драйвера должен ответ целиком влезать и в него ничего дописывать не надо, а значит и не надо помнить к какому регистру это обращение было.
=DeaD= писал(а):Я думал ты на уровне обращения к контролеру по уарту хочешь включать или нет этот бит.
=DeaD= писал(а):blindman писал(а):Драйвер может вернуть меньше данных чем у него запросили - когда данные кончились, тогда и NAck
А так часто делают приличные люди?
=DeaD= писал(а):2. При этом ядро стучится в драйвер с номером регистра 0xFF - значит это не новый запрос, а дальше читаем из буфера.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2