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

 
 
4 страниц V  « < 2 3 4  
Reply to this topicStart new topic
> STR912 + CW 1.7, Выбор ОС для работы.
SimpleSoft
сообщение Feb 17 2008, 22:19
Сообщение #46


Местный
***

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
dxp
сообщение Feb 18 2008, 04:58
Сообщение #47


Adept
******

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



Цитата(meister @ Feb 16 2008, 21:58) *
Зачем нужно поле Size? Я не нашел места в коде, где бы оно изменялось - то есть оно хранит константу, которую можно спросить у компилятора (а не читать из RAM).

Да, наверное, следовало бы объявить поле Size как const, только это скорее всего мало что поменяло бы. smile.gif


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
meister
сообщение Feb 18 2008, 08:36
Сообщение #48


Местный
***

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



Цитата(dxp @ Feb 18 2008, 07:58) *
Да, наверное, следовало бы объявить поле Size как const, только это скорее всего мало что поменяло бы. smile.gif


Поле Size следовало не объявлять.
Go to the top of the page
 
+Quote Post
Aprox
сообщение Feb 18 2008, 08:57
Сообщение #49


Местный
***

Группа: Участник
Сообщений: 374
Регистрация: 7-11-07
Из: Moscow
Пользователь №: 32 131



Цитата(zltigo @ Feb 17 2008, 13:32) *
Это находится за гранью моего понимания.

Тогда просто поверьте, что имея в руках шаблон canal из scmRTOS, я бы не потерял 2 месяца на изобретение велосипедов.
Go to the top of the page
 
+Quote Post
dxp
сообщение Feb 18 2008, 14:47
Сообщение #50


Adept
******

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



Цитата(meister @ Feb 18 2008, 14:36) *
Поле Size следовало не объявлять.

А где размер хранить?


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
meister
сообщение Feb 18 2008, 15:39
Сообщение #51


Местный
***

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



Цитата(dxp @ Feb 18 2008, 17:47) *
А где размер хранить?


Там в параметре шаблона size. Он, кстати, оттуда и берется в Size. Нафик автор копирует константу времени компиляции в поле класса я так и не просек.
Go to the top of the page
 
+Quote Post
dxp
сообщение Feb 19 2008, 04:39
Сообщение #52


Adept
******

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



Цитата(meister @ Feb 18 2008, 21:39) *
Там в параметре шаблона size. Он, кстати, оттуда и берется в Size. Нафик автор копирует константу времени компиляции в поле класса я так и не просек.

А, вы вот о чем, не въехал сразу, прошу пардону. Основная причина, почему так, является исторической - в первой версии в качестве основы очередей был использован класс TCbuf (кольцевой буфер для 8-битных целых), шаблон ring_buffer вырос из него, структура данных перекочевала почти без изменений.

Кроме того, какой реально выигрыш даст использование параметра шаблона в качестве литерала? 1 байт экономии - на фоне общего потребления памяти каналом это ловля блох, имхо. К тому же по быстродействию еще вопрос, что будет шустрее - тут уже от целевой архитектуры больше зависит. Собственно, это, видимо, и есть причина, почему до сих пор никто не обращал внимания на этот момент. smile.gif

Но замечание ваше разумное и правильное, имеет смысл поробовать и такой вариант, спасибо. a14.gif


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 09:57
Рейтинг@Mail.ru


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