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

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

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

Ответ
 
Опции темы Опции просмотра
Старый 15.02.2013, 11:58   #51
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: Нужна помощь с TCP/IP

гуру си программирования - ответьте плиз, а то лучше мне сейчас оказаться неправым... чем потом

Цитата:
Попутно вопрос к спецам по си.
в SNMP v3 используется куча (heap) (в нескольких местах).... но!, я еще испольльзую TNKernel, TCP стек вынесен в отдельную задачу... больше нигде (в других задачах) куча не используется.
Можно быть уверенным что каши с данными не получится? Просто с кучами дела не имел особо.
Блоки фиксированного размера не получится использовать, поскольку размер не известен... а память впустую выделять нет средств.
__________________

Vanizma вне форума   Ответить с цитированием
Старый 15.02.2013, 12:21   #52
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: Нужна помощь с TCP/IP

Цитата:
Сообщение от FlashBack Посмотреть сообщение
Да наоборот. 5-9 лямов до 100 PPM... (кстати долго искал, что же такое PPM. Оказалось количество отказов на миллион штук).
ppm - parts per million Т.е. миллионных долей от чего-нибудь.
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 15.02.2013, 12:28   #53
FlashBack
Senior Member
 
Аватар для FlashBack
 
Регистрация: 16.02.2010
Адрес: Грузия, Тбилиси
Возраст: 33
Сообщений: 2,233
Вес репутации: 2337/74
FlashBack has a reputation beyond reputeFlashBack has a reputation beyond reputeFlashBack has a reputation beyond reputeFlashBack has a reputation beyond reputeFlashBack has a reputation beyond reputeFlashBack has a reputation beyond reputeFlashBack has a reputation beyond reputeFlashBack has a reputation beyond reputeFlashBack has a reputation beyond reputeFlashBack has a reputation beyond reputeFlashBack has a reputation beyond repute
По умолчанию Re: Нужна помощь с TCP/IP

Цитата:
Сообщение от Pridnya Посмотреть сообщение
ppm - parts per million Т.е. миллионных долей от чего-нибудь.
Ну да, но в контексте Fail Rate PPM, это будет количество сдохших деталей на миллион. Как то так... Или нет?
FlashBack вне форума   Ответить с цитированием
Старый 15.02.2013, 19:54   #54
vitalka
Super Moderator
 
Аватар для vitalka
 
Регистрация: 19.03.2007
Адрес: Львов
Возраст: 42
Сообщений: 3,334
Вес репутации: 2341/95
vitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond repute
По умолчанию Re: Нужна помощь с TCP/IP

Цитата:
Сообщение от Pridnya Посмотреть сообщение
ppm - parts per million
не совсем так
pro pro mille
vitalka вне форума   Ответить с цитированием
Старый 15.02.2013, 23:09   #55
vitalka
Super Moderator
 
Аватар для vitalka
 
Регистрация: 19.03.2007
Адрес: Львов
Возраст: 42
Сообщений: 3,334
Вес репутации: 2341/95
vitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond repute
По умолчанию Re: Нужна помощь с TCP/IP

Цитата:
Сообщение от Vanizma Посмотреть сообщение
в SNMP v3 используется куча (heap) (в нескольких местах).... но!, я еще испольльзую TNKernel, TCP стек вынесен в отдельную задачу... больше нигде (в других задачах) куча не используется.
Можно быть уверенным что каши с данными не получится? Просто с кучами дела не имел особо.
Блоки фиксированного размера не получится использовать, поскольку размер не известен... а память впустую выделять нет средств.
так рецепт прост:
в зависимости от реализации
- корректно запрашивать и освобождать ресурс
- перед использованием проверять на корректность указатель на ресурс
- использовать мьютексы для доступа к выделенной памяти из разных задач
vitalka вне форума   Ответить с цитированием
Старый 16.02.2013, 00:49   #56
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: Нужна помощь с TCP/IP

