Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Cетевые протоколы и технологии

Cетевые протоколы и технологии TCP/IP стек

Ответ
 
Опции темы Опции просмотра
Старый 07.11.2015, 19:53   #1
ampersant
Senior Member
 
Аватар для ampersant
 
Регистрация: 26.02.2008
Адрес: IgorV
Сообщений: 2,299
Вес репутации: 4442/102
ampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond repute
По умолчанию SNTP в либе TCP/IP

не пойму почему никак не проходит дальше выделенного места

Код:
    switch(SNTPState)
    {
        case SM_HOME:
            // Obtain ownership of the DNS resolution module
            if(!DNSBeginUsage())
                break;
            LED1_IO=!LED1_IO;
            // Obtain the IP address associated with the server name
            DNSResolveROM((ROM BYTE*)NTP_SERVER, DNS_TYPE_A);
            dwTimer = TickGet();
            SNTPState = SM_NAME_RESOLVE;
            break;

        case SM_NAME_RESOLVE:
Чем это оно там так сильно занято, что ищет? Ни разу не резолвилось.

Почему то используя стандартные формулы преобразования обнуленные данные дают число
Thu Jan 1 18:12:15 1970

Кто нибудь поднимал NTP клиента в либе микрочипа?
ampersant на форуме   Ответить с цитированием
Старый 07.11.2015, 19:57   #2
Vanizma
Senior Member
 
Аватар для Vanizma
 
Регистрация: 30.04.2008
Адрес: Pskov
Сообщений: 4,139
Вес репутации: 4300/119
Vanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond repute
Отправить сообщение для Vanizma с помощью ICQ
По умолчанию Re: SNTP в либе TCP/IP

Цитата:
Сообщение от ampersant Посмотреть сообщение
не пойму почему никак не проходит дальше выделенного места

Код:
    switch(SNTPState)
    {
        case SM_HOME:
            // Obtain ownership of the DNS resolution module
            if(!DNSBeginUsage())
                break;
            LED1_IO=!LED1_IO;
            // Obtain the IP address associated with the server name
            DNSResolveROM((ROM BYTE*)NTP_SERVER, DNS_TYPE_A);
            dwTimer = TickGet();
            SNTPState = SM_NAME_RESOLVE;
            break;

        case SM_NAME_RESOLVE:
Чем это оно там так сильно занято, что ищет? Ни разу не резолвилось.

Почему то используя стандартные формулы преобразования обнуленные данные дают число
Thu Jan 1 18:12:15 1970

Кто нибудь поднимал NTP клиента в либе микрочипа?
SNTP.
Все работает отлично
2)Если ты использовал dns в своём коде - где то не отпустил его.
2) не прописан рабочий dns сервер и шлюз
__________________

Vanizma вне форума   Ответить с цитированием
Старый 07.11.2015, 19:59   #3
ampersant
Senior Member
 
Аватар для ampersant
 
Регистрация: 26.02.2008
Адрес: IgorV
Сообщений: 2,299
Вес репутации: 4442/102
ampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond repute
По умолчанию Re: SNTP в либе TCP/IP

Цитата:
Сообщение от Vanizma Посмотреть сообщение
SNTP.
Все работает отлично
Ну вот я подключил в проект SNTP c/h
Затем утилитой разрешил STACK_USE_SNTP_CLIENT

подключил <time.h>

Что ещё ему надо?

у меня DHCP клиентом он запускается. DNS и шлюз берет из роутера. Вроде бы не пользуюсь резолвингом.
ampersant на форуме   Ответить с цитированием
Старый 07.11.2015, 20:04   #4
ampersant
Senior Member
 
Аватар для ampersant
 
Регистрация: 26.02.2008
Адрес: IgorV
Сообщений: 2,299
Вес репутации: 4442/102
ampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond repute
По умолчанию Re: SNTP в либе TCP/IP

Код:
void HTTPPrint_time_NTP(void)
{
char *temp;

DWORD timeDW = SNTPGetUTCSeconds();    
tmy = gmtime(timeDW); //illegal conversion of integer to pointer


    temp=ctime(tmy); //conversion between pointer types

    
    
        TCPPutROMString(sktHTTP, temp); 


}
Это все использование, и почему то все время печатается
Код HTML:
Thu Jan  1 18:12:15 1970

