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

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> Прикручиваю ось к LPC2478, Есть и будут вопросы)
_Артём_
сообщение Aug 26 2012, 18:44
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(haker_fox @ Aug 26 2012, 09:53) *
Не могу определится с окончательным выборомом. Что от стека нужно:
1. ICMP.
2. TCP.
3. UDP.
4. DHCP.

На базе стека планируется использовать web server (возможно понадобится ftp server, telnet server).

Если web, то TCP - точно нужен.
DHCP нужен, если ip-адрес сервера не статический, а выдаётся шлюзом.
ICMP тоже не помешает, хотя бы для того чтобы пропинговать сервер.
UDP может и не нужен, но он настолько мал по сравнению с остальным, что можно его и оставить, может пригодится.
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Aug 27 2012, 03:04
Сообщение #17


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (_Артём_ @ Aug 27 2012, 02:44) *
Если web, то TCP - точно нужен.
DHCP нужен, если ip-адрес сервера не статический, а выдаётся шлюзом.
ICMP тоже не помешает, хотя бы для того чтобы пропинговать сервер.
UDP может и не нужен, но он настолько мал по сравнению с остальным, что можно его и оставить, может пригодится.

Спасибо за объяснение rolleyes.gif Но вопрос немножечко не в этом был. Я перечислил, что мне нужно (TCP, DHCP, ICMP, UDP...). У меня вопрос не по составу компонентов, а по выбору стека из двух ранее озвученных. Естественно, как стек брать для конкретной оси - дело десятое. Оба поддерживают многопоточность. Но все же)

В общем решил остановиться на lwIP, т.к. с нуля мне кажется проще прикрутить его к scmRTOS. А вот из стека Юрия Темкина придется вытаскивать кусочки его оси rolleyes.gif Хотя, объективно, его стек лучше (сделан по мотивам BSD).

QUOTE (_Артём_ @ Aug 27 2012, 02:44) *
UDP может и не нужен, но он настолько мал по сравнению с остальным, что можно его и оставить, может пригодится.

Мне DHCP нужен, поэтому без UDP никуда)


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
shreck
сообщение Aug 27 2012, 06:55
Сообщение #18


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 24-06-06
Из: Томск
Пользователь №: 18 328



Цитата(haker_fox @ Aug 26 2012, 13:53) *
На базе стека планируется использовать web server (возможно понадобится ftp server, telnet server).

А что за веб сервер будет? Определились уже?

P.S. lwIP 1.4.0 я уже прикрутил к scmRTOS. Нужен?
P.P.S. Под IAR.
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Aug 27 2012, 12:40
Сообщение #19


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (shreck @ Aug 27 2012, 14:55) *
А что за веб сервер будет? Определились уже?

Пока нет, но может быть по мотивам примеров из FreeRTOS или openTCP. Либо что-то другое. Нужно CGI обязательно. Ну и "базовый" набор html...
QUOTE (shreck @ Aug 27 2012, 14:55) *
P.S. lwIP 1.4.0 я уже прикрутил к scmRTOS. Нужен?
P.P.S. Под IAR.

Ну если Вам не жалко)
Думаю под gcc переклепать смогу)

Спасибо!


Хотя вот еще два интересных конкурента появились: OpenTCP & Microchip TCP/IP.

Кто нибудь может о них что-нить интересное сказать? OpenTCP неплохо документирован) Мне кажется, что даже очень не плохо. lwIP как-то совсем, ИМХО, скудно)


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
shreck
сообщение Aug 28 2012, 03:02
Сообщение #20


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 24-06-06
Из: Томск
Пользователь №: 18 328



Порт lwIP 1.4.0 c использованием scmRTOS.

  1. ipnet_config.h и lwport_config.h - прописать пути для них.
  2. Папку port разместить, например, в верхней папке lwip и прописать путь до port/arch
  3. Прочитать lwport_config.h и подстроить под себя.
  4. Взять ethernetif под свой контроллер (здесь он для stm32).

Прикрепленные файлы
Прикрепленный файл  lwPortscmRTOS.zip ( 17.5 килобайт ) Кол-во скачиваний: 48
 
Go to the top of the page
 
+Quote Post
shreck
сообщение Aug 31 2012, 07:51
Сообщение #21


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 24-06-06
Из: Томск
Пользователь №: 18 328



Обнаружил досадную ошибку в порте, перекочевавшую из порта FreeRTOS.

Код
Файл sys_arch.cpp, функция sys_sem_new(...), строка 227.
Написано:
if (0 == count)
    t->signal();

Должно быть:
if (count)
    t->signal();
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Sep 28 2012, 12:06
Сообщение #22


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Новое интересное поведение)
Программа работает великолено. Решил на LCD вывести картинку 480x272x24. На Питоне написал скрипт, который конвертнул картинку в const const
CODE
uint32_t logoImg[] = { ... }
. На каждый пиксель, естественно, 4 байта. Получил размер массива 272 * 480 * 4 = 522 240 байт. Массив находится в хидере, который цепляется к программе. Вот тут-то начинается интересный эффект...

При вызове функции OS::sleep или любой другой, вызывающий переключение контекста, программа виснет на время, много превышающее заданный таймаут. Затем, продолжает нормально работать. Причем на sleep у меня построен небольшой цикл, который выводит каждый 15 мс на экран точку (типа линейка, показывающая процесс). Так вот, одна точка висит вместо 15 мс около минуты, затем дорисовываются все точки с необходимой скоростью. Что интересно, если массив маленько урезать, килобайт этак на 30, то программа работает без нареканий. Картинка, конечно, выводится с артефактами.

