firmware-nucleo/App/Src/task_temp_sensor.c (2012B)
1 /* 2 * Copyright (c) 2026 Martin Javier Klöckner <mklockner@fi.uba.ar> 3 * 4 * See file `LICENSE` for full details 5 */ 6 7 #include <stdio.h> 8 #include <stdint.h> 9 #include <stdbool.h> 10 #include <string.h> 11 12 #include "main.h" 13 #include "app.h" 14 15 #include "task_temp_sensor.h" 16 #include "logger.h" 17 18 #include "ds18b20.h" 19 20 #define G_TASK_TEMP_SEN_TICK_INI 0ul 21 #define G_TASK_TEMP_SEN_TEMP_UPDATE_RATE_MS 1000ul 22 #define G_TASK_TEMP_SEN_OFFSET 0 // correction factor 23 24 uint32_t g_task_temp_sensor_tick; 25 26 // this variable is incremented by 1 on every ms by HAL_SysTick 27 volatile uint32_t g_task_temp_sensor_tick_cnt; 28 29 void task_temp_sensor_init(void *parameters) 30 { 31 LOGGER_INFO("Initializing `task_temp_sensor`..."); 32 33 g_task_temp_sensor_tick = G_TASK_TEMP_SEN_TICK_INI; 34 ds18b20_init(); 35 36 LOGGER_INFO("Done initializing `task_temp_sensor`"); 37 } 38 39 void task_temp_sensor_update(void *parameters) 40 { 41 bool b_time_update_required = false; 42 shared_data_type *p_shared_data = (shared_data_type *)parameters; 43 44 __asm("CPSID i"); 45 if (G_TASK_TEMP_SEN_TICK_INI < g_task_temp_sensor_tick_cnt) 46 { 47 g_task_temp_sensor_tick_cnt--; 48 b_time_update_required = true; 49 } 50 __asm("CPSIE i"); 51 52 while (b_time_update_required) 53 { 54 __asm("CPSID i"); 55 if (G_TASK_TEMP_SEN_TICK_INI < g_task_temp_sensor_tick_cnt) 56 { 57 g_task_temp_sensor_tick_cnt--; 58 b_time_update_required = true; 59 } 60 else 61 { 62 b_time_update_required = false; 63 } 64 __asm("CPSIE i"); 65 66 ds18b20_async_tick(); 67 68 if (0 == g_task_temp_sensor_tick) 69 { 70 g_task_temp_sensor_tick = G_TASK_TEMP_SEN_TEMP_UPDATE_RATE_MS; 71 ds18b20_async_read_temp(); 72 } 73 else 74 { 75 g_task_temp_sensor_tick--; 76 } 77 78 if (ds18b20_async_temp_ready()) 79 { 80 p_shared_data->temp_sensor = ds18b20_async_get_temp() + G_TASK_TEMP_SEN_OFFSET; 81 } 82 } 83 }
