реклама на сайте
подробности

 
 
> Стабильность передачи по изернет.
Oleg_IT
сообщение Aug 10 2015, 17:57
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



LPC2478, 12МГц. M = 17, N = 0. Есть простая программа, переработанный пример, по таймеру запускается АЦП, заполняется массив 512 двух байтовых слова и скидывается этот массив по изернет в компьютер. Библиотеку работы с изернет взял в инсталлированном Keil (TCP_ARM_L.lib). Когда частота оцифровки не большая, до 60 кГц программа работает стабильно, поднимаю частоту выше, до 100 кГц, начинаются сбои передачи, программа из библиотеки выходит по ошибке ERR_MEM_LOCK или ERR_MEM_FREE, таймер и АЦП продолжают работать. Сам я никакие динамические массивы не использую, только статика.
По осциллографу видно, что запас по времени есть и не маленький, на пин вывожу 1 когда буфер заполнен, а снимаю 1, когда приходит сообщение TCP_EVT_ACK, период стабильной отправки заполненного массива равен 10,9 мс, время от начала передачи до прихода сообщение TCP_EVT_ACK - 240 мкс. При этом сигнала на АЦП нет. При подаче синуса, любой частоты передача прекращается. Стабильность передачи возобновляется только при периоде 16,4 мс.
Частота таймера для передачи по изернет 10 мс, минимум рекомендованного.
Не понятна зависимость наличия сигнала и периода стабильной передачи. Как заставить программу работать на частоте оцифровке 100 кГц?
Правильно я понимаю, если в функцию tcp_callback пришло сообщение TCP_EVT_ACK, то данные отправлены и все буфера освобождены?
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 17)
Golikov A.
сообщение Aug 11 2015, 05:43
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата
Правильно я понимаю, если в функцию tcp_callback пришло сообщение TCP_EVT_ACK, то данные отправлены и все буфера освобождены?

Вроде бы нет. Это только значит что данные акнулись, то есть дошли до клиента, но буфера то еще почистить надо.... да написано что как они акнутся буфера почистятся, но думаю совсем не факт что это произойдет до вызова калбака, скорее после, дальше как бы в фоне. Информация о том что все дошло нужна оперативна, а памяти типа должно быть много

Вы при посылке проверяете можно ли отправлять и сколько может послать сокет?
tcp_check_send
tcp_max_dsize

корреляция с частотой отцифровки думаю в общей нагрузке на проц...

Цитата
Частота таймера для передачи по изернет 10 мс, минимум рекомендованного.

я просто дергаю функцию main_TcpNet как могу чуть ли не раз в милисекунду если других дел нет, а вот таймер тот что
timer_tick делает у меня 100 мСек, он нужен для отслеживания времени жизни пакетов, а работа в первой функции происходит, ее то вы как часто дергаете?


Да еще сколько у вас памяти на все это выделено на сокеты и прочее в настройках? Может побольше дать?
Go to the top of the page
 
+Quote Post
Oleg_IT
сообщение Aug 11 2015, 17:03
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



Весь код работы с изернетом взял из примера и как рекомендуют здесь, соответственно передачу начинаю когда tcp_check_send() == true.

Величину tcp_max_dsize не превышаю, функция выдаёт 1460, использую 1032 байта.

Увеличение памяти не помогает. Наверно это предел.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Aug 11 2015, 18:41
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



main_TcpNet
как часто дергаете?
Go to the top of the page
 
+Quote Post
Oleg_IT
сообщение Aug 12 2015, 04:31
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



main_TcpNet использую как рекомендует Keil, т.е. в основном цикле программы, реальный период не мерил.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Aug 12 2015, 05:08
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



АЦП когда молотит, оно это делает в прерывании или по ДМА? Может реально на работу стека ресурса не остается?
Go to the top of the page
 
+Quote Post
Oleg_IT
сообщение Aug 12 2015, 16:31
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



Померил период обращения к функции main_TcpNet, максимум 6.5мкс,

Цитата(Golikov A. @ Aug 12 2015, 08:08) *
АЦП когда молотит, оно это делает в прерывании или по ДМА? Может реально на работу стека ресурса не остается?


АЦП работает по прерыванию. Привожу код инициализации таймеров и АЦП.
CODE
U32 ADCInit( U32 ADC_Clk )
{
/* Enable CLOCK into ADC controller */
PCONP |= (1 << 12);

AD0CR = ( 0x01 << NumCh ) | /* SEL=1,select channel 0~7 on ADC0 */
( N_ADC << 8 ) | /* CLKDIV = Fpclk / 4000000 - 1 */
( 0 << 16 ) | /* BURST = 1, BURST */
( 0 << 17 ) | /* CLKS = 0, 11 clocks/10 bits */
( 1 << 21 ) | /* PDN = 1, normal operation */
( 0 << 22 ) | /* TEST1:0 = 00 */
( 4 << 24 ) | /* MAT0.1 */
( 1 << 27 ); /* EDGE = 0 (CAP/MAT singal falling,trigger A/D conversion) */

/* If POLLING, no need to do the following */
AD0INTEN = 0x100 | (0x01 << NumCh); /* Enable interrupts */
return (U32)install_irq( ADC0_INT, (void *)ADC0, HIGHEST_PRIORITY );
}