Цитата:
Сообщение от vitalka Посмотреть сообщение
так рецепт прост:
в зависимости от реализации
- корректно запрашивать и освобождать ресурс
- перед использованием проверять на корректность указатель на ресурс
- использовать мьютексы для доступа к выделенной памяти из разных задач
указатель только на null проверяется там....
настолько понимаю, tnkernel не использует кучу... или не так?

уж больно не хочется стек переделывать....
__________________

Vanizma вне форума   Ответить с цитированием
Старый 16.02.2013, 11:45   #57
vitalka
Super Moderator
 
Аватар для vitalka
 
Регистрация: 19.03.2007
Адрес: Львов
Возраст: 42
Сообщений: 3,334
Вес репутации: 2341/95
vitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond reputevitalka has a reputation beyond repute
По умолчанию Re: Нужна помощь с TCP/IP

Цитата:
Сообщение от Vanizma Посмотреть сообщение
указатель только на null проверяется там....
настолько понимаю, tnkernel не использует кучу... или не так?

уж больно не хочется стек переделывать....
tnkernel кучу не использует
место под задачи и стеки под них задаются статически

если кучу кроме стека никто пользовать не будет, то ничего переделывать не нужно

а вот если кто-то еще захочет кучей пользоваться, то нужно будет функции выделения и освобождения обворачивать мьютексом или критической секцией
vitalka вне форума   Ответить с цитированием
Старый 16.02.2013, 12:35   #58
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: Нужна помощь с TCP/IP

Цитата:
Сообщение от vitalka Посмотреть сообщение
tnkernel кучу не использует
место под задачи и стеки под них задаются статически

если кучу кроме стека никто пользовать не будет, то ничего переделывать не нужно

а вот если кто-то еще захочет кучей пользоваться, то нужно будет функции выделения и освобождения обворачивать мьютексом или критической секцией
понятно.. я так и предполагал, хотелось уверенности.
спс.

P.S. а ppm всё-таки это или parts per million или points per million , в зависимости от применение... хотя, и то и другое по сути одно и то же
__________________

Vanizma вне форума   Ответить с цитированием
Старый 18.02.2013, 11:56   #59
AlexKid
Senior Member
 
Регистрация: 27.02.2007
Сообщений: 133
Вес репутации: 142/42
AlexKid will become famous soon enoughAlexKid will become famous soon enough
По умолчанию Re: Нужна помощь с TCP/IP

Ув. Гуру!

Подскажите в следующем вопросе.

Есть пример стека от Microchip. Необходимо на страничке настройки сетевых параметров (MCHPBOARD/index.html) изменять еще несколько параметров. Например "интервал времени между запросами в секундах". Эту переменную нужно сохранять в памяти.

Свою переменную я всунул в структуру APP_CONFIG:
Код:
typedef struct __attribute__((__packed__)) appConfigStruct 
{
    IP_ADDR        MyIPAddr;               // IP address
    IP_ADDR        MyMask;                 // Subnet mask
    IP_ADDR        MyGateway;              // Default Gateway
    IP_ADDR        PrimaryDNSServer;       // Primary DNS Server
    IP_ADDR        SecondaryDNSServer;     // Secondary DNS Server
    IP_ADDR        DefaultIPAddr;          // Default IP address
    IP_ADDR        DefaultMask;            // Default subnet mask
    BYTE        NetBIOSName[16];        // NetBIOS name
    DWORD        RatesInterval;            // query interval in second
    struct
    {
        unsigned char : 6;
        unsigned char bIsDHCPEnabled : 1;
        unsigned char bInConfigMode : 1;
    } Flags;                            // Flag structure
    MAC_ADDR    MyMACAddr;              // Application MAC address
......
В callback функции написал:
Код:
void HTTPPrint_rates_interval(void)
{
    BYTE tmpStringRI[6];
    ultoa(AppConfig.RatesInterval, tmpStringRI);
    TCPPutString(sktHTTP,tmpStringRI);
    return;
}
Обработка POST запроса
Код:
.....
             else if(!strcmppgm2ram((char*)curHTTP.data, (ROM char*)"dhcp"))
        {// Read new DHCP Enabled flag
            if(curHTTP.data[6] == '1')
                newAppConfig.Flags.bIsDHCPEnabled = 1;
        }
        else if(!strcmppgm2ram((char*)curHTTP.data, (ROM char*)"rates-interval"))
        {
            
            newAppConfig.RatesInterval = atol(curHTTP.data[6]);
            memcpy((void*)newAppConfig.RatesInterval, (void*)curHTTP.data+6, 5);
        }
    }
    // All parsing complete!  Save new settings and force a reboot
    SaveAppConfig(&newAppConfig);
