02.04.2013, 22:06
|
|
Прописка
Регистрация: 10.04.2007
Сообщений: 180
Сказал спасибо: 7
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
че то как то через жёпу
но ладно...
|
|
|
|
03.04.2013, 18:31
|
|
Прописка
Регистрация: 10.04.2007
Сообщений: 180
Сказал спасибо: 7
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
а кто знает что означает:
Warning 201: Assignment inside relational expression?
а то OSA компилится, но не пашет
и варнинг такой
|
|
|
|
03.04.2013, 19:18
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2003
Адрес: Москва
Сообщений: 2,530
Сказал спасибо: 737
Сказали Спасибо 1,927 раз(а) в 799 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Сообщение от patriaomuerte
|
inside relational
|
Это где-то в IF написано не "==" а просто "="
Впрочем, может так и должно быть
__________________
Опыт - это школа, в которой человек узнает, каким дураком он был раньше.
|
|
|
|
04.04.2013, 10:25
|
|
Частый гость
Регистрация: 10.06.2005
Сообщений: 30
Сказал спасибо: 13
Сказали Спасибо 22 раз(а) в 9 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Сообщение от DK
|
Народ, объясните тупому такую штуку:
Есть структура.
Походу, в программе используется выражение типа sizeof(udp_packet_t)
Оно равно 9
Ну не могу я понять. Ведь поле data может иметь любую длину? Т.е. если записываю в него 10 байт, то размер структуры должен получится 8 + 10 байт? А получается 19...
Дальше - хуже... При расчете длины пакета IP и его контрольной суммы опять всплывает лишний байт (на КС данных UDP можно плюнуть, оно не важно)...
Ну вообще-то это стек под АВР был сделан (ув. тов. Lifelover-ром). Там вроде все нормально заводится. А я это пытаюсь в ПИК18 запихнуть.
|
Сам недавно начал юзать этот стек - знакомые названия ![Улыбка](images/smilies/icon_smile.gif) Портировал под CCS PICC - реально дошел до обмена UDP-пакетами - дальше пока не нужно. Работает. Конкретно по вопросу - поле data - хранит указатель на блок данных и занимает в структуре столько места. сколько нужно под указатель. Т.е. sizeof дает размер самой структуры... Как-то так ![Улыбка](images/smilies/icon_smile.gif) И еще - у меня не пошла функция IP_checksum (или как ее...) - немного ее подрихтовал - теперь работает. Если нужно, могу выложить свой рариант.
|
|
|
|
04.04.2013, 15:51
|
|
Прописка
Регистрация: 19.01.2009
Сообщений: 132
Сказал спасибо: 20
Сказали Спасибо 26 раз(а) в 23 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Сообщение от kobzar
|
Если нужно, могу выложить свой рариант.
|
Да, нужно.
|
|
|
|
04.04.2013, 18:00
|
|
Частый гость
Регистрация: 10.06.2005
Сообщений: 30
Сказал спасибо: 13
Сказали Спасибо 22 раз(а) в 9 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Сообщение от dsfj
|
Да, нужно.
|
Код:
|
// calculate IP checksum
int16 ip_cksum(int32 sum, int8 *buf, size_t len)//size_t
{
//Рассчитываем сумму word'ов блока (big endian)
//(блок выравнивается на word нулем)
while(len ›= 2)
{
sum += ((int16)*buf ‹‹ 8) | *(buf+1);
buf += 2;
len -= 2;
}
//Если длина буфера нечетная, дополняем нулем:
if(len)
sum += *((int16)buf) ‹‹ 8;
//Складываем старший и младший word суммы,
//Пока не получим число, влезающее в word.
while(sum ›› 16)
sum = (sum & 0xffff) + (sum ›› 16);
//Снова конвертируем в big endian и берем дополнение:
return ~htons((int16)sum);
} |
|
|
|
|
05.04.2013, 08:25
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2003
Адрес: Москва
Сообщений: 2,530
Сказал спасибо: 737
Сказали Спасибо 1,927 раз(а) в 799 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Да с КС я проще обошелся... Там в процедурах ip_send и ip_reply и ip_resend просто 1 отнял от длины пакета и КС стала правильно считаться.
АРП тоже нормально работает. DHCP - не работает. TCPIP тоже не работает. Вроде как нет ошибок в пакете, но комп просто не отвечает на пакеты с железки. Вроде все правильно. Флаги, даже опции менял в пакете. Один хрен.
Ща сижу, пытаюсь микрочиповский стек прикрутить. Бесит миллион подключаемых файлов... Где-то накосячил. Перестало собираться.
Цитата:
|
Configuration settings have been specified for address 0x00300001 in more than one object module. Found in 'Obj-C18-PIC18EX_ENC28\ENC28J60.o', previously found in 'Obj-C18-PIC18EX_ENC28\ARP.o'
Errors : 1
|
__________________
Опыт - это школа, в которой человек узнает, каким дураком он был раньше.
|
|
|
|
05.04.2013, 08:28
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2003
Адрес: Москва
Сообщений: 2,530
Сказал спасибо: 737
Сказали Спасибо 1,927 раз(а) в 799 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
kobzar, я не понял, в чем отличие Вашего варианта от оригинала?
Ваш:
Код:
|
int16 ip_cksum(int32 sum, int8 *buf, size_t len)//size_t
{
while(len ›= 2)
{
sum += ((int16)*buf ‹‹ 8 ) | *(buf+1);
buf += 2;
len -= 2;
}
if(len)
sum += *((int16)buf) ‹‹ 8;
while(sum ›› 16)
sum = (sum & 0xffff) + (sum ›› 16);
return ~htons((int16)sum);
} |
Оригинал:
Код:
|
uint16_t ip_cksum(uint32_t sum, uint8_t *buf, size_t len)
{
while(len ›= 2)
{
sum += ((uint16_t)*buf ‹‹ 8 ) | *(buf+1);
buf += 2;
len -= 2;
}
if(len)
sum += (uint16_t)*buf ‹‹ 8;
while(sum ›› 16)
sum = (sum & 0xffff) + (sum ›› 16);
return ~htons((uint16_t)sum);
} |
__________________
Опыт - это школа, в которой человек узнает, каким дураком он был раньше.
Последний раз редактировалось DK; 05.04.2013 в 08:30.
|
|
|
|
05.04.2013, 08:34
|
|
Гражданин KAZUS.RU
Регистрация: 31.12.2010
Сообщений: 837
Сказал спасибо: 371
Сказали Спасибо 153 раз(а) в 113 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
В этом sum += *((int16)buf) ‹‹ 8;
|
|
|
|
05.04.2013, 09:17
|
|
Частый гость
Регистрация: 10.06.2005
Сообщений: 30
Сказал спасибо: 13
Сказали Спасибо 22 раз(а) в 9 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Сообщение от Flopix
|
В этом sum += *((int16)buf) ‹‹ 8;
|
Так точно
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 10:25.
|
|