Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Питане за Microchip TCPIP stack
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=14953
Страница 1 от 4

Автор:  stoyanoff [ Вто Дек 20, 2016 6:39 pm ]
Заглавие:  Питане за Microchip TCPIP stack

Здравейте! Не съм използвам стек-а с MPLAB X до сега. До колкото прочетох, v6 не поддържа малките контролери (PIC18 и PIC24). Та се върнах малко назад - mla 2016 08 08. Прави ми впечатление, че MAC функциите са сложени във файл drv_wifi_mac.c. Това мога ли да го използвам за стандартна LAN връзка - telnet? Питам, защото когато теглих стек-а, беше отбелязано, че е само с wi-fi support. Още назад ли трябва да се върна във версиите?
Питам, защото когато разреших telnet сървър-а, ми връща грешка - липсваща MAC функция!
Благодаря!

Автор:  ДедоБоре [ Вто Дек 20, 2016 10:15 pm ]
Заглавие:  Re: Питане за Microchip TCPIP stack

v6 означава ли IPv6?

Автор:  stoyanoff [ Вто Дек 20, 2016 10:46 pm ]
Заглавие:  Re: Питане за Microchip TCPIP stack

Не! Версия 6, която е на мода сега. Общо взето си намерих старата версия за обикновенния MPLab и я зареждам в момента за MPLAB X. Всъщност забелязах, че последната за PIC18 и 24(v5.47) си има файловете, но са набутани при CAN-a... На тези винаги съм им се чудил на смотания начин, по който си разполагат файловете. Докато си спомня всички глупости ще отнеме малко време

Автор:  stoyanoff [ Сря Дек 28, 2016 2:59 pm ]
Заглавие:  Re: Питане за Microchip TCPIP stack

Здравейте! Използвам XC8 и имам следният казус :
имам дефиниран някакъв enum:
Код:
typedef enum EnumType{bla bla bla};
. Този енъм трябва да се използва в 4 файла-> file1.h, file1.c, file2.h и file2.c(има функции, които го използват, както и връщат резултат от същия тип). Проблемът идва, когато трябва да използвам функции от file1 във file2 т. е. трябва да #include "file1.h". Каквото и да опитвам, винаги ми дава грешка duplicate define EnumType! Опитах да отделя типа в отделен файл и да го затворя с гард, но не се получава. Възможно ли е някой да ми даде съвет как да постъпя? Няколко реда код като пример ако е възможно...

Автор:  syscop [ Сря Дек 28, 2016 3:12 pm ]
Заглавие:  Re: Питане за Microchip TCPIP stack

#if !defined(__BLABLA_H)

#define __BLABLA_H

typedef enum EnumType{bla bla bla};


#endif /* __BLABLA_H */

Нещо такова няма ли да помогне ?

Автор:  stoyanoff [ Сря Дек 28, 2016 3:33 pm ]
Заглавие:  Re: Питане за Microchip TCPIP stack

Ами така стана, но явно нещо съм оплескал дефинирането на enum. Изглежда иска да спазя структурата
Код:
typedef enum [b]Name[/b]{
//bla bla
}[b]Name[/b];

Не знам защо иска инстанция на enum при положение, че това е тип...

Автор:  slav4o.com [ Сря Дек 28, 2016 3:41 pm ]
Заглавие:  Re: Питане за Microchip TCPIP stack

хм.. ами не може ли да се сложат променливите в един файл и във другите да ги ползваш, като използваш extern
p.s. я пробвай така:
Код:
extern typedef enum [b]Name[/b]{
//bla bla
}[b]Name[/b];

Автор:  sparkybg [ Сря Дек 28, 2016 4:01 pm ]
Заглавие:  Re: Питане за Microchip TCPIP stack

syscop написа:
#if !defined(__BLABLA_H)

#define __BLABLA_H

typedef enum EnumType{bla bla bla};


#endif /* __BLABLA_H */

Нещо такова няма ли да помогне ?


Не само че ще помогне, ами това е стандартно възприетия начин за такива неща. Това трянва да го има във всеки хедър файл.

Автор:  stoyanoff [ Сря Дек 28, 2016 4:02 pm ]
Заглавие:  Re: Питане за Microchip TCPIP stack

slav4o.com написа:
хм.. ами не може ли да се сложат променливите в един файл и във другите да ги ползваш, като използваш extern

Ц! Пробвах, не го кефи! То по-скоро в този случай трябва отделно да бъде създадена инстанция на enum-a :
.c
Код:
volatile type ....

и тогава в .h extern, но на мен не ми трябва инстанцията, а променливата(типа), за да мога да задам на функции да връщат този тип. Явно е някаква особеност на компилатора, защото аз на практина никъде не използвам инстанцията, а само типа! Или ако се използва в дадената функция се дефинира...

Автор:  slav4o.com [ Сря Дек 28, 2016 4:14 pm ]
Заглавие:  Re: Питане за Microchip TCPIP stack

