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

 
 
> Nios II /e vs Nios II /f (проект Ethernet)
billidean
сообщение Mar 11 2014, 03:55
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 247
Регистрация: 4-10-10
Из: г. Екатеринбург
Пользователь №: 59 925



Добрый день всем.
На демоплате BeMicro (Cyclone IV E) делаю проект работы с Ethernet (UDP).
При использовании проца Nios II /f все нормально работает. Но для этого проца нужна лицензия (которой у меня нет crying.gif ).
Попробовал перейти в этом же проекте на Nios II /e, при отправке (из платы) пакетов расчитывается кривая CRC для UDP-заголовка. Для самого тела UDP-пакета можно ставить CRC=0, что я и делаю, а вот для заголовка нужна корректная CRC, иначе прога на ПК вообще не принимает пакет.
Код расчета CRC:
Код
unsigned short checksum(void *b, int len)
{
    unsigned short *buf = b, result;
    unsigned int sum=0;
    for ( sum = 0; len > 1; len -= 2 ) /* Sum all 16b words */
    {
//        printf("*buf = 0x%x\n", *buf);
        sum += *buf++;
    }
    if ( len == 1 )
    /* If any stray bytes, */
    sum += *(unsigned char*)buf;
    /* add to sum */
    sum = (sum >> 16) + (sum & 0xFFFF);
    /* Add the carry */
    sum += (sum >> 16);
    /* (again) */
    result = ~sum;
    /* Take the one's complement */
    return result;
    /* Return 16b value */
}


В чем может быть секрет?? Кэшей никаких не использую, поэтому переход на Экономный проц должен вроде пройти без проблем, кроме замедления работы.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
billidean
сообщение Mar 13 2014, 07:29
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 247
Регистрация: 4-10-10
Из: г. Екатеринбург
Пользователь №: 59 925



Вот моя структура пакета в .h-файле
Код
typedef struct UDP_str
{
    char macDst[6];
    char macSrc[6];
    char type[2];
    char ver_lenIP;
    char all00;
    char len_28plus[2];
    char id_pack[2];
    char fl_4000[2];
    char time_l_80;
    char type_UDP_11;
    char crc16_IPhead[2];
    char ipSrc[4];
    char ipDst[4];
    char portSrc[2];
    char portDst[2];
    char lenUDP_8plus[2];
    char crc16_UDP[2];
    // до этого ... длина равна 42 байта
    char data[UDP_DATA_MAX_SIZE];
} __attribute__((__packed__)) UDP_str;

Вот код в .c-файле
Код
volatile UDP_str udp_send_s __attribute__ ((aligned (1)));
volatile UDP_str udp_take_s __attribute__ ((aligned (1)));

После этого я считаю, что обе структуры выровнено по-байтово и без "дырок" между полями.
Расчет CRC для IP-заголовка должен начинаться с поля ver_lenIP, и просчитывать 20 байт, а я указал (ошибочно), чтобы начинался расчет с поля all00, т.е. сдвинул на один байт вправо. При этом НИОС/Фаст все нормально расчитывал, а вот НИОС/Эконом выдавал кривую CRC, из-за чего я и обнаружил свой косяк в указании начального адреса расчета CRC.
Поэтому и началось обсуждение типов НИОСов и их обращение к памяти.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- billidean   Nios II /e vs Nios II /f (проект Ethernet)   Mar 11 2014, 03:55
- - Kuzmi4   2 billidean Листинг смотрели ? В IDE отладчике сра...   Mar 11 2014, 07:13
- - billidean   Отладчиком еще не проходился. Но уже дошел до тако...   Mar 11 2014, 07:19
- - billidean   Дело получилось не таким простым, как показалось м...   Mar 11 2014, 13:52
|- - vadimuzzz   Цитата(billidean @ Mar 11 2014, 20:52) Пр...   Mar 11 2014, 22:59
- - Kuzmi4   считать в плисе ?   Mar 11 2014, 14:30
- - billidean   Цитатасчитать в плисе ? Вы имеете в виду вынести ф...   Mar 12 2014, 01:52
|- - Serhiy_UA   Попробуйте создать тестовые примеры, максимально в...   Mar 12 2014, 03:09
- - billidean   ЦитатаВычисляйте Ниосом только контрольную сумму д...   Mar 12 2014, 03:53
- - Kuzmi4   2 billidean Как это нельзя ставить брейкпойнты? Кт...   Mar 12 2014, 06:07
- - billidean   Вроде я такое же читал, что при Эконом.НИОС будут ...   Mar 12 2014, 06:35
- - Kuzmi4   2 billidean У меня в проектах обычно Nios2-e, патр...   Mar 12 2014, 06:43
- - Копейкин   Если код был "оптимизирован", то там точ...   Mar 12 2014, 06:44
- - billidean   настройки BSP в части оптимизации были по умолчани...   Mar 12 2014, 07:37
- - billidean   Вобщем все вроде заработало. Дело было в указании ...   Mar 12 2014, 11:57
- - Golikov A.   потому что фаст наверняка 32 битный, и при сдвиге ...   Mar 12 2014, 14:59
- - billidean   Я тоже так подумал, но вот искать истину пока неко...   Mar 13 2014, 00:05
- - billidean   Посмотрел доку "Implementation Details" ...   Mar 13 2014, 06:24
- - Kuzmi4   2 billidean вставьте в С-код выравнивание, откомен...   Mar 13 2014, 07:18
- - Golikov A.   а шина везде одна и таже? Потом в дорогом проце с...   Mar 13 2014, 07:21
|- - alexadmin   Цитата(Golikov A. @ Mar 13 2014, 11:21) а...   Mar 13 2014, 07:26
|- - Serhiy_UA   Цитата(billidean @ Mar 13 2014, 11:29) Во...   Mar 13 2014, 10:14
- - Golikov A.   тогда битность шины не причем, был бы сдвиг в плюс...   Mar 13 2014, 08:22
- - billidean   Если шина 32-хбитная, и мы указываем на 2-ой или 3...   Mar 13 2014, 09:39


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

 


RSS Текстовая версия Сейчас: 31st July 2025 - 10:59
Рейтинг@Mail.ru


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