Неприкрытым Отцам программинга.....за советом....
Кстати, довольно хорошо написанная прога. Даже с комментариями.
А зачем тебе?
web page . Ещё стоит узнать про внутреннее устройство сетевых протоколов, которые используются. З. Ы. Если я ошибся со своими предположениями и ты всё это знаешь и тебе нужно было совсем другое, то извини.
Я не отец, конечно, но свои два цента вставлю... Во первых, странный способ просить совета, привёл куски сырцов и ничего больше. Попробую угадать. Наверное это программа на C для микроконтроллера. Из каментов также легко видеть, что устройство имеет ethernet интерфейс на чипе CirrusLogic CS8900a. Не совсем понятно, правда, какой смысл ты вкладывал в фразу "заботать ЭТО". Предположим, что С ты не знаешь. Тогда начни с изучения С вообще, возьми стандарт (сцылка на него есть в FAQ раздела возьми Кернигана и Ричи "Язык С". Узнай, какое подмножество С поддерживает компилятор, для которого это фсё пишется. Ещё, наверное, понадобится информация по чипу CS8900. Она есть на
Может просто это такой йумор? Типа, чувак увидел совершенно непонятный ему кусок проги, и решил, что это хороший пример того, какие непонятные проги на С бывают...
А ты знаешь как комп работает? Ну типа регистры там всякие? Что такое swap bytes? По-моему, кроме документации к девайсу ничего и не нужно, чтобы сесть и понять, что там написано...
Не. Ну еще надо знать синтаксис С (вроде как там чистый С).
1) Пользоваться константами.
2) Комментарии использовать для комментирования, а не хз для чего.
P.S. <moderator mode=on> Сабж треда напрашивается на предупреждение. Правильный сабж: "помогите понять программу"
Учить использовать htons и т.п. думаешь уже бесполезно?
А по-моему, вполне клевый код.
0x0000ffff объявлять константой плохо, потому что уменьшает читабельность.
А рядом со всеми остальными масками в комментарии написано, что это за маска.
Выглядит он страшно потому что отступов и расцветки нет.
Глупо ожидать, что код программирующий сетевой интерфейс на низком уровне вдруг будет понятным без описания этого интерфейса =)
Его, по-моему, вообще бесполезно учить.
Разве что сильно ударить по голове и заново.
---
"Лень --- движитель прогресса."
Даже не знаю как возразить... Наверное ты не такой как все, если для тебя уменьшает читабельность.
> А рядом со всеми остальными масками в комментарии написано, что это за маска.
Супер. Комментарии для этого и придумывались.
> Глупо ожидать, что код программирующий сетевой интерфейс на низком уровне вдруг будет понятным без описания этого интерфейса =)
Нет. Код должен быть понятным для чтения без описания интерфейса. Описание интерфейса тебе может быть нужно для того что бы понять почему делается именно так, или для того что бы редактировать код. А для того, что бы код читать или же понять для чего так делается тебе не должно быть нужно описание.
Взгляни например на драйвер Ethernet карты 3Com в FreeBSD, на какую нибудь сугубо-специфичную фукнцию типа xl_choose_media.
Я его копи-пейстнул в вижуальник.
Если потереть комментнутые строчки (где чувак с МСБ/ЛСБ глючил, по ходу) то получиццо совершенно нормальный код.
Ффсё, забейте.
Я совершенно забыл, что Ваше мнение по вопросам стиля меня не интересует =)
имхо понятный нормальный код
В ФЖевском исполнение воопще ништяк получилось,мне кажется
блин кто сомневается, что фж отец. код читабелен и еще как.
У кого есть нормальные читабельные справочники где описывают параметры всяких функций Visual DSP++ 3.5 .. желательно на русском....
А также какие-нибудь документы, где поэтапно описан процесс написания прог для процов cthbb 2185.....
Заранее спасибо..
Оставить комментарий
ivirkrip
Посоветуйте с какой книжки начинать , чтобы заботать ЭТОsss++;
return 1; //arp
}
// if (c == 0x0800) //ip?
if (c == 0x0008) //ip?
{ //ip
//c = rx_buf[11] & 0x00FF;
c = rx_buf[11] & 0xff00;
// if c == 0x0011) && (LOCALPORT == (rx_buf[18]&0x0000ffff
if (
rx_buf[15]&0x0000ffff)==localmachine.localip[0]) &&
rx_buf[16]&0x0000ffff)==localmachine.localip[1]) &&
(c == 0x1100) &&
(LOCALPORT_R == (rx_buf[18]&0x0000ffff
) {
sss1++;
RemoteIA[0]=rx_buf[3]&0x0000ffff;
RemoteIA[1]=rx_buf[4]&0x0000ffff;
RemoteIA[2]=rx_buf[5]&0x0000ffff;
RemoteLocalPort=rx_buf[17]&0x0000ffff;
RemoteIP[0]=rx_buf[13]&0x0000ffff;
RemoteIP[1]=rx_buf[14]&0x0000ffff;
return 2; //udp
}
//if (c == 0x0001) //icmp?
if (c == 0x0100) //icmp?
tx_buf[0] = rx_buf[3] & 0x0000ffff; //dest
tx_buf[1] = rx_buf[4] & 0x0000ffff;
tx_buf[2] = rx_buf[5] & 0x0000ffff;
tx_buf[3] = localmachine.localHW[0] & 0x0000ffff; //src
tx_buf[4] = localmachine.localHW[1] & 0x0000ffff;
tx_buf[5] = localmachine.localHW[2] & 0x0000ffff;
// tx_buf[6] = 0x0806; //arp
tx_buf[6] = 0x0608; //arp
// tx_buf[7] = 0x0001; //ethernet
tx_buf[7] = 0x0100; //ethernet
// tx_buf[8] = 0x0800; //ip
tx_buf[8] = 0x0008; //ip
// tx_buf[9] = 0x0604; //mac - 6, ip - 4
tx_buf[9] = 0x0406; //mac - 6, ip - 4
// tx_buf[10]= 0x0002; //reply
sum = 0;
for (i = 0; i < 10; i++)
{
sum += tx_frame[i+7];
}
// sss = sum;
sum = (sum & 0xFFFF) + (sum >> 16);
sum = ~sum;
tx_frame[12] = sum;
cs8900_poll_send(&tx_frame[0], 28+14 + len);
А также
SWAP_BYTES_LO(r0,r1); // swap bytes
r0=PP_IA;
WRITE_PP_REGISTER(r0,r1); // write to CS8900a
r1=dm(_localmachine+localHW1); // get middle-short-word of MAC
// SWAP_BYTES_LO(r0,r1); // swap bytes
r0=PP_IA+2;
WRITE_PP_REGISTER(r0,r1); // write to CS8900a
r1=dm(_localmachine+localHW2); // get lo-short-word of MAC
// SWAP_BYTES_LO(r0,r1); // swap bytes
r0=PP_IA+4;
WRITE_PP_REGISTER(r0,r1); // write to CS8900a
r0=PP_RxCTL;
r1=PP_RxCTL_RxOK | PP_RxCTL_IA | PP_RxCTL_Broadcast | PP_RxCTL_Multicast; //| PP_RxCTL_RUNT; //
// r1=PP_RxCTL_Promiscuous|PP_RxCTL_RxOK;
WRITE_PP_REGISTER(r0,r1); // set RxCTL of CS8900a
r0=PP_LineCTL;
r1=PP_LineCTL_Rx | PP_LineCTL_Tx;
Буду рад любым советам....