Последний раз редактировалось ampersant; 07.11.2015 в 20:10. Причина: выделил warning которые при компиляции возникают
ampersant на форуме   Ответить с цитированием
Старый 07.11.2015, 20:26   #5
Vanizma
Senior Member
 
Аватар для Vanizma
 
Регистрация: 30.04.2008
Адрес: Pskov
Сообщений: 4,139
Вес репутации: 4300/119
Vanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond repute
Отправить сообщение для Vanizma с помощью ICQ
По умолчанию Re: SNTP в либе TCP/IP

Цитата:
Сообщение от ampersant Посмотреть сообщение
Код:
void HTTPPrint_time_NTP(void)
{
char *temp;

DWORD timeDW = SNTPGetUTCSeconds();    
tmy = gmtime(timeDW); //illegal conversion of integer to pointer


    temp=ctime(tmy); //conversion between pointer types

    
    
        TCPPutROMString(sktHTTP, temp); 


}
Это все использование, и почему то все время печатается
Код HTML:
Thu Jan  1 18:12:15 1970
Вот тут не знаю. После приёма секунд у меня переделано - я сразу обновляю часы реального времени. А стековый тик использую только как отсчет промежутков не критичных к погрешности.

Смотри что хранится в dwSNTPSeconds, и отладчиком посмотри докуда доходит.

Про DNS я имел ввиду, может в других сокетах udp или tcp используешь - он же один общий
__________________

Vanizma вне форума   Ответить с цитированием
Старый 07.11.2015, 20:37   #6
ampersant
Senior Member
 
Аватар для ampersant
 
Регистрация: 26.02.2008
Адрес: IgorV
Сообщений: 2,299
Вес репутации: 4442/102
ampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond repute
По умолчанию Re: SNTP в либе TCP/IP

Цитата:
Сообщение от Vanizma Посмотреть сообщение
Вот тут не знаю. После приёма секунд у меня переделано - я сразу обновляю часы реального времени. А стековый тик использую только как отсчет промежутков не критичных к погрешности.

Смотри что хранится в dwSNTPSeconds, и отладчиком посмотри докуда доходит.

Про DNS я имел ввиду, может в других сокетах udp или tcp используешь - он же один общий

херню понаписал тут, вот и мимо. Исправил

Хотя бы время пошло. только NTP молчит зараза.

Код:
void HTTPPrint_time_NTP(void)
{
char *temp;

DWORD timeDW;  

timeDW = SNTPGetUTCSeconds();    
  


    temp=ctime( (const time_t *)&timeDW);
    
    
        TCPPutROMString(sktHTTP, temp); 


}
ampersant на форуме   Ответить с цитированием
Старый 07.11.2015, 21:10   #7
Vanizma
Senior Member
 
Аватар для Vanizma
 
Регистрация: 30.04.2008
Адрес: Pskov
Сообщений: 4,139
Вес репутации: 4300/119
Vanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond repute
Отправить сообщение для Vanizma с помощью ICQ
По умолчанию Re: SNTP в либе TCP/IP

Цитата:
Сообщение от ampersant Посмотреть сообщение
херню понаписал тут, вот и мимо. Исправил

Хотя бы время пошло. только NTP молчит зараза.

Код:
void HTTPPrint_time_NTP(void)
{
char *temp;

DWORD timeDW;  

timeDW = SNTPGetUTCSeconds();    
  


    temp=ctime( (const time_t *)&timeDW);
    
    
        TCPPutROMString(sktHTTP, temp); 


}
Проверил сейчас на pool.ntp.org и ntp3.stratum2.ru.
Работает
__________________

Vanizma вне форума   Ответить с цитированием
Старый 07.11.2015, 21:14   #8
ampersant
Senior Member
 
Аватар для ampersant
 
Регистрация: 26.02.2008
Адрес: IgorV
Сообщений: 2,299
Вес репутации: 4442/102
ampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond repute
По умолчанию Re: SNTP в либе TCP/IP

