Страница 1 из 2
streamer_halstreamer
Добавлено: 12 янв 2018, 14:41
nkp
есть задача - передать в компонент rt данные , и записать их в массив...
Код: Выделить всё
if (empty == 0) { //streamer.0.empty
if (tt % 2 != 0) {
clock = 0; //streamer.0.clock (streamer.0.clock-mode 2) clock on rising edge
arr_line[i] = insreamer; //streamer.0.pin.0
i++;
} else {
clock = 1;
}
tt++;
}else {
i=0;
tt=0;
}
inspection0 = arr_line[0];
inspection1 = arr_line[1];
inspection2 = arr_line[2];
inspection3 = arr_line[3];
inspection4 = i;
inspection5 = tt;
}
streamer.0.empty - пин ,показывающий,что очередь пуста(всё считали)
и тогда нам как бы нужно обнулить итераторы (i и tt)
------------
так вот так - не получается((
такое впечатление ,что пин streamer.0.empty "не постоянен" и выполнение проваливается на else,
что естественно приводит к преждевременному обнулению переменных(и получается каша

)
если убрать "автоматическое" обнуление - то все работает как надо...
---------------
может есть какой "правильный" способ разложить очередь в массив??
Re: streamer_halstreamer
Добавлено: 12 янв 2018, 14:52
Serg
При отладки компонентов нужно понимать, что ты не способен отследить (средствами диагностики) срабатывание компонента в каждом сервоцикле.
Глубоко в твой код пока не вникал но похоже надо реагировать не просто на значение пина, а на его изменение (фронт или спад)...
Типа:
if (empty == 0 && empty != old_empty)
P.S. в тексте компонента мало информации, опиши логику работы с ним (сигналы на пинах).
Re: streamer_halstreamer
Добавлено: 12 янв 2018, 14:56
nkp
UAVpilot писал(а):а на его изменение
всё может быть...
логика конечно говорит по другому:
или очередь ВСЯ считана,или НЕТ))
и пин(как по мне) об этом и должен сигнализировать...
Re: streamer_halstreamer
Добавлено: 12 янв 2018, 14:59
nkp
UAVpilot писал(а):P.S. в тексте компонента мало информации, опиши логику работы с ним (сигналы на пинах).
Код: Выделить всё
loadrt streamer depth=100 cfg=s
setp streamer.0.enable 1
setp streamer.0.clock-mode 2
net kempty kl.0.empty streamer.0.empty
net kclock kl.0.clock streamer.0.clock
net in1 streamer.0.pin.0 kl.0.insreamer
для примера читает такой файл:
Re: streamer_halstreamer
Добавлено: 12 янв 2018, 15:04
nkp
Re: streamer_halstreamer
Добавлено: 12 янв 2018, 15:10
Serg
Тажёлый случай... Хотя б направление пинов укажи - непонятно-же ничего!

