LINUX.ORG.RU

можно скачать исходники а потом самому собрать

PS:есть мнение что gcc на qnx не юзабелен

cvv ★★★★★
()
Ответ на: комментарий от cvv

> можно скачать исходники а потом самому собрать

ну попробуйте..

> PS:есть мнение что gcc на qnx не юзабелен

забавно. а что, можно у вас поинтересоваться, там юзабельно? что вы лично там использовали?

ps: опять выискался "специалист по AIX и HP-UX" ?

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

>> можно скачать исходники а потом самому собрать

>ну попробуйте..

gcc 2.96 для SCO собирал.

ну отсюдова и предположил что gcc 3.3.5 для QNX будет собрать не намного сложнее

>> PS:есть мнение что gcc на qnx не юзабелен

>забавно. а что, можно у вас поинтересоваться, там юзабельно?

мнение того-же источника: "watcom c".

а вообще-то если судить по частоте появления "klalafuda" в форумах по qnx, вашему опыту нет конкуренции на лоре. 

только не всегда проявляете желание им поделится.

вот скажите какой сакральный смысл в паузах после SetBaudCOM и FlushCOM в следующем коде для qnx:
   // set the baud rate to 9600                                                                                                
   SetBaudCOM(fd,9600);                                                                                                        
   delay (10);                                                                                                                 
   // send a break to reset the DS2480B                                                                                        
   BreakCOM(fd);                                                                                                               
   delay (100);                                                                                                                
   // delay to let line settle                                                                                                 
                                                                                                                               
   // flush the buffers                                                                                                        
   FlushCOM(fd);                                                                                                               
   delay (10);                                                                                                                 
   // send the timing byte                                                                                                     
   sendpacket[0] = 0xC1;                                                                                                       
   if (WriteCOM(fd,1,&sendpacket[0]) != 1)                                                                                     
   {                                                                                                                           
      return FALSE;                                                                                                            
    }                                                                                                                          

без этих пауз нормально работает под ликсом и маздаем но глючит под qnx. 
У вас там что эти сисколы асинхронные или мютекс в ядре залочить забыли?

cvv ★★★★★
()
Ответ на: комментарий от cvv

> gcc 2.96 для SCO собирал. ну отсюдова и предположил что gcc 3.3.5 для QNX будет собрать не намного сложнее

отличная логика :))) теоретики блин. "если собрал gcc 2.96 для SCO - соберу 3.x для QNX6". ugu, это все к сожалению в теории. а потом не забудте заставить все это дело взлететь на пару с boost-ом.. :-/

> мнение того-же источника: "watcom c".

пардон, какого именно источника? я что-то пропустил? разговор ведется о QNX6.x бо сама постановка вопроса "boost на QNX4" ничего кроме нервного смеха вызвать не может :) и QNX4 vs QNX6 - это две очень большие разницы.

---cut---
вот скажите какой сакральный смысл в паузах после SetBaudCOM и FlushCOM в следующем коде для qnx:
   // set the baud rate to 9600                                                                                                
   SetBaudCOM(fd,9600);                                                                                                        
   delay (10);                                                                                                                 
   // send a break to reset the DS2480B                                                                                        
   BreakCOM(fd);                                                                                                               
   delay (100);                                                                                                                
   // delay to let line settle                                                                                                 
                                                                                                                               
   // flush the buffers                                                                                                        
   FlushCOM(fd);                                                                                                               
   delay (10);                                                                                                                 
   // send the timing byte                                                                                                     
   sendpacket[0] = 0xC1;                                                                                                       
   if (WriteCOM(fd,1,&sendpacket[0]) != 1)                                                                                     
   {                                                                                                                           
      return FALSE;                                                                                                            
    }                                                        
---cut---

Бэримор, что это :-? за магическими delay()/FlushCOM()/WriteCOM() может скрываться *абсолютно* все, что угодно. и к QNX любой версии это не имеет никакого отношения. приведите пример в терминах API системы.