Цитата:
Сообщение от Vanizma Посмотреть сообщение
Проверил сейчас на pool.ntp.org и ntp3.stratum2.ru.
Работает
Я нашел ошибку. У меня заработало но осадок...

Код:
static enum
    {
        SM_HOME = 0,
        SM_NAME_RESOLVE,
        SM_ARP_START_RESOLVE,
        SM_ARP_RESOLVE,
        SM_ARP_START_RESOLVE2,
        SM_ARP_RESOLVE2,
        SM_ARP_START_RESOLVE3,
        SM_ARP_RESOLVE3,
        SM_ARP_RESOLVE_FAIL,
        SM_UDP_SEND,
        SM_UDP_RECV,
        SM_SHORT_WAIT,
        SM_WAIT
    } SNTPState = SM_HOME;
казалось бы SNTPState изначально должен быть равен SM_HOME но компилятор не установил, или косяк какой то зверский, но SNTPState изначально равен 0xFF.

Дополнил switch(SNTPState) ещё одним разделом
default: SNTPState=SM_HOME;

Тогда оно сразу сработало! А какого хрена там был 0xFF ?

Последний раз редактировалось ampersant; 07.11.2015 в 21:26.
ampersant на форуме   Ответить с цитированием
Старый 07.11.2015, 21:27   #9
ampersant
Senior Member
 
Аватар для ampersant
 
Регистрация: 26.02.2008
Адрес: IgorV
Сообщений: 2,299
Вес репутации: 4442/102
ampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond repute
По умолчанию Re: SNTP в либе TCP/IP

Цитата:
Сообщение от Vanizma Посмотреть сообщение
Проверил сейчас на pool.ntp.org и ntp3.stratum2.ru.
Работает
Спасибо вселяешь уверенность. А плюсовать тебе форум не дает пока.
ampersant на форуме   Ответить с цитированием
Старый 07.11.2015, 21:44   #10
Vanizma
Senior Member
 
Аватар для Vanizma
 
Регистрация: 30.04.2008
Адрес: Pskov
Сообщений: 4,139
Вес репутации: 4300/119
Vanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond repute
Отправить сообщение для Vanizma с помощью ICQ
По умолчанию Re: SNTP в либе TCP/IP

Цитата:
Сообщение от ampersant Посмотреть сообщение
Я нашел ошибку. У меня заработало но осадок...

Код:
static enum
    {
        SM_HOME = 0,
        SM_NAME_RESOLVE,
        SM_ARP_START_RESOLVE,
        SM_ARP_RESOLVE,
        SM_ARP_START_RESOLVE2,
        SM_ARP_RESOLVE2,
        SM_ARP_START_RESOLVE3,
        SM_ARP_RESOLVE3,
        SM_ARP_RESOLVE_FAIL,
        SM_UDP_SEND,
        SM_UDP_RECV,
        SM_SHORT_WAIT,
        SM_WAIT
    } SNTPState = SM_HOME;
казалось бы SNTPState изначально должен быть равен SM_HOME но компилятор не установил, или косяк какой то зверский, но SNTPState изначально равен 0xFF.

Дополнил switch(SNTPState) ещё одним разделом
default: SNTPState=SM_HOME;

Тогда оно сразу сработало! А какого хрена там был 0xFF ?
Нет ли где перекрытия областей памяти, типа копирования массива и выход за пределы? В Pic18 контроля адресов- то нет.
__________________

Vanizma вне форума   Ответить с цитированием
Старый 07.11.2015, 22:22   #11
ampersant
Senior Member
 
Аватар для ampersant
 
Регистрация: 26.02.2008
Адрес: IgorV
Сообщений: 2,299
Вес репутации: 4442/102
ampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond repute
По умолчанию Re: SNTP в либе TCP/IP

Цитата:
Сообщение от Vanizma Посмотреть сообщение
Нет ли где перекрытия областей памяти, типа копирования массива и выход за пределы? В Pic18 контроля адресов- то нет.
я усвоил что хитеч иногда забывает инициализировать переменные. Для устранения надо запускать сначала функцию инит. Этот косяк мне раскрыл tester. Но не исключаю, что где то есть перехлест. Вероятность небольшая, но есть.
ampersant на форуме   Ответить с цитированием
Старый 07.11.2015, 23:09   #12
ampersant
Senior Member
 