Да и остальной текст не помешает...
Re: streamer_halstreamer
Добавлено: 12 янв 2018, 15:14
nkp
UAVpilot писал(а):Тажёлый случай... Хотя б направление пинов укажи - непонятно-же ничего
я правильно стрелочки расставлять не умею))
Re: streamer_halstreamer
Добавлено: 12 янв 2018, 15:28
nkp
могу на словах пояснить стрелочки:
из скрипта питона пишем в файл числа (s32) ...
нам они нужны "в компоненте" kl.comp...
нужно считать их в какой то массив данных,чтоб просто можно было ими оперировать...
для этого в kl.comp организуем сигнал clock (для streamer.0.clock)
streamer по пер.фронту этого сигнала считывает из очереди одно значение ...
записываем его в наш массив arr_line ...
сбрасываем clock в ноль...
------------
так повторяем ,пока есть что считывать (сигнал из streamer.0.empty )
когда все считали - обнуляем итераторы:
else {
i=0;
tt=0;
}
Re: streamer_halstreamer
Добавлено: 12 янв 2018, 15:34
Serg
Сигнал empty откуда берётся?
streamer.0.clock - это IO?
покажи "show pin streamer.0"?
Re: streamer_halstreamer
Добавлено: 12 янв 2018, 15:36
nkp
UAVpilot писал(а):игнал empty откуда берётся?
Код: Выделить всё
streamer.N.empty bit output
TRUE when the FIFO N is empty, FALSE when valid data is available.
UAVpilot писал(а):streamer.0.clock - это IO?
Код: Выделить всё
streamer.N.clock bit input
Clock for data as specified by the clock-mode pin
Re: streamer_halstreamer
Добавлено: 12 янв 2018, 15:41
nkp
UAVpilot писал(а):покажи "show pin streamer.0"?
в какой момент? в любой?
Re: streamer_halstreamer
Добавлено: 12 янв 2018, 15:42
nkp
Код: Выделить всё
Component Pins:
Owner Type Dir Value Name
17 bit IN FALSE streamer.0.clock <== kclock
17 s32 IN 2 streamer.0.clock-mode
17 s32 OUT 0 streamer.0.curr-depth ==> cdepth
17 bit OUT TRUE streamer.0.empty ==> kempty
17 bit IN TRUE streamer.0.enable
17 s32 OUT 0 streamer.0.pin.0 ==> in1
17 s32 OUT 490 streamer.0.time
17 s32 I/O 0 streamer.0.underruns
Re: streamer_halstreamer
Добавлено: 12 янв 2018, 15:56
Serg
nkp писал(а):17 bit IN FALSE streamer.0.clock <== kclock
А какого тогда ты меняешь его значение в самом компоненте?..
nkp писал(а):17 bit OUT TRUE streamer.0.empty ==> kempty
А вот этот сигнал внутри компонента ты должен менять, а не проверять...
Можешь целиком код показать?
Re: streamer_halstreamer
Добавлено: 12 янв 2018, 16:01
nkp
UAVpilot писал(а):Можешь целиком код показать?
компонента?
да это (пока) и есть весь код:
Код: Выделить всё
/* sudo halcompile --install kl.comp */
component kl;
pin out s32 inspection0;
pin out s32 inspection1;
pin out s32 inspection2;
pin out s32 inspection3;
pin in s32 insreamer ; //streamer.0.pin.0
pin in bit empty ; //streamer.0.empty
pin out bit clock ; //streamer.0.clock
pin in s32 pin_len ; // arr len
variable int i = 0;
variable int tt = 0;
function _;
license "GPL";
;;
FUNCTION(_) {
static int arr_line[100];
if (empty == 0) { //streamer.0.empty
if (tt % 2 != 0) {
clock = 0; //streamer.0.clock (streamer.0.clock-mode 2)
arr_line[i] = insreamer; //streamer.0.pin.0
i++;
} else {
clock = 1;
}
tt++;
} else {
i=0;
tt=0;
}
inspection0 = arr_line[0];
inspection1 = arr_line[1];
inspection2 = arr_line[2];
inspection3 = arr_line[3];
}
пока у нас идет диалог,я его пять раз уже менял ))
Re: streamer_halstreamer
Добавлено: 12 янв 2018, 16:05
nkp
UAVpilot писал(а):А какого тогда ты меняешь его значение в самом компоненте?..
так я его в своем же компоненте меняю)
как раз для streamer.0.clock
но может действительно я что то чебучу) (так это ж запросто))
Re: streamer_halstreamer
Добавлено: 12 янв 2018, 16:17
Serg
Похоже у тебя проблемы с тактированием - у тебя clock меняется не зависимо от приходящих данных...
nkp писал(а):как раз для streamer.0.clock
Так... А streamer и kl - это два разных компонента?..
nkp писал(а):но может действительно я что то чебучу) (так это ж запросто))
Это для тебя запросто, а у других-то в голове твоих мыслей нет...
Попробуй чтоль словами описать процедуру взаимодействия с этим компонентом. Какие сигналы на него поступают, в какой момент, как он на них должен реагировать?..
Re: streamer_halstreamer
Добавлено: 12 янв 2018, 16:32
nkp
UAVpilot писал(а):Попробуй чтоль словами описать процедуру взаимодействия с этим компонентом. Какие сигналы на него поступают, в какой момент, как он на них должен реагировать?.
так я пытался в #8
=================
halstreamer читает файл текстовый(наши числа) и пишет его в очередь(FIFO)
считывает из FIFO их (данные) уже streamer
(короче - они братья,и работают в паре)
streamer может считывать в 4-х режимах:
сразу все(мне не подходит)
и по сигналу clock(внешнему)
вот я и (попытался) организовал синхронизацию из kl.comp (это уже мой компонент)
Re: streamer_halstreamer
Добавлено: 12 янв 2018, 16:36
nkp
Re: streamer_halstreamer
Добавлено: 12 янв 2018, 16:41
nkp
а то ,что компонент (streamer) написан аж в 2006-м году не может отражаться
на его работе - ведь тогда лектроны в компьютерах бегали еще медленно?

Re: streamer_halstreamer
Добавлено: 12 янв 2018, 17:06
Алексс
Все как-бы должно работать, но нужно убрать обнуление tt, иначе в streamer сбивается синхронизация
и тип tt заменить на unsigned.
PS: и тактировать можно(нужно ?) nonstop