I removed isEpicsThread from the struct too.
Put #if defined(_POSIX_THREAD_PRIORITY_SCHEDULING) ... around the two new functions osi2posixPriority and posix2osiPriority to prevent warnings if _POSIX_THREAD_PRIORITY_SCHEDULING is not set.
#if defined(_POSIX_THREAD_PRIORITY_SCHEDULING) && _POSIX_THREAD_PRIORITY_SCHEDULING > 0 static int osi2posixPriority(unsigned osiPriority) {
double maxPriority,minPriority,slope; int oss;
if (!pcommonAttr->valid) return 0; /* assume SCHED_OTHER is in effect */
if(pcommonAttr->maxPriority==pcommonAttr->minPriority) return(pcommonAttr->minPriority);
maxPriority = (double)pcommonAttr->maxPriority; minPriority = (double)pcommonAttr->minPriority; slope = (double)(maxPriority - minPriority)/(double)(epicsThreadPriorityMax - epicsThreadPriorityMin); oss = (int)round( (double)(osiPriority - epicsThreadPriorityMin) * slope + minPriority ); if ( oss < pcommonAttr->minPriority ) oss = pcommonAttr->minPriority; if ( oss > pcommonAttr->maxPriority ) oss = pcommonAttr->maxPriority; return oss; }
static unsigned posix2osiPriority(int posixPriority) { double slope, osid; unsigned osi;
if ( ! pcommonAttr->valid ) return epicsThreadPriorityMedium;
if ( pcommonAttr->maxPriority == pcommonAttr->minPriority ) return epicsThreadPriorityMedium;
slope = (double)(epicsThreadPriorityMax - epicsThreadPriorityMin) / (double)(pcommonAttr->maxPriority - pcommonAttr->minPriority);
osid = round( (double)(posixPriority - pcommonAttr->minPriority) * slope + epicsThreadPriorityMin ); if ( osid < (double) epicsThreadPriorityMin ) { /* may be negative! */ return epicsThreadPriorityMin; } osi = (unsigned)osid;
if ( osi > epicsThreadPriorityMax ) osi = epicsThreadPriorityMax;
return osi; } #endif /* _POSIX_THREAD_PRIORITY_SCHEDULING */
Heinz
I removed isEpicsThread from the struct too.
Put #if defined( _POSIX_ THREAD_ PRIORITY_ SCHEDULING) ... around THREAD_ PRIORITY_ SCHEDULING is not set.
the two new functions osi2posixPriority and posix2osiPriority to prevent warnings
if _POSIX_
#if defined( _POSIX_ THREAD_ PRIORITY_ SCHEDULING) && _POSIX_ THREAD_ PRIORITY_ SCHEDULING > 0 ty(unsigned osiPriority)
static int osi2posixPriori
{
double maxPriority, minPriority, slope;
int oss;
if (!pcommonAttr- >valid)
return 0; /* assume SCHED_OTHER is in effect */
if( pcommonAttr- >maxPriority= =pcommonAttr- >minPriority)
return( pcommonAttr- >minPriority) ;
maxPriority = (double) pcommonAttr- >maxPriority; pcommonAttr- >minPriority; (maxPriority - minPriority) /(double) (epicsThreadPri orityMax - epicsThreadPrio rityMin) ; (osiPriority - epicsThreadPrio rityMin) * slope + minPriority ); >minPriority ) >minPriority; >maxPriority ) >maxPriority;
minPriority = (double)
slope = (double)
oss = (int)round( (double)
if ( oss < pcommonAttr-
oss = pcommonAttr-
if ( oss > pcommonAttr-
oss = pcommonAttr-
return oss;
}
static unsigned posix2osiPriori ty(int posixPriority)
{
double slope, osid;
unsigned osi;
if ( ! pcommonAttr->valid ) rityMedium;
return epicsThreadPrio
if ( pcommonAttr- >maxPriority == pcommonAttr- >minPriority ) rityMedium;
return epicsThreadPrio
slope = (double) (epicsThreadPri orityMax - epicsThreadPrio rityMin) (pcommonAttr- >maxPriority - pcommonAttr- >minPriority) ;
/ (double)
osid = round( (double) (posixPriority - pcommonAttr- >minPriority) * slope + epicsThreadPrio rityMin ); rityMin ) { rityMin;
if ( osid < (double) epicsThreadPrio
/* may be negative! */
return epicsThreadPrio
}
osi = (unsigned)osid;
if ( osi > epicsThreadPrio rityMax ) rityMax;
osi = epicsThreadPrio
return osi; THREAD_ PRIORITY_ SCHEDULING */
}
#endif /* _POSIX_
Heinz