Аватар для ampersant
 
Регистрация: 26.02.2008
Адрес: IgorV
Сообщений: 2,299
Вес репутации: 4442/102
ampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond repute
По умолчанию Re: SNTP в либе TCP/IP

вот косяк какой: сразу после стартапа до первой строки main уж лажа.
прилепил картинку. По адресу E06 ка раз располагается static SNTPState
Миниатюры
glitch.PNG  
ampersant на форуме   Ответить с цитированием
Старый 08.11.2015, 10:09   #13
Vanizma
Senior Member
 
Аватар для Vanizma
 
Регистрация: 30.04.2008
Адрес: Pskov
Сообщений: 4,139
Вес репутации: 4300/119
Vanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond repute
Отправить сообщение для Vanizma с помощью ICQ
По умолчанию Re: SNTP в либе TCP/IP

Цитата:
Сообщение от ampersant Посмотреть сообщение
вот косяк какой: сразу после стартапа до первой строки main уж лажа.
прилепил картинку. По адресу E06 ка раз располагается static SNTPState
Ну тут я не знаю, я пользуясь c18. Для стека тип памяти overlay ( иначе стека не хватает).
__________________

Vanizma вне форума   Ответить с цитированием
Старый 08.11.2015, 13:30   #14
ampersant
Senior Member
 
Аватар для ampersant
 
Регистрация: 26.02.2008
Адрес: IgorV
Сообщений: 2,299
Вес репутации: 4442/102
ampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond repute
По умолчанию Re: SNTP в либе TCP/IP