Посмотрел, что линкер ложит массив "по середине" прошивки.

У меня гипотеза. Я плохо знаю ассемблер, поэтому не очень ясно понимаю код переключения контекста. Но не может ли из за того, что в коде получилась солидная "дыра" в виде не кода, а данных, переключатель контекста отрабатывает не совсем верно. Ну например, перескакивает не на задачу, а на эти данные. Т.е. мы не может перейти "далеко" на код.

Правда, как объяснить, что после первой задержки, все остальные отрабатывают нормально?!

Спасибо! Извините, если немного сумбурно...


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
shreck
сообщение Sep 28 2012, 12:48
Сообщение #23


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 24-06-06
Из: Томск
Пользователь №: 18 328



Цитата(haker_fox @ Sep 28 2012, 19:06) *
Новое интересное поведение...

Насколько я помню, в порте scmRTOS под GCC от АНТОХи по умолчанию используется "короткий" прыжок в функции переключения контекста. Может это имеет значение?
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Sep 28 2012, 12:54
Сообщение #24


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (shreck @ Sep 28 2012, 21:48) *
Насколько я помню, в порте scmRTOS под GCC от АНТОХи по умолчанию используется "короткий" прыжок в функции переключения контекста. Может это имеет значение?

Может быть) Но как это дело заменить на длинный прыжок? И сколько - короткий (в байтах)? Я так, понимаю, надо ассемблер править...

Может тогда проще как-то линкер уговорить, ложить такие массивы где-то "сбоку" от кода?


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Sep 28 2012, 12:57
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(shreck @ Sep 28 2012, 15:48) *
Насколько я помню, в порте scmRTOS под GCC от АНТОХи по умолчанию используется "короткий" прыжок в функции переключения контекста. Может это имеет значение?

У haker_fox не Cortex-M3, а LPC2478.
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Sep 28 2012, 13:02
Сообщение #26


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (_Артём_ @ Sep 28 2012, 21:57) *
У haker_fox не Cortex-M3, а LPC2478.

Так АНТОХА также делал порт под lpc2xxx rolleyes.gif


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
shreck
сообщение Sep 28 2012, 13:04
Сообщение #27


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 24-06-06
Из: Томск
Пользователь №: 18 328



Цитата(_Артём_ @ Sep 28 2012, 19:57) *
У haker_fox не Cortex-M3, а LPC2478.

Пардон, ошибся. Но возможно и в этом случае стоит просмотреть asm код.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 28 2012, 16:25
Сообщение #28


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(haker_fox @ Sep 28 2012, 18:06) *
Посмотрел, что линкер ложит массив "по середине" прошивки.

Попробуйте изменить имя массива на z_logoImg - ляжет в конец sm.gif
На самом деле сильно вряд ли, что недопрыгивает. Думаю, что начав выполнять код картинки, проц бы уже ни за что не вернулся к нормальному выполнению программы.
Посмотрите размерности индексных переменных при обращении к массиву. Вдруг где не хватает?


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Sep 29 2012, 00:39
Сообщение #29


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (AHTOXA @ Sep 29 2012, 01:25) *
Попробуйте изменить имя массива на z_logoImg - ляжет в конец sm.gif
На самом деле сильно вряд ли, что недопрыгивает. Думаю, что начав выполнять код картинки, проц бы уже ни за что не вернулся к нормальному выполнению программы.
Посмотрите размерности индексных переменных при обращении к массиву. Вдруг где не хватает?

Теперь массив объявле так
CODE
const uint32_t z_logoImg[] = {

Вот, что видим в map-файле
CODE
.rodata._ZL9z_logoImg
                0xa0222160    0x7f800 ./obj/FDesktop.o

Секции в скрипте линкера объявлены так (все во внешней SDRAM)
CODE
MEMORY
{
    RAM (rw)    : ORIGIN = 0xA0600000, LENGTH = 512k
    FLASH (rx)    : ORIGIN = 0xA0200000, LENGTH = 1024k
}


Массив упорно ложится ну не совсем по середине, конечно, но реже прошивку на лапопам rolleyes.gif

При обращении к массиву используется цикл
CODE
        uint32_t* dst = ( uint32_t* )0xa0000000;

        for( int i = 0; i < 480 * 272; i++ )
            *dst++ = z_logoImg[ i ];


Вроде с индексами все в порядке rolleyes.gif

В общем такое ощущение, что размер массива сильно мешает. Но из расределения памяти видно, что никаким образмо область FLASH не может затереть область RAM, т.к. между ними 4 метра...

Блин, загадка! crying.gif


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 29 2012, 04:53
Сообщение #30


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(haker_fox @ Sep 29 2012, 06:39) *
Массив упорно ложится ну не совсем по середине, конечно, но реже прошивку на лапопам rolleyes.gif

Странно. Если он в rodata, то всяко должен лежать после .text:
Код
        *(.text)                   /* remaining code */
        *(.text.*)                 /* remaining code */
        *(.rodata)                 /* read-only data (constants) */
        *(.rodata*)

Попробуйте убрать из цикла обращение к logoImg:
Код
        uint32_t* dst = ( uint32_t* )0xa0000000;
    for( int i = 0; i < 480 * 272; i++ )
            *dst++ = i;

Узнаем, кто виноват. Может видеобуфер тормозит.


--------------------
Если бы я знал, что такое электричество...
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 Текстовая версия Сейчас: 18th June 2025 - 14:02
Рейтинг@Mail.ru


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