Малко се обърках. Но мисля че най-добре с указатели да го направиш. Когато една функция връща повече от BOOL char int или някой прост тип, май си е направо задължително. Просто слагаш в параметрите къде да изсере после функцията нещата. Даже може да не ги слагаш като зададеш NULL . Така функцията може да я дефинираш без дори да има място където да изпляска нещата. После може да си декларираш 1000 места за целта.

Автор:  sparkybg [ Сря Дек 28, 2016 4:29 pm ]
Заглавие:  Re: Питане за Microchip TCPIP stack

Кви указатели, кви 5 лева ба хора?! Излагацията е пълна!

extern, ststic и volatile са ползват за променливи и функции. enum-а не е нито едно от двете - няма си адрес а е чисто имагинерно понятие.

1. enum-а се слаха в "h" фаил
2. В началото и края на "h" файла се добавя:
#ifndef __enum_h__
#define __enum_h__
public enum bla-bla-bla...
...
...
#endif

После тоя h файл може да се инклудва навсякъде, където ти трябва, може и по няколко пъти, и грешка няма да има. Горните ифове се слагат именно за да се инклудне само веднъж. Всеки "h" файл, който се използва на повече от едно място, трябва да има такива ифове. Например всичките стандартни библиотеки на микрочип го имат в "h" файловете си.

Автор:  stoyanoff [ Сря Дек 28, 2016 7:50 pm ]
Заглавие:  Re: Питане за Microchip TCPIP stack

sparkybg написа:
Кви указатели, кви 5 лева ба хора?! Излагацията е пълна!

Няма никаква излагация! Ето как стоят нещата:
Код:
#ifndef DEFTYPE
#define DEFTYPE
typedef enum TYPE{//definition};
#endif

Това не работи! За да стане работа, компилаторът иска ето това:
Код:
#ifndef DEFTYPE
#define DEFTYPE
typedef enum TYPE{//definition}TYPE;
#endif

До колкото ми е известно това създава enum тип и създава променлива от този тип. Както казах, най-вероятно става дума за някаква особеност на компилатора, защото в кода нямам никъде употреба на променливата, а само на типа...

Автор:  sparkybg [ Сря Дек 28, 2016 8:23 pm ]
Заглавие:  Re: Питане за Microchip TCPIP stack

Това дето е между #define и #endif не е моя работа. Въпроса беше как да се реши проблема с грешкита за двойна дефиниция, а той се решава с въпросните if-ове.

Указател към enum е оксиморон. Указател към променлива от тип enum вече е ок, защото има към какво да сочи.

Ето по въпроса за typedef:
https://www.tutorialspoint.com/cprogram ... ypedef.htm

Ето и по-изчерпателно:
http://stackoverflow.com/questions/1675 ... efinitions

Не е особеност на компилатора, ами си е така във всички компилатори.

Въпросния enum могеш да го дефинираш и така:
Код:
typedef enum AAA{
...
...
...
}bbb;


а можеш и така:
Код:
typedef enum {
...
...
...
}bbb;


после можеш да го ползваш като:
Код:
void ccc(){
    bbb ddd;
}

, като ddd вече е променлива от тип bbb, а не от тип ААА, защото AAA не е тип, а име на ENUM-а.

А ако си използвал първата дефиниция може и така:
Код:
void ccc(){
   bbb ddd;
   enum AAA eee;
}


, като и двете са еквивалентни. просто "bbb" е alias на "enum AAA", точно както при "typedef unsigned int UINT", "UINT" e alias на "unsigned int".

Капиш?

Автор:  stefan63 [ Сря Дек 28, 2016 8:25 pm ]
Заглавие:  Re: Питане за Microchip TCPIP stack

Цитат:
До колкото ми е известно това създава enum тип и създава променлива от този тип. Както казах, най-вероятно става дума за някаква особеност на компилатора, защото в кода нямам никъде употреба на променливата, а само на типа...

Това ме разсипа.
Ц-то не е за мен.

Автор:  stoyanoff [ Сря Дек 28, 2016 8:56 pm ]
Заглавие:  Re: Питане за Microchip TCPIP stack

Направих 4 супер глупави файла само с дефиниция на функции, но без в тялото на функциите да става, каквото и да било. Просто съм казал, че ще върне променлива от този тип, като връщам 0, което е валидна стойност в тялото на enum(преобразува го към enum-a). На практика тези функции само са дефинирани и не се викат никъде. Не се създават променливи на практика(мисля).
Та само #ifndef #endif не работи! Не решава проблема. Пак има duplicate define, въпреки че вече излиза на второ място като грешка... Може да съм се овъртолил нещо, защото при някои от C-тата, когато сложиш след дефиницията име, създава променлива. Тук може да не е така, но без това второ име не става. Поне при мен. Може в по-новите верисии на XC8 да си работи и без него....
Не знам защо става така...

Страница 1 от 4 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/