Цитата:
Сообщение от Vanizma Посмотреть сообщение
Ну тут я не знаю, я пользуясь c18. Для стека тип памяти overlay ( иначе стека не хватает).
я переписал в стиле как в других местах у микрочипа т.е. через #define все состояния, static вынес из функции и присвоил тоже вне функции, переменная резко улетела в обнуляемую секцию, и благополучно стала обнуляться. Для проверки, предустановку заменил с обнуления на любое другое значение - результат однозначный, переменная попадает в адрес E06, где получает 0xFF
В общем переписал вот так:
Код:
#define        SM_HOME                 0
#define        SM_NAME_RESOLVE         1
#define        SM_ARP_START_RESOLVE    2
#define        SM_ARP_RESOLVE          3
#define        SM_ARP_START_RESOLVE2   4
#define        SM_ARP_RESOLVE2         5
#define        SM_ARP_START_RESOLVE3   6
#define        SM_ARP_RESOLVE3         7
#define        SM_ARP_RESOLVE_FAIL     8
#define        SM_UDP_SEND             9     
#define        SM_UDP_RECV             10
#define        SM_SHORT_WAIT           11
#define        SM_WAIT                 12
        
    
BYTE SNTPState = SM_HOME;  
  
  
  
  
void SNTPClient(void)
{
    NTP_PACKET            pkt;
    WORD                 w;
    static NODE_INFO    Server;
    static DWORD        dwTimer;
    static UDP_SOCKET    MySocket;


    switch(SNTPState)
    {
        case SM_HOME:
            // Obtain ownership of the DNS resolution module
            if(!DNSBeginUsage())
                break;
            LED1_IO=!LED1_IO;
            // Obtain the IP address associated with the server name
            DNSResolveROM((ROM BYTE*)NTP_SERVER, DNS_TYPE_A);
            dwTimer = TickGet();
            SNTPState = SM_NAME_RESOLVE;
            break;

        case SM_NAME_RESOLVE:
            // Wait for DNS resolution to complete
            if(!DNSIsResolved(&Server.IPAddr)) 
            {
                if((TickGet() - dwTimer) > (5 * TICK_SECOND)) 
                {
                    DNSEndUsage();
                    dwTimer = TickGetDiv64K();
                    SNTPState = SM_SHORT_WAIT;
                }
                break;
            }
            
            // Obtain DNS resolution result
            if(!DNSEndUsage())
            {
                // No valid IP address was returned from the DNS 
                // server.  Quit and fail for a while if host is not valid.
                dwTimer = TickGetDiv64K();
                SNTPState = SM_SHORT_WAIT;
                break;
            }
            SNTPState = SM_ARP_START_RESOLVE;
            // No need to break

        case SM_ARP_START_RESOLVE:
        case SM_ARP_START_RESOLVE2:
        case SM_ARP_START_RESOLVE3:
            // Obtain the MAC address associated with the server's IP address 
            ARPResolve(&Server.IPAddr);
            dwTimer = TickGet();
            SNTPState++;
            break;

        case SM_ARP_RESOLVE:
        case SM_ARP_RESOLVE2:
        case SM_ARP_RESOLVE3:
            // Wait for the MAC address to finish being obtained
            if(!ARPIsResolved(&Server.IPAddr, &Server.MACAddr))
            {
                // Time out if too much time is spent in this state
                if(TickGet() - dwTimer > 1*TICK_SECOND)
                {
                    // Retransmit ARP request by going to next SM_ARP_START_RESOLVE state or fail by going to SM_ARP_RESOLVE_FAIL state.
                    SNTPState++;
                }
                break;
            }
            SNTPState = SM_UDP_SEND;
            break;

        case SM_ARP_RESOLVE_FAIL:
            // ARP failed after 3 tries, abort and wait for next time query
            dwTimer = TickGetDiv64K();
            SNTPState = SM_SHORT_WAIT;
            break;

        case SM_UDP_SEND:
            // Open up the sending UDP socket
            MySocket = UDPOpen(0, &Server, NTP_SERVER_PORT);
            if(MySocket == INVALID_UDP_SOCKET)
                break;

            // Make certain the socket can be written to
            if(!UDPIsPutReady(MySocket))
            {
                UDPClose(MySocket);
                break;
            }

            // Transmit a time request packet
            memset(&pkt, 0, sizeof(pkt));
            pkt.flags.versionNumber = 3;    // NTP Version 3
            pkt.flags.mode = 3;                // NTP Client
            pkt.orig_ts_secs = swapl(NTP_EPOCH);
            UDPPutArray((BYTE*) &pkt, sizeof(pkt));    
            UDPFlush();    
            
            dwTimer = TickGet();
            SNTPState = SM_UDP_RECV;        
            break;

        case SM_UDP_RECV:
            // Look for a response time packet
            if(!UDPIsGetReady(MySocket)) 
            {
                if((TickGet()) - dwTimer > NTP_REPLY_TIMEOUT)
                {
                    // Abort the request and wait until the next timeout period
                    UDPClose(MySocket);
                    dwTimer = TickGetDiv64K();
                    SNTPState = SM_SHORT_WAIT;
                    break;
                }
                break;
            }
            
            // Get the response time packet
            w = UDPGetArray((BYTE*) &pkt, sizeof(pkt));
            UDPClose(MySocket);
            dwTimer = TickGetDiv64K();
            SNTPState = SM_WAIT;

            // Validate packet size
            if(w != sizeof(pkt)) 
            {
                break;    
            }
            
            // Set out local time to match the returned time
            dwLastUpdateTick = TickGet();
            dwSNTPSeconds = swapl(pkt.tx_ts_secs) - NTP_EPOCH;
            // Do rounding.  If the partial seconds is > 0.5 then add 1 to the seconds count.
            if(((BYTE*)&pkt.tx_ts_fraq)[0] & 0x80)
                dwSNTPSeconds++;

            break;

        case SM_SHORT_WAIT:
            // Attempt to requery the NTP server after a specified NTP_FAST_QUERY_INTERVAL time (ex: 8 seconds) has elapsed.
            if(TickGetDiv64K() - dwTimer > (NTP_FAST_QUERY_INTERVAL/65536ull))
                SNTPState = SM_HOME;    
            break;

        case SM_WAIT:
            // Requery the NTP server after a specified NTP_QUERY_INTERVAL time (ex: 10 minutes) has elapsed.
            if(TickGetDiv64K() - dwTimer > (NTP_QUERY_INTERVAL/65536ull))
                SNTPState = SM_HOME;    

            break;
        default: SNTPState = SM_HOME;
    }
}
ampersant на форуме   Ответить с цитированием
Старый 14.11.2015, 21:42   #15
ampersant
Senior Member
 
