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

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> LwIP это потенциально опасное ПО или нет?, или я неправильно понял и не знаю что и как
aaarrr
сообщение Apr 10 2016, 09:29
Сообщение #31


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(AleksBak @ Apr 10 2016, 12:19) *
Код
struct netconn *newconn;

тут мы фактически выделили память под структуру типа netconn

Нет, ничего не выделили. Создали локальный указатель на структуру данного типа.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 10 2016, 09:32
Сообщение #32


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(AleksBak @ Apr 10 2016, 15:19) *
Поясню как это все работает :
Код
struct netconn *newconn;

тут мы фактически выделили память под структуру типа netconn (ее описание см. тут же в этой теме), а далее тут передаем:
sys_arch_mbox_fetch(&conn->acceptmbox, (void **) &newconn, 0);
мы ждем прихода элемент в очередь сообщений и как оно там появится, то его содержимое будет скопировано в выделенный буфер под него т.е. по указателю newconn будет скопирована вся такая структура (ее описание см. тут в этой теме).

struct netconn *newconn; - это не выделение памяти под структуру, это объявление указателя на структуру.
Вот для того, чтобы понять разницу между объектом и указателем на него, Вам и стоит открыть учебник.
Никаких копирований содержимого структуры там не может происходить. sys_arch_mbox_fetch просто сохраняет в newconn указатель на некий экземпляр структуры struct netconn (либо сохраняет там NULL). Где этот экземпляр находится, из этого кода неясно. Он может находиться как в динамической памяти так и в статической и даже в автоматической (на стеке). Это узнать можно только смотря код sys_arch_mbox_fetch.
Go to the top of the page
 
+Quote Post
AleksBak
сообщение Apr 10 2016, 10:23
Сообщение #33


Частый гость
**

Группа: Участник
Сообщений: 132
Регистрация: 6-02-16
Из: г. Баку
Пользователь №: 90 364



Цитата(jcxz @ Apr 10 2016, 13:32) *
...Где этот экземпляр находится, из этого кода неясно. Он может находиться как в динамической памяти так и в статической и даже в автоматической (на стеке). Это узнать можно только смотря код sys_arch_mbox_fetch.

Код
u32_t sys_arch_mbox_fetch(sys_mbox_t *mbox, void **msg, u32_t timeout)
{
    void *dummyptr;
    portTickType StartTime, EndTime, Elapsed;

    StartTime = xTaskGetTickCount();

    if (msg == NULL)
    {
        msg = &dummyptr;
    }

    if (timeout != 0)
    {
        if ( pdTRUE == xQueueReceive(*mbox, &(*msg), timeout / portTICK_RATE_MS))
        {
            EndTime = xTaskGetTickCount();
            Elapsed = (EndTime - StartTime) * portTICK_RATE_MS;

            return (Elapsed);
        }
        else // timed out blocking for message
        {
            *msg = NULL;

            return SYS_ARCH_TIMEOUT;
        }
    }
    else // block forever for a message.
    {
        while ( pdTRUE != xQueueReceive(*mbox, &(*msg), portMAX_DELAY))
        {
        } // time is arbitrary
        EndTime = xTaskGetTickCount();
        Elapsed = (EndTime - StartTime) * portTICK_RATE_MS;

        return (Elapsed); // return time blocked TODO test
    }
}

Тут параметр - timeout передается равным нулю напоминаю. Вообще все это по-хорошему если, то переписать/переделать нужно. А Вы вообще этот NetConn используете? Или кто из зала тут использует? Если посмотреть, то получается что тут по приходу коннекта снаружи, мы получаем из очереди сообщений ОС (xQueueReceive) всю структуру - копированием по указателю в выделенный для этого буфер (т.е по указателю newconn находится выделенный буфер). То что мне нужно учебники читать и в школу идти - это понятно, только не надо это в каждом посту писать. Расслабьтесь. Я вот терплю своих реально спиногрызов же сейчас и пытаюсь их уложить спать (сейчас время). 1111493779.gif Посмотрите свысока на ученика более спокойно.

Цитата(jcxz @ Apr 10 2016, 13:32) *
...
Никаких копирований содержимого структуры там не может происходить. sys_arch_mbox_fetch просто сохраняет в newconn указатель на некий экземпляр структуры struct netconn (либо сохраняет там NULL)...

Еще раз коротко поясню (по-моему мнению конечно): там, дальше используется функция ОС (FreeRTOS тут ясень пень) получения элемента из очереди сообщений - функция xQueueReceive. С одновременным удалением этого элемента из очереди. В эту функцию мы должны в 1-ом параметре передать дескриптор очереди, во 2-м параметре передается указатель на область памяти куда будет скопирован элемент, а в третьем параметре передается время ожидания появления этого элемента в очереди (время блокирования задачи) - если этот параметр равен portMAX_DELAY, то ждем бесконечно долго. Я сейчас должен пойти на базар чтобы купить смеситель/гибкий шланг взамен неисправных и меня наверно час 2-3 не будет - поэтому тут еще раз пояснил и дополнил сейчас на всякий случай. Спасибо.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 10 2016, 11:38
Сообщение #34


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(AleksBak @ Apr 10 2016, 16:23) *
этот NetConn используете? Или кто из зала тут использует? Если посмотреть, то получается что тут по приходу коннекта снаружи, мы получаем из очереди сообщений ОС (xQueueReceive) всю структуру - копированием по указателю в выделенный для этого буфер (т.е по указателю newconn находится выделенный буфер). То что мне нужно учебники читать и в школу идти - это понятно, только не надо