.....
Как я понял вся структура сохраняется в EEPROM функцией
Код:
SaveAppConfig(&newAppConfig);
В ней вызывается XEEWriteArray(...)...

А вот где все параметры извлекаются из EEPROM я не нашел. На примере с NetBIOSName или MyIPAddr ничего не понял.
Растолкуйте как извлекаются данные из памяти или как лучше сделать мне....

Спасибо.
AlexKid вне форума   Ответить с цитированием
Старый 18.02.2013, 12:01   #60
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: Нужна помощь с TCP/IP

при запуске из памяти в ram копируются.
__________________

Vanizma вне форума   Ответить с цитированием
Старый 18.02.2013, 12:07   #61
AlexKid
Senior Member
 
Регистрация: 27.02.2007
Сообщений: 133
Вес репутации: 142/42
AlexKid will become famous soon enoughAlexKid will become famous soon enough
По умолчанию Re: Нужна помощь с TCP/IP

Цитата:
Сообщение от Vanizma Посмотреть сообщение
при запуске из памяти в ram копируются.
Нашел только где дефаулты пишутся, а где потом заменяются на значения с памяти .....?
AlexKid вне форума   Ответить с цитированием
Старый 18.02.2013, 12:27   #62
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: Нужна помощь с TCP/IP

Цитата:
Сообщение от AlexKid Посмотреть сообщение
Нашел только где дефаулты пишутся, а где потом заменяются на значения с памяти .....?
а там же должно быть, вернее даже так: если не выполняется признак что в памяти лежат валидные данные (как раз вызывается функция чтения из носителя), то вызываются дефолтные данные.
А если признак выполняется, то данные уже на месте и ничего больше тут делать не надо.

Почему не конкретно написал где и как и откуда - все зависит от того где оно хранится и как читается. Я вот в памяти программ вообще хранить решил. меняется крайне редко, настроил и забыл. Если надо часто чтобы менялось надо подумать об DHCP или на худой конец внешние носители.

как то так
Код:
static ROM BYTE SerializedMACAddress[6] = {MY_DEFAULT_MAC_BYTE1, MY_DEFAULT_MAC_BYTE2, MY_DEFAULT_MAC_BYTE3, MY_DEFAULT_MAC_BYTE4, MY_DEFAULT_MAC_BYTE5, MY_DEFAULT_MAC_BYTE6};