Аватар для ampersant
 
Регистрация: 26.02.2008
Адрес: IgorV
Сообщений: 2,299
Вес репутации: 4442/102
ampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond repute
По умолчанию Re: SNTP в либе TCP/IP

Новая проблема, которая наступит в 2021 году. Софт от компилятора откажется работать, будет переноситься в 1970 год. Осталось то совсем не много.

Т.е. теперь проблемы в самом компиляторе. Возможно в других компиляторах (не хитеч) в этой функции уже написано что-то иное

Код:
time_t
mktime(struct tm *timeptr)
{
    time_t tt;
    
    if ((timeptr->tm_year < 70) || (timeptr->tm_year > 120))
    {
        tt = (time_t)-1;
    }
    else
    {
        tt = ymd_to_scalar(timeptr->tm_year + 1900, 
                           timeptr->tm_mon + 1, 
                           timeptr->tm_mday)
             - ymd_to_scalar(1970, 1, 1);
        tt = tt * 24 + timeptr->tm_hour;
        tt = tt * 60 + timeptr->tm_min;
        tt = tt * 60 + timeptr->tm_sec;
    }
    return tt;
}
ampersant на форуме   Ответить с цитированием
Старый 15.11.2015, 12:25   #16
Vanizma
Senior Member
 
Аватар для Vanizma
 
Регистрация: 30.04.2008
Адрес: Pskov
Сообщений: 4,139
Вес репутации: 4300/119
Vanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond repute
Отправить сообщение для Vanizma с помощью ICQ
По умолчанию Re: SNTP в либе TCP/IP

Цитата:
Сообщение от ampersant Посмотреть сообщение
Новая проблема, которая наступит в 2021 году. Софт от компилятора откажется работать, будет переноситься в 1970 год. Осталось то совсем не много.

Т.е. теперь проблемы в самом компиляторе. Возможно в других компиляторах (не хитеч) в этой функции уже написано что-то иное

Код:
time_t
mktime(struct tm *timeptr)
{
    time_t tt;
    
    if ((timeptr->tm_year < 70) || (timeptr->tm_year > 120))
    {
        tt = (time_t)-1;
    }
    else
    {
        tt = ymd_to_scalar(timeptr->tm_year + 1900, 
                           timeptr->tm_mon + 1, 
                           timeptr->tm_mday)
             - ymd_to_scalar(1970, 1, 1);
        tt = tt * 24 + timeptr->tm_hour;
        tt = tt * 60 + timeptr->tm_min;
        tt = tt * 60 + timeptr->tm_sec;
    }
    return tt;
}
не понял откуда этот кусок?
__________________

Vanizma вне форума   Ответить с цитированием
Старый 15.11.2015, 13:37   #17
ampersant
Senior Member
 
Аватар для ampersant
 
Регистрация: 26.02.2008
Адрес: IgorV
Сообщений: 2,299
Вес репутации: 4442/102
ampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond repute
По умолчанию Re: SNTP в либе TCP/IP

Цитата:
Сообщение от Vanizma Посмотреть сообщение
не понял откуда этот кусок?
hitech PICC18 STD 9.51

в папке хедеров <time.h> В ней расписаны имеющиеся функции и они разбросаны по ctime.c mktime.c и т.д.

конкретно этот кусок из mktime.c папка source
ampersant на форуме   Ответить с цитированием
Старый 15.11.2015, 13:48   #18
ampersant
Senior Member
 
Аватар для ampersant
 
Регистрация: 26.02.2008
Адрес: IgorV
Сообщений: 2,299
Вес репутации: 4442/102
ampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond repute
По умолчанию Re: SNTP в либе TCP/IP

Цитата:
Сообщение от ampersant Посмотреть сообщение
hitech PICC18 STD 9.51

