|
|
  |
STR912 + CW 1.7, Выбор ОС для работы. |
|
|
|
Feb 17 2008, 22:19
|
Местный
  
Группа: Участник
Сообщений: 273
Регистрация: 3-11-05
Пользователь №: 10 442

|
Простите что прерываю вашу беседу, но в процессе работы с ЮКОСом возникла загвоздка: Я создаю поток со следующим содержанием: Код static void AppTaskUserIF (void *p_arg) { INT8U s[20]; INT8U user_if_state; INT32U value;
int rfSocket, rfClientSocket; int sockStatus; struct sockaddr_in sa_server, sa_client; int client_addr_size;
rfSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
/* Проверяем, создал нам сокет */ if (rfSocket < 0) return;
memset(&sa_server, 0, sizeof(struct sockaddr_in)); sa_server.sin_family = AF_INET; sa_server.sin_addr.s_addr = htonl(INADDR_ANY); sa_server.sin_port = htons(311);
sockStatus = bind(rfSocket, (struct sockaddr *)&sa_server, sizeof(struct sockaddr_in));
listen(rfSocket, 1);
while (TRUE) { /* Task body, always written as an infinite loop. */
client_addr_size = sizeof(sa_client); rfClientSocket = accept(rfSocket, (struct sockaddr*)&sa_client,&client_addr_size); if(rfClientSocket < 0) { close(rfSocket); return; } sockStatus = 0; while ( sockStatus >= 0) { sockStatus = recv(rfClientSocket, (char *)&s, 1, 0 );
if (sockStatus >= 0) send(rfClientSocket, (char *)&s, 1, 0 ); }
close(rfClientSocket);
OSTimeDlyHMSM(0, 0, 0, 100); } } После запуска данного потока, система "висит" на процедуре accept. Всё было бы ничего, если бы не подвисание всей RTOS. Т.е. просто система не пингуется. Если же поток отключаешь - система номально отвечает на ICMP запросы. Подскажите, в чём дело? Неужели надо пользовать Non-blocked функции (типа NetSock_Bind и тд)?
Сообщение отредактировал SimpleSoft - Feb 17 2008, 22:21
|
|
|
|
|
Feb 18 2008, 15:39
|

Местный
  
Группа: Участник
Сообщений: 219
Регистрация: 20-11-07
Пользователь №: 32 484

|
Цитата(dxp @ Feb 18 2008, 17:47)  А где размер хранить? Там в параметре шаблона size. Он, кстати, оттуда и берется в Size. Нафик автор копирует константу времени компиляции в поле класса я так и не просек.
|
|
|
|
|
Feb 19 2008, 04:39
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(meister @ Feb 18 2008, 21:39)  Там в параметре шаблона size. Он, кстати, оттуда и берется в Size. Нафик автор копирует константу времени компиляции в поле класса я так и не просек. А, вы вот о чем, не въехал сразу, прошу пардону. Основная причина, почему так, является исторической - в первой версии в качестве основы очередей был использован класс TCbuf (кольцевой буфер для 8-битных целых), шаблон ring_buffer вырос из него, структура данных перекочевала почти без изменений. Кроме того, какой реально выигрыш даст использование параметра шаблона в качестве литерала? 1 байт экономии - на фоне общего потребления памяти каналом это ловля блох, имхо. К тому же по быстродействию еще вопрос, что будет шустрее - тут уже от целевой архитектуры больше зависит. Собственно, это, видимо, и есть причина, почему до сих пор никто не обращал внимания на этот момент.  Но замечание ваше разумное и правильное, имеет смысл поробовать и такой вариант, спасибо.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|