ISIX-RTOS – trzy wątki, przykłady w języku C: termometr z wyświetlaczem LED-RGB
List. 3. Funkcja tempsensor_get()
static int tempsensor_get(float *t)
{
static const unsigned char temp_reg = MCP9800_TEMP_REG;
static char temp[2];
int ecode;
//Read the temperature
ecode = i2cm_transfer_7bit(TEMPSENSOR_I2CADDR,&temp_reg,sizeof(temp_reg),
temp,sizeof(temp));
//Convert to integer
if(ecode>=0)
{
*t = (float)temp[0] + (temp[1]>>4)/16.0f;
}
return ecode;
}
Tak wyliczona wartość jest przekazywana do struktury msg i przesyłana do kolejki FIFO. Za wizualizację temperatury odpowiedzialny jest wątek display_srv_task , który odbiera informację o aktualnej temperaturze z kolejki FIFO i wizualizuje ją na diodzie RGB (list. 4).
List. 4. Wątek odpowiadający za odbiór danych o aktualnej temperaturze z kolejki FIFO i jej wizualizację na diodzie RGB
#define COLD_VALUE 24.0f /* Cold value */
#define HOT_VALUE 30.0f /* Hot Value */
#define PWM_MAX 255 /* Maximum pwm value */
#define PWM_MAX_F 255.5
#define A_VALUE -0.1f /* A value of quadratic equation */
#define FAIL_AMBER_VAL 200 /* Fail amber 4 PWM ratio */
/** Display server task */
static ISIX_TASK_FUNC(display_srv_task, entry_params)
{
fifo_t *temp_fifo = (fifo_t*)entry_params;
struct msg msg; //Message structure
//If init rgb fail terminate task
if(rgb_init()<0)
{
isix_task_delete(NULL);
}
unsigned pcolor = 0;
for(;;)
{
//Read data from fifo
if(isix_fifo_read( temp_fifo, &msg,ISIX_TIME_INFINITE )==ISIX_EOK)
{
//Display temp or error
if(msg.errno>=0)
{
//Calculate saturation
int b = PWM_MAX_F * (HOT_VALUE - msg.t) / (HOT_VALUE-COLD_VALUE);
int g = PWM_MAX_F * (A_VALUE * (msg.t-COLD_VALUE) * (msg.t-HOT_VALUE));
int r = PWM_MAX_F * (msg.t-COLD_VALUE) / (HOT_VALUE-COLD_VALUE);
if(b<0) b=0; else if(b>PWM_MAX) b=PWM_MAX;
if(r<0) r=0; else if(r>PWM_MAX) r=PWM_MAX;
if(g<0) g=0; else if(g>PWM_MAX) g=PWM_MAX;
//Calculate color
unsigned color = RGB(r,g,b);
//Update britness only if color changed value
if(color!=pcolor)
rgb_set_color(color);
pcolor = color;
}
else // If fail enable only amber
rgb_set_color( RGBA( 0, 0, 0, FAIL_AMBER_VAL));
}
}
}

Nordic poszerza opcje rozwojowe serii nRF54L o płytkę nRF7002 EBII do łączności Wi-Fi 6
Technologie End of Life i bezpieczeństwo sieci – wyzwania Europy związane z tzw. długiem technologicznym
Najczęstsze błędy firm przy wyborze dostawcy energii i jak ich uniknąć 