в папке хедеров <time.h> В ней расписаны имеющиеся функции и они разбросаны по ctime.c mktime.c и т.д.

конкретно этот кусок из mktime.c папка source
А этот кусочек из билдера 6. из функции _totalsec

Код:
 if (year < 70 || year > 138)
        return ((time_t) -1);
Т.е. там было до 38 года. Ну как бы мне уже 38-й год может быть недоступен. А вот 20-й совсем рядом.
ampersant на форуме   Ответить с цитированием
Старый 15.11.2015, 13:56   #19
Vanizma
Senior Member
 
Аватар для Vanizma
 
Регистрация: 30.04.2008
Адрес: Pskov
Сообщений: 4,139
Вес репутации: 4300/119
Vanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond repute
Отправить сообщение для Vanizma с помощью ICQ
По умолчанию Re: SNTP в либе TCP/IP

Цитата:
Сообщение от ampersant Посмотреть сообщение
А этот кусочек из билдера 6. из функции _totalsec

Код:
 if (year < 70 || year > 138)
        return ((time_t) -1);
Т.е. там было до 38 года. Ну как бы мне уже 38-й год может быть недоступен. А вот 20-й совсем рядом.
понятно.
я не пользуюсь такими библиотеками. Только то что сам или в интернете исходник, потом проверяю.
__________________

Vanizma вне форума   Ответить с цитированием
Старый 15.11.2015, 14:03   #20
ampersant
Senior Member
 
Аватар для ampersant
 
Регистрация: 26.02.2008
Адрес: IgorV
Сообщений: 2,299
Вес репутации: 4442/102
ampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond repute
По умолчанию Re: SNTP в либе TCP/IP

Цитата:
Сообщение от Vanizma Посмотреть сообщение
понятно.
я не пользуюсь такими библиотеками. Только то что сам или в интернете исходник, потом проверяю.
С30 от микрочипа не раскрыл тайну как реализовано и реализовано ли вообще. Есть только хедер.

Если счетчика секунд хватает, тогда пофигу на ограничения. можно ручками поправить исходник, перенести рамки на другой участок годов и забыть. Причем действительно взяв куски из библиотечных и перетащить себе поправив как надо. Видимо так и сделаю.
ampersant на форуме   Ответить с цитированием
Старый 16.11.2015, 18:18   #21
ampersant
Senior Member
 
Аватар для ampersant
 
Регистрация: 26.02.2008
Адрес: IgorV
Сообщений: 2,299
Вес репутации: 4442/102
ampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond repute
По умолчанию Re: SNTP в либе TCP/IP

Цитата:
Сообщение от ampersant Посмотреть сообщение
А этот кусочек из билдера 6. из функции _totalsec

Код:
 if (year < 70 || year > 138)
        return ((time_t) -1);
Т.е. там было до 38 года. Ну как бы мне уже 38-й год может быть недоступен. А вот 20-й совсем рядом.

Кстати >138 это правильное число. Если его превысить - там такая абракадабра начинается...
ampersant на форуме   Ответить с цитированием
Старый 16.11.2015, 18:28   #22
ampersant
Senior Member
 
Аватар для ampersant
 
Регистрация: 26.02.2008
Адрес: IgorV
Сообщений: 2,299
Вес репутации: 4442/102
ampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond repute
По умолчанию Re: SNTP в либе TCP/IP

Следующий вопрос, вдруг опять изобретаю велосипед и у кого-то есть красивый исходник:

получая периодически время по NTP внутренние часы получается будут давать скачки в плюс или в минус. А мне надо непрерывное время, когда есть каждая секунда, без пропусков и повторов. Время будет запрашиваться достаточно часто, но сервер NTP будет синхронизироваться не достаточно часто и могут быть рывки времени.
Я конечно сам напишу, будет работать. Но вот тема про аппроксимацию, когда я нашел ответ оказалось, что мой велосипед... В общем не очень приятная история. Вещь то стандартная.
ampersant на форуме   Ответить с цитированием
Старый 13.12.2016, 10:42   #23
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Возраст: 38
Сообщений: 4,444
Вес репутации: 4370/120
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: SNTP в либе TCP/IP

