реклама на сайте
подробности

 
 
> Проблема передачи элемента структуры в функцию.
paravozru
сообщение Aug 19 2013, 04:06
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 2-07-12
Пользователь №: 72 586



Ох ох ох опять возникла проблема опять долго не могу ее устранить.
Есть структура, описана в .h файле.
Код
typedef struct     {
    uint8_t                        Enable;          
    uint8_t                        Module_IntAddr;    
    uint8_t                        NumChannel;            
    uint8_t                        MODBUS_Addr;    
    uint8_t                         MODBUS_Func;    
    uint16_t                         FirsAddr;        
    uint16_t                        AmountNum;      
    uint16_t                         TimeOut;        
    uint16_t                        SettingAmounOk;    
} MBr_In_Type;


И в .с файле

Код
             In->NumChannel                     = 0;            
                      In->MODBUS_Addr                  = 3;  
                      In->MODBUS_Func             = 4;
                      In->FirsAddr                    = 6;
                      In->AmountNum              = 12;
                      In->TimeOut                        = 12;
                      In->SettingAmounOk               = 5;
              
                    FB_MODBUS_Buffer[0] = In->MODBUS_Addr;                
                    FB_MODBUS_Buffer[1] = In->MODBUS_Func;
                    FB_MODBUS_Buffer[2] = In->FirsAddr >> 8;                       
                    FB_MODBUS_Buffer[3] = In->FirsAddr & 0xFF;                     
                    FB_MODBUS_Buffer[4] = In->AmountNum >> 8;                    
                    FB_MODBUS_Buffer[5] = In->AmountNum & 0xFF;                  
                
                    CRCmb = crc16 (FB_MODBUS_Buffer, 8);
    
                    FB_MODBUS_Buffer[6] = (uint8_t)CRCmb;
                    FB_MODBUS_Buffer[7] = (uint8_t)(CRCmb >>8);
                    CreateNewOutPacket(FBPacket, PacketWaitSend, In->NumChannel, 8, FB_MODBUS_Buffer, 7);


Так вот когда я в функцию CreateNewOutPacket в область In->TimeOut пишу цифру, например 7, то декремент доходит до 0. Если я ссылаюсь на элемент структуры вот так
CreateNewOutPacket(FBPacket, PacketWaitSend, In->NumChannel, 8, FB_MODBUS_Buffer, In->TimeOut); то декремент идет вечно.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 2)
Dog Pawlowa
сообщение Aug 19 2013, 07:39
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(paravozru @ Aug 19 2013, 07:06) *
Так вот когда я в функцию CreateNewOutPacket в область In->TimeOut пишу цифру, например 7, то декремент доходит до 0. Если я ссылаюсь на элемент структуры вот так
CreateNewOutPacket(FBPacket, PacketWaitSend, In->NumChannel, 8, FB_MODBUS_Buffer, In->TimeOut); то декремент идет вечно.

Где декремент, какой декремент?


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
paravozru
сообщение Aug 19 2013, 14:12
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 2-07-12
Пользователь №: 72 586



Цитата(Dog Pawlowa @ Aug 19 2013, 11:39) *
Где декремент, какой декремент?


Код
uint16_t CreateNewOutPacket(uint16_t PacketType, uint16_t State, uint8_t Channel, uint8_t NumBytes, uint8_t *buff, uint16_t TimeOut)    {
    
    uint16_t result;
    uint8_t i;
    
    
            for (i = 0; i < MaxAmountPacket; i++)    {
            if (PackTurnSend[i].State == EmptyItem)    {
                    PackTurnSend[i].BodyType                     = PacketType;            
                    PackTurnSend[i].State                         = State;                    
                    PackTurnSend[i].Channel                        = Channel;
                    PackTurnSend[i].NumBytes                        = NumBytes;            
                        PackTurnSend[i].TimeOut                         = TimeOut;                
                    memcpy(PackTurnSend[i].Buff, buff, NumBytes);                    
                            result = i;                                                                                        
                    LedGreen(0x1FFFF);
                    
                    break;                                                                                                
            }
    }        
    
    return result;                                                                            
}


Код
if ((PackTurnSend[PacketIndexPT].State == PacketWaitAnswer)) {                                                                 
                                PackTurnSend[PacketIndexPT].TimeOut--;    
                                LedBlue(0x1FFFF);
}
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 18:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01394 секунд с 7
ELECTRONIX ©2004-2016