static void InitAppConfig(void)                                                       //конфигурирование интерфейса платы
{
  //если в памяти есть метка - чтение конфигурации из флешки
 if( Config_Rd((BYTE *)&AppConfig)!= 1 ) // если не прочиталось                                                       
  {  //память чистая
    //конфигурация по умолчанию
    AppConfig.Flags.bIsDHCPEnabled = FALSE;
    AppConfig.Flags.bInConfigMode = TRUE;
    memcpypgm2ram((void*)&AppConfig.MyMACAddr, (ROM void*)SerializedMACAddress, sizeof(AppConfig.MyMACAddr));
    AppConfig.MyIPAddr.Val = MY_DEFAULT_IP_ADDR_BYTE1 | MY_DEFAULT_IP_ADDR_BYTE2<<8ul | MY_DEFAULT_IP_ADDR_BYTE3<<16ul | MY_DEFAULT_IP_ADDR_BYTE4<<24ul;
    AppConfig.DefaultIPAddr.Val = AppConfig.MyIPAddr.Val;
    AppConfig.MyMask.Val = MY_DEFAULT_MASK_BYTE1 | MY_DEFAULT_MASK_BYTE2<<8ul | MY_DEFAULT_MASK_BYTE3<<16ul | MY_DEFAULT_MASK_BYTE4<<24ul;
    AppConfig.DefaultMask.Val = AppConfig.MyMask.Val;
    AppConfig.MyGateway.Val = MY_DEFAULT_GATE_BYTE1 | MY_DEFAULT_GATE_BYTE2<<8ul | MY_DEFAULT_GATE_BYTE3<<16ul | MY_DEFAULT_GATE_BYTE4<<24ul;
    AppConfig.PrimaryDNSServer.Val = MY_DEFAULT_PRIMARY_DNS_BYTE1 | MY_DEFAULT_PRIMARY_DNS_BYTE2<<8ul  | MY_DEFAULT_PRIMARY_DNS_BYTE3<<16ul  | MY_DEFAULT_PRIMARY_DNS_BYTE4<<24ul;
    AppConfig.SecondaryDNSServer.Val = MY_DEFAULT_SECONDARY_DNS_BYTE1 | MY_DEFAULT_SECONDARY_DNS_BYTE2<<8ul  | MY_DEFAULT_SECONDARY_DNS_BYTE3<<16ul  | MY_DEFAULT_SECONDARY_DNS_BYTE4<<24ul;
    // Load the default NetBIOS Host Name
    memcpypgm2ram(AppConfig.NetBIOSName, (ROM void*)MY_DEFAULT_HOST_NAME, 15);
    FormatNetBIOSName(AppConfig.NetBIOSName);

    AppConfig.ServerIP = SERVER_DEFAULT_IP_BYTE;

    //записывать при старте не буем, только если будет специально требоваться
    //Config_Wr((BYTE*)&AppConfig); // запишем предустановленную конфигурацию
    LED1_IO=1; // данные не прочитаны - красный
  }
  else LED0_IO=1; // данные прочитаны - зеленый
}

Последний раз редактировалось ampersant; 18.02.2013 в 12:33.
ampersant вне форума   Ответить с цитированием
Старый 18.02.2013, 12:48   #63
AlexKid
Senior Member
 
Регистрация: 27.02.2007
Сообщений: 133
Вес репутации: 142/42
AlexKid will become famous soon enoughAlexKid will become famous soon enough
По умолчанию Re: Нужна помощь с TCP/IP

Что такое "Config_Rd"?