Опять 25..... twak.gif
Ещё раз: из кода ясно видно, что xQueueReceive() записывает в *msg указатель (дважды выделить!!!) на некую структуру в памяти, но не саму структуру. Никаких копирований структур она не делает и в принципе делать не может, так как даже не знает размера объекта, на который указывает возвращаемый ею указатель (она возвращает указатель типа void *). xQueueReceive() без разницы тип и размер данных, на которые она указывает, для мэйлбоксов это и не нужно. Возвращается просто указатель! Указатель - это просто переменная размера sizeof(int) (обычно), это просто одно число.
Т.е. - после возврата из sys_arch_mbox_fetch(), в вызывающей функции, переменная newconn будет равна полученному из xQueueReceive() указателю (если конечно xQueueReceive() вернула true).
Go to the top of the page
 
+Quote Post
AleksBak
сообщение Apr 10 2016, 18:25
Сообщение #35


Частый гость
**

Группа: Участник
Сообщений: 132
Регистрация: 6-02-16
Из: г. Баку
Пользователь №: 90 364



Цитата(jcxz @ Apr 10 2016, 15:38) *
Опять 25..... twak.gif
...

Указатель так указатель. Что веткой драться то. И еще толстой такой веткой. Нет чтобы потоньше веточка, а то дубинка какая-то. И в самом деле - это ведь просто переменная указателя на какую-то без разницы даже какую память. Что я так зациклился на том что и память куда он показывает обязательно должна быть уже тут сразу заполнена и показывать на готовую структуру на выходе. На выходе то она готовая может быть (или сам указатель равен NULL), но не на этом шаге она заполняется. А заполняется она в другом месте программы. Меня просто с толку сбил механизм работы этой очереди и все прицепился, что при получении элемента из очереди будет происходить копирование в выделенный буфер содержимого. Копирование просто указателя на то место в памяти где они (структуры) появляются. И даже думал почему так непродуктивно работает это? Туда-сюда данные копируются с одного места в другое. Надо бы посмотреть как там все это происходит. В какой части памяти все это пишется. И какая память и т.п. А Вы вообще NetConn API используете? Что-нибудь хорошего плохого можете о нем сказать? Я кстати купил для ванной запчасти. Еще и дома успели поспорить по поводу одежды и пр. А у Вас как дела вообще?

Цитата(jcxz @ Apr 10 2016, 15:38) *
... для мэйлбоксов это и не нужно....

Еще вот позанудствую насчет слова мэйлбокс - это же в дословном переводе как "очередь сообщений" переводится? Так ведь? Так же проще понимать. Или все-таки это не "очередь сообщений" в данном случае, а что-то необычное тут?
Go to the top of the page
 
+Quote Post
gosha-z
сообщение Apr 10 2016, 18:50
Сообщение #36


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 30-10-05
Пользователь №: 10 288



MailBox - почтовый ящик.
MessageQueue - очередь сообщений
Go to the top of the page
 
+Quote Post
AleksBak
сообщение Apr 10 2016, 19:24
Сообщение #37


Частый гость
**

Группа: Участник
Сообщений: 132
Регистрация: 6-02-16
Из: г. Баку
Пользователь №: 90 364



Опять я ошибся и перепутал - не "очередь сообщений", а "буфер сообщений" (про него изначально думал) Так переводится это словосочетание тут вроде. Так же легче понимать.
Go to the top of the page
 
+Quote Post
ar__systems
сообщение Apr 11 2016, 13:47
Сообщение #38


self made
****

Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795



Цитата(AleksBak @ Apr 10 2016, 04:19) *
Поясню как это все работает :
Код
struct netconn *newconn;

тут мы фактически выделили память под структуру типа netconn (ее описание см. тут же в этой теме), а далее тут передаем:
sys_arch_mbox_fetch(&conn->acceptmbox, (void **) &newconn, 0);
мы ждем прихода элемент в очередь сообщений и как оно там появится, то его содержимое будет скопировано в выделенный буфер под него т.е. по указателю newconn будет скопирована вся такая структура (ее описание см. тут в этой теме). А функция sys_arch_mbox_fetch эта обертка под получение этого элемента очереди в ОС. А насчет ядра и серии - да я очень грубо ошибся и не пойму как такое слово мог написать. Ядро конечно это. Еще какие ошибки у меня тут есть?? Мне значит тогда совсем закопаться и в школу пойти так да? Вот я сижу-пишу как дурак эти строчки, чего-то доказываю, а двое спиногрызов (дети) реально в этот момент меня задалбливают. cranky.gif Один со своими машинками лезет, а другая чем-то недовольна и кричит громко в ответ.


Чукча не читатель, чукча писатель?

Извините, но очевидно, все что вам писали выше прошло мимо и вы продолжаете писать полную ерунду. Какой lwip, о чем вы? Берите учебник "с для чайников" и начинайте с самых азов, hello world итд
Go to the top of the page
 
+Quote Post

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

 


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


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