ps: IMHO задавать вопрос в таком виде - это несколько кхм.. разве что вас не интересует результат.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

>за магическими delay()/FlushCOM()/WriteCOM() может скрываться *абсолютно* все, что угодно. и к QNX любой версии это не имеет никакого отношения. приведите пример в терминах API системы.

ну вообщето вы конечно правы но в конкретном случае это простейшие врапперы:

delay() - это API системы

остальные:
//--------------------------------------------------------------------------                                                   
// Set the baud rate on the com port.                                                                                          
//void SetBaudCOM(fd,unsigned char new_baud)                                                                                   
void SetBaudCOM (int fd, long baud)                                                                                            
{                                                                                                                              
    struct termios termios_ser;                                                                                                
    int size_read;                                                                                                             
    speed_t speed;                                                                                                             
                                                                                                                               
    size_read =  tcgetattr( fd, &termios_ser );                                                                                
    if (size_read!=0 && dodebug)                                                                                               
    {                                                                                                                          
        fprintf(stderr , "%s : can not get attribute of port : %s \n", progname, strerror( errno ));                           
    }                                                                                                                          
    speed = cfgetispeed( &termios_ser);                                                                                        
//  if (dodebug) printf( "__Input baud: %ld__\n", speed );                                                                     
    speed=baud;                                                                                                                
    size_read =cfsetospeed( &termios_ser, speed );                                                                             
    if (size_read!=0 && dodebug)                                                                                               
    {                                                                                                                          
        fprintf(stderr , "%s : can not set speed of port : %s \n", progname , strerror( errno ));                              
    }                                                                                                                          
    size_read =cfsetispeed( &termios_ser, speed );                                                                             
    if (size_read!=0 && dodebug)                                                                                               
    {                                                                                                                          
        fprintf(stderr , "%s : can not set speed of port : %s \n", progname , strerror( errno ));                              
    }                                                                                                                          
    size_read =  tcsetattr(fd,TCSADRAIN ,&termios_ser );                                                                       
    if (size_read!=0 && dodebug)                                                                                               
    {                                                                                                                          
        fprintf(stderr , "%s : can not set attribute of port : %s \n", progname, strerror( errno ));                           
    }                                                                                                                          
    return;                                                                                                                    
}                                                                                                                              

//--------------------------------------------------------------------------                                                   
// Send a break on the com port for at least 2 ms                                                                              
//                                                                                                                             
void BreakCOM(int fd)                                                                                                          
{                                                                                                                              
    int result=-1;                                                                                                             
   // start the reset pulse                                                                                                    
    result=tcsendbreak( fd,2);                                                                                                 
   // debug                                                                                                                    
   if (dodebug)                                                                                                                
      printf("__Break__\n");                                                                                                   
}                                                                                                                              

cvv ★★★★★
()
Ответ на: комментарий от klalafuda

//---------------------------------------------------------------------------                                                  
// Flush the rx and tx buffers                                                                                                 
//                                                                                                                             
void FlushCOM(int fd)                                                                                                          
{                                                                                                                              
    int result=-1;                                                                                                             
   // purge any information in the buffer                                                                                      
    result=tcflush(fd,TCIOFLUSH);                                                                                              
    if(result==-1 && dodebug)                                                                                                  
    {                                                                                                                          
        printf ("__Flush error!__\n");                                                                                         
    }                                                                                                                          
   // debug                                                                                                                    
   else if (dodebug)                                                                                                           
      printf("__Flush__\n");                                                                                                   
}                                                                                                                              
 //--------------------------------------------------------------------------                                                   