/*--------------------------- init ------------------------------------------*/
unsigned int SetTimer9 = 0x0000400;
//unsigned int SetTimer9 = 0x0000000ED;
static void init(void)
{
PCONP |= 0x40001000; /* Enable for ADC Ethernet block */
PINSEL1 |= 0x00054000; /* Enable ADC&DAC Pins */

T1MCR = (3 << 0);// /*| (1 << 3)*/ | (1 << 4);
T1MR0 = TCNT - 1;
// install_irq( TIMER1_INT, (void *)Timer1, HIGHEST_PRIORITY );

// T0MCR = (1 << 3) | (1 << 4); // MR1: Interrupt Reset
T0MCR = (1 << 4); // MR1: Reset
T0MR1 = SetTimer9;
T0EMR = (1 << 1) | // MAT0.1 P1[29]
(1 << 6) // Set the corresponding External Match bit/output to 1 (MATn.m pin is
// HIGH if pinned out).
;
// install_irq( TIMER0_INT, (void *)Timer0, 1);//HIGHEST_PRIORITY );

ADCInit( ADC_CLK );
}

N_ADC расчётное и равно 512.
TCNT - 1 такое что бы период таймера был 10 мс
Таймер 1 работает на timer_tick.

Сообщение отредактировал IgorKossak - Aug 13 2015, 11:05
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Aug 12 2015, 17:31
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



а шарком не пробовали трафик посмотреть? может будет понятно где затык? У кейла достаточно стабильный стэк чтобы так обосраться....

Еще может драйвер мак уровня поглядеть? Может там что-то мешает и данные застревают где-то на пересылках?

Go to the top of the page
 
+Quote Post
Oleg_IT
сообщение Aug 17 2015, 04:33
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



Посмотрел я шарком, ни чего интересного, просто нет очередной посылки, сервер пытается несколько раз достучатся до клиента, но безуспешно и всё останавливается.
Если ставлю низкую скорость оцифровки программа всё равно вылетает, но позже, несколько минут работает.

Цитата(Golikov A. @ Aug 12 2015, 21:31) *
Еще может драйвер мак уровня поглядеть? Может там что-то мешает и данные застревают где-то на пересылках?
А где и как его смотреть?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Aug 17 2015, 05:24
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



ну должен быть файл он обычно в имени имеет _EMAC_ в нем должен быть драйвер управления маком контроллера, там ДМА настраиваются, порты, и все прочее...

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

у вас случаем не включено управление поток и вы не забываете окно очищать? Вдруг это не выход, а вход мешает...

Цитата
Если ставлю низкую скорость оцифровки программа всё равно вылетает, но позже, несколько минут работает.

то есть похоже все таки суммарный объем данных влияет, со стороны компьютера данные успевают высчитываться? Может все же окно на компьютере забивается?
Go to the top of the page
 
+Quote Post
smk
сообщение Aug 17 2015, 08:16
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата(Oleg_IT @ Aug 17 2015, 07:33) *
Если ставлю низкую скорость оцифровки программа всё равно вылетает, но позже, несколько минут работает.

Была подобная ситуация. Заряжал АЦП на однотактное преобразование, по завершении вычитывал и запускал опять на преобразоваеие. В итоге получалось, что АЦП подвисал через разные промежутки времени от секунд до минут. Из ситуации вышел следующим образом. Зарядил АЦП на циклическое преобразование, а результат вычитывал по флагу завершения. Это помогло. Может и у Вас нечто сходное?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Oleg_IT
сообщение Aug 17 2015, 10:25
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



Цитата(smk @ Aug 17 2015, 12:16) *
Была подобная ситуация. Заряжал АЦП на однотактное преобразование, по завершении вычитывал и запускал опять на преобразоваеие. В итоге получалось, что АЦП подвисал через разные промежутки времени от секунд до минут. Из ситуации вышел следующим образом. Зарядил АЦП на циклическое преобразование, а результат вычитывал по флагу завершения. Это помогло. Может и у Вас нечто сходное?

Скорей всего не та ситуация, осциллографом вижу что и таймер и АЦП продолжают работать, нет именно передачи.

По поводу _EMAC_. Там же всё в библиотеке, исходников стека у меня нет.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Aug 17 2015, 10:56
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



все, да не всеsm.gif
драйвер EMAC_LPC... отдельным файлом должен быть.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Aug 17 2015, 12:01
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



кстати, по умолчанию в стеке все ошибки вываливаются в while(1), там бы тоже заглушки заменить на правильную реакцию...
Go to the top of the page
 
+Quote Post
Oleg_IT
сообщение Aug 17 2015, 18:21
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



Вах!:) По EMAC не прав конечно, вот он какой есть, файлик этот LPC24_EMAC.c.

Осознать бы, где чего смотреть. LPC24_EMAC.c из примера взято, собственно вся моя программа из примеров собрана, сам только собрал проект из ... двух проектов LEDClient и ADC.
По поводу успевает ли приёмная сторона, период посылок 0.02 с (~45Гц), компьютер 3,4 ГГц 16Гб ОЗУ, думаю справляется. Но как я понимаю, если даже не справляется, то просто передача должна остановится, ошибки по памяти быть не должно.
Как то она не предсказуемо падает, иногда минуты не работает, а иногда 10-15 минут работает. Поставил контроль выделяемой памяти, если адрес в очередном цикле меняется, то это фиксируется. Перед падением часто адрес менялся, но в пределах двух килобайт.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Aug 17 2015, 18:51
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



странно все это... может сам кеил спросить какого оно?
А стэка-кучи хватает?
Go to the top of the page
 
+Quote Post
smk
сообщение Aug 17 2015, 19:12
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Немного не в тему, но какой самый быстрый из LPC с изеренетом на сегодня есть (LQFP)? STM32F407 чтоб не хуже (168 МГц)?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Aug 17 2015, 19:26
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



http://www.nxp.com/parametrics/50809/#/p=1...s=0,sc=,so=,es=
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st June 2025 - 18:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.01499 секунд с 7
ELECTRONIX ©2004-2016