Здравствуйте, товарищи!
Не стал создавать новую тему, а то отвечать особо некому, сумасшедших почти нет.
Разбираю все доступные в исходниках SNTP-клиенты. В последней версии MLA от Microchip есть SNTP-клиент
Цитата:
mla\v2016_08_08\framework\tcpip\sntp.h
mla\v2016_08_08\framework\tcpip\src\sntp.c
простенький такой. Посмотрел я его код и увидел, что это уникастный SNTP-клиент, он отправляет NTP-запрос к одному из публичных NTP-серверов, находящихся в Интернете. В ответном сообщении приходят метки времени, одну из меток времени TransmitTimestamp (время, когда NTP-ответ покинул NTP-сервер) SNTP-клиент использует как эталонную.
В заголовочном файле этого SNTP-клиента есть три функции
Цитата:
void SNTPInit(void);
void SNTPClient(void);
uint32_t SNTPGetUTCSeconds(void);
Видно, что клиент возвращает время в UnixTime (время с точностью до секунды). Однако, протокол SNTP позволяет получить точность установки времени 1-50 мс от публичного NTP-сервера в Интернете, и до 0,2 мс от NTP-сервера, находящегося в локальной сети. А сама метка времени NTP timestamp состоит из двух счетчиков:
1) счетчик секнд с 1900 года
2) счетчик долей секунд в формате Fixed32.

Неужели все пользуются таким простым уникастным клиентом и хватает точности UnixTime (1 секунда)? Я думал, что у SNTP-клиента есть поддержка уникастного и мультикастного режима, думал, что есть учет циклической задержки. А тут просто: запрос - ответ.

И еще вопрос: а как дела с SNTP-клиентом в Microchip Harmony?
У меня требования к SNTP 0,01 секунды.

PS: Встречаются гуру, которые пишут свои SNTP-клиенты, еще более куцые, и дополняют их кодом, дублирующим стандартные функции стандартной библиотеки.
__________________
Прогресс неизбежен.

Последний раз редактировалось Pridnya; 13.12.2016 в 10:51.
Pridnya вне форума   Ответить с цитированием
Старый 15.12.2016, 14:19   #24
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Возраст: 38
Сообщений: 4,444
Вес репутации: 4370/120
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: SNTP в либе TCP/IP

Здравствуйте, товарищи!
Удивительное дело, но почти за 10 лет SNTP-клиент Microchip практически не изменился.
Microchip Solutions v2010-10-19\Microchip\TCPIP Stack\sntp.c // клиент 2007 года
C:\microchip\mla\v2016_08_08\framework\tcpip\src\s ntp.c // практически тот же код, чуть структуру изменили.
Всё та же 1 секунда.
И еще строки убрали об авторах, дате изменений.
Цитата:
* Author Date Comment
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~
* Darren Wenn 03/08/07 Original
* Howard Schlunder 06/20/07 Modified for release
************************************************** ******************/
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 15.12.2016, 14:33   #25
ampersant
Senior Member
 
Аватар для ampersant
 
Регистрация: 26.02.2008
Адрес: IgorV
Сообщений: 2,299
Вес репутации: 4442/102
ampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond repute
По умолчанию Re: SNTP в либе TCP/IP

да там почти ничего и не менялось, как был ARP через одну жопу, без кэш - так и осталось. Это к примеру.
ampersant на форуме   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализация SNMP TRAP Microchip TCP/IP Stack v5.42 Sich1981 Cетевые протоколы и технологии 7 16.04.2013 14:51
TCP/IP stack Vint Продукция MICROCHIP 3 31.08.2010 14:08
TCP/IP тестер (из TCP/IP либы отровано) _WIL_ Продукция MICROCHIP 24 21.02.2010 01:56
TCP/IP stack_v4.55+SNTP PIC32MX Vint Продукция MICROCHIP 2 26.02.2009 12:49
TCP/IP Stack v4.18 Vint Продукция MICROCHIP 0 01.04.2008 14:51


Часовой пояс GMT +3, время: 11:29.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd. Перевод: zCarot