// Write an array of bytes to the COM port, verify that it was                                                                 
// sent out.  Assume that baud rate has been set.                                                                              
//                                                                                                                             
// 'outlen'   - number of bytes to write to COM port                                                                           
// 'outbuf'   - pointer ot an array of bytes to write                                                                          
//                                                                                                                             
// Returns:  TRUE(1)  - success                                                                                                
//           FALSE(0) - failure                                                                                                
//                                                                                                                             
int WriteCOM(int fd, int outlen, unsigned char *outbuf)                                                                        
{                                                                                                                              
   int  size_written;                                                                                                          
    // timer timeout vars                                                                                                      
    struct sigevent ev;                                                                                                        
    // timeout                                                                                                                 
    _Uint64t ui_timeout;                                                                                                       
                                                                                                                               
   // calculate a timeout                                                                                                      
   ui_timeout = (80)*mSEC_NSEC;                                                                                                
  ev.sigev_notify = SIGEV_UNBLOCK;                                                                                             
   // write the byte                                                                                                           
    for (int i=0;i<outlen;i++)                                                                                                 
    {                                                                                                                          
        TimerTimeout( CLOCK_REALTIME,  _NTO_TIMEOUT_SEND | _NTO_TIMEOUT_REPLY,  &ev, &ui_timeout, NULL );                      
        size_written=write(fd , &outbuf[i] , 1);                                                                               
        tcdrain(fd);                                                                                                           
        if (size_written !=1 )                                                                                                 
        {                                                                                                                      
            printf("transmit timeout \n");                                                                                     
            return 0;                                                                                                          
        }                                                                                                                      
        delay (2);                                                                                                             
    }                                                                                                                          
    //debug                                                                                                                    
   if (dodebug)                                                                                                                
   {                                                                                                                           
      for (int i = 0; i < outlen; i++)                                                                                         
         printf(">%02X",outbuf[i]);                                                                                            
      printf("\n");                                                                                                            
   }                                                                                                                           
   // check results of write                                                                                                   
      return 1;                                                                                                                
}                                                                                                                              
 

cvv ★★★★★
()
Ответ на: комментарий от cvv

> без этих пауз нормально работает под ликсом и маздаем но глючит под qnx.

сокрального смысла для выставления задержки после вызовов tcxxx() нет ровным счетом никакого и все отлично работает и без них (и не только в QNX4/6). почему они там стоят - спросите автора кода, ему очевидно виднее. в силу того, что вы не потрудились описать что конкретно, как и в каких условиях "глючит" - ответом будет молчание.

> У вас там что эти сисколы асинхронные или мютекс в ядре залочить забыли?

что значит в данном случае - у вас там? у нас тут все просто замечательно. как "у них там" я не знаю.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

автор кода Max_QNX он же Max_Fly с форума http://www.caxapa.ru/mcu/wwwboard.html

его мотивы вставляния этих пауз:

в некоторых местах приходилось при обращениях к СОМ порту притормаживать QNX потому как преобразователь с ума сходил. Они пожлобились на свой генератор и синхронизируются от СОМ порта. Под виндой-ДОСом нормально - а в QNX пока не притормозил в некоторых местах - не работало и хоть тресни.

>что значит в данном случае - у вас там?

имелось ввиду в qnx

cvv ★★★★★
()
Ответ на: комментарий от cvv

> автор кода Max_QNX он же Max_Fly с форума http://www.caxapa.ru/mcu/wwwboard.html

может, стоит спросить у автора - что конкретно он имел ввиду?

> в некоторых местах приходилось при обращениях к СОМ порту притормаживать QNX потому как преобразователь с ума сходил. Они пожлобились на свой генератор и синхронизируются от СОМ порта. Под виндой-ДОСом нормально - а в QNX пока не притормозил в некоторых местах - не работало и хоть тресни.

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

с точки зрения обычного UART приведенная фраза представляет собой набор тарабарщины и мне кажется, что сэр Макс тут совершенно не виноват.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

моё отношение к тому коду такое - же как и ваше к моим постам.

:)

cvv ★★★★★
()
Ответ на: комментарий от cvv

>>может, стоит спросить у автора - что конкретно он имел ввиду? >мой коллега уже второй день пытает

"пилите, Шура, пилите.." (c)..

// wbr

klalafuda ★☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.