У меня вот так:
Код:
static void InitAppConfig(void)
{
#if defined(EEPROM_CS_TRIS) || defined(SPIFLASH_CS_TRIS)
    unsigned char vNeedToSaveDefaults = 0;
#endif
    
    while(1)
    {
        // Start out zeroing all AppConfig bytes to ensure all fields are 
        // deterministic for checksum generation
        memset((void*)&AppConfig, 0x00, sizeof(AppConfig));
        
        AppConfig.Flags.bIsDHCPEnabled = TRUE;
        AppConfig.Flags.bInConfigMode = TRUE;
        memcpypgm2ram((void*)&AppConfig.MyMACAddr, (ROM void*)SerializedMACAddress, sizeof(AppConfig.MyMACAddr));
//        {
//            _prog_addressT MACAddressAddress;
//            MACAddressAddress.next = 0x157F8;
//            _memcpy_p2d24((char*)&AppConfig.MyMACAddr, MACAddressAddress, sizeof(AppConfig.MyMACAddr));
//        }
        
        AppConfig.MyIPAddr.Val = MY_DEFAULT_IP_ADDR_BYTE1 | MY_DEFAULT_IP_ADDR_BYTE2<<8ul | MY_DEFAULT_IP_ADDR_BYTE3<<16ul | MY_DEFAULT_IP_ADDR_BYTE4<<24ul;
        AppConfig.DefaultIPAddr.Val = AppConfig.MyIPAddr.Val;
        AppConfig.MyMask.Val = MY_DEFAULT_MASK_BYTE1 | MY_DEFAULT_MASK_BYTE2<<8ul | MY_DEFAULT_MASK_BYTE3<<16ul | MY_DEFAULT_MASK_BYTE4<<24ul;
        AppConfig.DefaultMask.Val = AppConfig.MyMask.Val;
        AppConfig.MyGateway.Val = MY_DEFAULT_GATE_BYTE1 | MY_DEFAULT_GATE_BYTE2<<8ul | MY_DEFAULT_GATE_BYTE3<<16ul | MY_DEFAULT_GATE_BYTE4<<24ul;
        AppConfig.PrimaryDNSServer.Val = MY_DEFAULT_PRIMARY_DNS_BYTE1 | MY_DEFAULT_PRIMARY_DNS_BYTE2<<8ul  | MY_DEFAULT_PRIMARY_DNS_BYTE3<<16ul  | MY_DEFAULT_PRIMARY_DNS_BYTE4<<24ul;
        AppConfig.SecondaryDNSServer.Val = MY_DEFAULT_SECONDARY_DNS_BYTE1 | MY_DEFAULT_SECONDARY_DNS_BYTE2<<8ul  | MY_DEFAULT_SECONDARY_DNS_BYTE3<<16ul  | MY_DEFAULT_SECONDARY_DNS_BYTE4<<24ul;
//        AppConfig.RatesInterval = MY_DEFAULT_RATES_INTERVAL;
AlexKid вне форума   Ответить с цитированием
Старый 18.02.2013, 12:51   #64
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
По умолчанию не будет работать!

Цитата:
Сообщение от AlexKid Посмотреть сообщение
Ув. Гуру!

Подскажите в следующем вопросе.




Код:
void HTTPPrint_rates_interval(void)
{
    BYTE tmpStringRI[6];
    ultoa(AppConfig.RatesInterval, tmpStringRI);
    TCPPutString(sktHTTP,tmpStringRI);
    return;
}
Обработка POST запроса
Код:
.....
             else if(!strcmppgm2ram((char*)curHTTP.data, (ROM char*)"dhcp"))
        {// Read new DHCP Enabled flag
            if(curHTTP.data[6] == '1')
                newAppConfig.Flags.bIsDHCPEnabled = 1;
        }
        else if(!strcmppgm2ram((char*)curHTTP.data, (ROM char*)"rates-interval"))
        {
            
            newAppConfig.RatesInterval = atol(curHTTP.data[6]);
            memcpy((void*)newAppConfig.RatesInterval, (void*)curHTTP.data+6, 5);
        }
    }
    // All parsing complete!  Save new settings and force a reboot
    SaveAppConfig(&newAppConfig);
.....
Как я понял вся структура сохраняется в EEPROM функцией
Код:
SaveAppConfig(&newAppConfig);
В ней вызывается XEEWriteArray(...)...

А вот где все параметры извлекаются из EEPROM я не нашел. На примере с NetBIOSName или MyIPAddr ничего не понял.
Растолкуйте как извлекаются данные из памяти или как лучше сделать мне....

Спасибо.
выделил что не правильно на мой взгляд. Либа поддерживает не более 4 знаков.
ampersant вне форума   Ответить с цитированием
Старый 18.02.2013, 13:02   #65
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: Нужна помощь с TCP/IP

Цитата:
Сообщение от AlexKid Посмотреть сообщение
Что такое "Config_Rd"?

У меня вот так:
Так оно ради Бога. Я мог не оформлять её функцией, эта функция написана давно и не мной, а предназначается для чтения конфигов с флэшки, из памяти программ из внешней микрухи или вообще получается из другого МК

А можно поступить проще, не оформлять это место функцией, а тупо копировать из памяти программ как константу, но изменять как раз память программ т.е. саму эту константу. погляди куда запись ведется. И как оформлена структура (нет ли там каких причуд по укладке структуры конфига по конкретному адресу в памяти программ)
ampersant вне форума   Ответить с цитированием
Старый 18.02.2013, 14:06   #66
AlexKid
Senior Member
 
Регистрация: 27.02.2007
Сообщений: 133
Вес репутации: 142/42
AlexKid will become famous soon enoughAlexKid will become famous soon enough
По умолчанию Re: Нужна помощь с TCP/IP

Процедура записи данных
Код:
#if defined(EEPROM_CS_TRIS) || defined(SPIFLASH_CS_TRIS)
void SaveAppConfig(const APP_CONFIG *ptrAppConfig)
{
    NVM_VALIDATION_STRUCT NVMValidationStruct;

    // Ensure adequate space has been reserved in non-volatile storage to 
    // store the entire AppConfig structure.  If you get stuck in this while(1) 
    // trap, it means you have a design time misconfiguration in TCPIPConfig.h.
    // You must increase MPFS_RESERVE_BLOCK to allocate more space.
    #if defined(STACK_USE_MPFS2)
        if(sizeof(NVMValidationStruct) + sizeof(AppConfig) > MPFS_RESERVE_BLOCK)
            while(1);
    #endif

    // Get proper values for the validation structure indicating that we can use 
    // these EEPROM/Flash contents on future boot ups
    NVMValidationStruct.wOriginalChecksum = wOriginalAppConfigChecksum;
    NVMValidationStruct.wCurrentChecksum = CalcIPChecksum((BYTE*)ptrAppConfig, sizeof(APP_CONFIG));
    NVMValidationStruct.wConfigurationLength = sizeof(APP_CONFIG);

    // Write the validation struct and current AppConfig contents to EEPROM/Flash
    #if defined(EEPROM_CS_TRIS)
        XEEBeginWrite(0x0000);
        XEEWriteArray((BYTE*)&NVMValidationStruct, sizeof(NVMValidationStruct));
        XEEWriteArray((BYTE*)ptrAppConfig, sizeof(APP_CONFIG));
    #else
        SPIFlashBeginWrite(0x0000);
        SPIFlashWriteArray((BYTE*)&NVMValidationStruct, sizeof(NVMValidationStruct));
        SPIFlashWriteArray((BYTE*)ptrAppConfig, sizeof(APP_CONFIG));
    #endif
}
Никогда не сталкивался с записью структуры в EEPROM. Поэтому большая часть того, о чем вы меня спрашиваете для меня не известна.

Я все больше побайтно в определенную ячейку привык. А тут....
Даже не нашел где можно посмотреть куда что пишется....
AlexKid вне форума   Ответить с цитированием
Старый 18.02.2013, 14:16   #67
AlexKid
Senior Member
 
Регистрация: 27.02.2007
Сообщений: 133
Вес репутации: 142/42
AlexKid will become famous soon enoughAlexKid will become famous soon enough
По умолчанию Re: не будет работать!

Цитата:
Сообщение от ampersant Посмотреть сообщение
выделил что не правильно на мой взгляд. Либа поддерживает не более 4 знаков.
Переделал.
AlexKid вне форума   Ответить с цитированием
Старый 18.02.2013, 15:51   #68
AlexKid
Senior Member
 
Регистрация: 27.02.2007
Сообщений: 133
Вес репутации: 142/42
AlexKid will become famous soon enoughAlexKid will become famous soon enough
По умолчанию Re: Нужна помощь с TCP/IP

Вот, что у меня получилось:
Код:
.....
        else if(!strcmppgm2ram((char*)curHTTP.data, (ROM char*)"dhcp"))
        {// Read new DHCP Enabled flag
            if(curHTTP.data[6] == '1')
                newAppConfig.Flags.bIsDHCPEnabled = 1;
        }
        else if(!strcmppgm2ram((char*)curHTTP.data, (ROM char*)"rtin"))
        {
            newAppConfig.RatesInterval = atol(curHTTP.data+6);
//            newAppConfig.RatesInterval = 200;
        }
......
Данные сохраняются (так и не понял где они читаются).
Не понятно почему нужно ставить "
Код:
curHTTP.data+6
"
от длины переменной не зависит
Код:
        // Parse the value that was read
        if(!strcmppgm2ram((char*)curHTTP.data, (ROM char*)"ip"))
        {// Read new static IP Address
            if(!StringToIPAddress(curHTTP.data+6, &newAppConfig.MyIPAddr))
                goto ConfigFailure;
                
            newAppConfig.DefaultIPAddr.Val = newAppConfig.MyIPAddr.Val;
        }
AlexKid вне форума   Ответить с цитированием
Старый 18.02.2013, 16:04   #69
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: не будет работать!

Цитата:
Сообщение от ampersant Посмотреть сообщение
выделил что не правильно на мой взгляд. Либа поддерживает не более 4 знаков.
это где такое прочитал?
У них и в примере больше...
Код:
<form method="post" action="/email.htm">
  To: <input type="text" name="to" maxlength="50" /><br />
  Subject: <input type="text" name="subject" maxlength="50" /><br />
  Message:<br />
  <textarea name="msg" rows="6"></textarea><br />
  <input type="submit" value="Send Message" /></div>
</form>
...
            // Save "subject" values to curHTTP.data[50:99]
            else if(!strcmppgm2ram((char*)temp, (ROM char*)"subject"))
                dest = curHTTP.data + 50;
да и не нашел нигде про это
__________________

Vanizma вне форума   Ответить с цитированием
Старый 18.02.2013, 16:37   #70
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: не будет работать!

Цитата:
Сообщение от Vanizma Посмотреть сообщение
это где такое прочитал?
У них и в примере больше...
Код:
<form method="post" action="/email.htm">
  To: <input type="text" name="to" maxlength="50" /><br />
  Subject: <input type="text" name="subject" maxlength="50" /><br />
  Message:<br />
  <textarea name="msg" rows="6"></textarea><br />
  <input type="submit" value="Send Message" /></div>
</form>
...
            // Save "subject" values to curHTTP.data[50:99]
            else if(!strcmppgm2ram((char*)temp, (ROM char*)"subject"))
                dest = curHTTP.data + 50;
да и не нашел нигде про это
давай аргументированно поговорим на эту тему, если ты убедишь скажу "ок". Если нет - тогда ты говори "ок"

итак:
Код:
if(!strcmppgm2ram((char*)curHTTP.data, (ROM char*)"ip"))
         {// Read new static IP Address
             if(!StringToIPAddress(curHTTP.data+6, &newAppConfig.MyIPAddr))
                 goto ConfigFailure;
                              newAppConfig.DefaultIPAddr.Val = newAppConfig.MyIPAddr.Val;
         }
использование curHTTP.data, и curHTTP.data+6 в одном витке РТОС требует чтобы по адресу curHTTP.data+5 стоял бы нуль терминатор
на буквы остается всего 4 байта.

В твоем же примере цифра явно больше используется. Но меньше остается места под значение параметра. Видимо очень разные версии либы
ampersant вне форума   Ответить с цитированием
Старый 18.02.2013, 16:44   #71
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: не будет работать!

Цитата:
Сообщение от ampersant Посмотреть сообщение
давай аргументированно поговорим на эту тему, если ты убедишь скажу "ок". Если нет - тогда ты говори "ок"

итак:
Код:
if(!strcmppgm2ram((char*)curHTTP.data, (ROM char*)"ip"))
         {// Read new static IP Address
             if(!StringToIPAddress(curHTTP.data+6, &newAppConfig.MyIPAddr))
                 goto ConfigFailure;
                              newAppConfig.DefaultIPAddr.Val = newAppConfig.MyIPAddr.Val;
         }

использование curHTTP.data, и curHTTP.data+6 в одном витке РТОС требует чтобы по адресу curHTTP.data+5 стоял бы нуль терминатор
на буквы остается всего 4 байта.
да фиг знает как у них там... я юзаю HTTPReadPostPair(curHTTP.data, HTTP_MAX_DATA_LEN)

тогда имеем на выходе в curHTTP.data пару ... имя и значение параметра в формате

"name\0value\0\0"

тогда в его случае надо говорить, что не стек не поддерживает, а он ошибся, и нужно в curHTTP.data+6, 6 заменить на strlen(name)+1 - чтобы указатель пал на начало значения параметра (value)

P.S. в твоем примере с ip, вообще д.б. curHTTP.data+3
__________________

Vanizma вне форума   Ответить с цитированием
Старый 18.02.2013, 16:57   #72
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: не будет работать!

Цитата:
Сообщение от Vanizma Посмотреть сообщение
да фиг знает как у них там... я юзаю HTTPReadPostPair(curHTTP.data, HTTP_MAX_DATA_LEN)

тогда имеем на выходе в curHTTP.data пару ... имя и значение параметра в формате

"name\0value\0\0"

тогда в его случае надо говорить, что не стек не поддерживает, а он ошибся, и нужно в curHTTP.data+6, 6 заменить на strlen(name)+1 - чтобы указатель пал на начало значения параметра (value)

P.S. в твоем примере с ip, вообще д.б. curHTTP.data+3
ну я вижу суть ты понял где про это написано.
Я заглядывал в разные версии стека, но потом надоело. Ничего нового в старых пуговицах не находил, только новые рукава пришивали. Потому взял однажды заточенный под себя стек, и юзаю только его, причем под хитеч. Звезд с неба мне не надо (а кто-то под Челябинском видимо 14 февраля все таки загадал своей девушке) Посему плюнул на другие версии.
Но, если вдруг за последний год они исправили все таки косяк в ARP - тогда я сменю старую версию на новую. Звучит как угроза
Косяк меня выбесил вот какой: берем TCP клиента и стучимся в отсутствующий url. Получаем приличную неприятность. Если хотим по кругу стучаться в несколько url и среди них есть отсутствующие тогда второй неприятный момент.

Скажем так, ввел своё кэширование на N штук пар IP/мак, таймауты если там нет никого. Время жизни пары для возможности ещё кого нибудь поместить в кэш. Какого икса они этого не сделали сразу? Лопатить заново более свежие версии не было нужды и желания.
ampersant вне форума   Ответить с цитированием
Старый 18.02.2013, 17:04   #73
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: не будет работать!

я-то не то что понял... я давно это знаю (2 года как), и знаю что длина имени или параметра не ограничены цифрой 4, и это не есть проблема либы, а только длиной HTTPdata.

так что где "ок" ?
__________________

Vanizma вне форума   Ответить с цитированием
Старый 18.02.2013, 17:04   #74
AlexKid
Senior Member
 
Регистрация: 27.02.2007
Сообщений: 133
Вес репутации: 142/42
AlexKid will become famous soon enoughAlexKid will become famous soon enough
По умолчанию Re: не будет работать!

Цитата:
Сообщение от Vanizma Посмотреть сообщение
P.S. в твоем примере с ip, вообще д.б. curHTTP.data+3
Это не мой пример, а пример с микрочипа я здесь ничего не менял. Поэтому и возник такой вопрос.
AlexKid вне форума   Ответить с цитированием
Старый 18.02.2013, 17:13   #75
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: не будет работать!

Цитата:
Сообщение от Vanizma Посмотреть сообщение
я-то не то что понял... я давно это знаю (2 года как), и знаю что длина имени или параметра не ограничены цифрой 4, и это не есть проблема либы, а только длиной HTTPdata.

так что где "ок" ?
Ок. Проблема формулировки.
Я отвечал только на приведенный в постах софт.
Тоже это давно знаю, настолько давно, (ну вот когда ту саму тему замутил тогда и изучал все по буквам), что в либе тогда ещё стояли гольные цифры даже не через #define. причем тупо везде одинаковые.
Проблемы в этом никакой не вижу, равно как и необходимость в длине первой части более чем 4 буквы - это же увеличивает объем сайта. Сделали чуть универсальнее - пусть. Я как то использовал там же ещё и после 40-ка (как то понадобилось) сохранить небольшой кэшик для конкретного сокета.
ampersant вне форума   Ответить с цитированием
Ответ


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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь по asm для dsPIC hubble Продукция MICROCHIP 17 09.02.2012 23:17
Нужна помощь с BUGGY piter Продукция MICROCHIP 2 25.07.2011 12:55
Нужна помощь!!! MDD File System FSIO simnov Вопросы начинающих 1 29.05.2011 01:01
Нужна помощь в Proteus`е italic Общетехнические вопросы 2 25.03.2008 14:49
Нужна помощь в решении вопросса! (в тему и не в тему) Noname1024 Общетехнические вопросы 31 19.12.2007 15:30


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


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