commit 0dcb074f4b49a65b570ee2d8a1de21ddffcddd53
parent 98bc683a535b86acafdc9b1ef82f8dd04ee671f2
Author: Martin Klöckner <mjkloeckner@gmail.com>
Date: Sat, 4 Apr 2026 13:44:07 -0300
Usar `static` y `const` siempre que sea posible
Diffstat:
13 files changed, 170 insertions(+), 156 deletions(-)
diff --git a/firmware/app/inc/task_buttons_attribute.h b/firmware/app/inc/task_buttons_attribute.h
@@ -91,8 +91,6 @@ typedef struct {
task_buttons_ev_t event;
} task_buttons_dta_t;
-extern task_buttons_dta_t task_buttons_dta_list[];
-
#ifdef __cplusplus
}
#endif
diff --git a/firmware/app/inc/task_menu_attribute.h b/firmware/app/inc/task_menu_attribute.h
@@ -52,8 +52,6 @@ typedef struct {
bool event_flag;
} task_menu_dta_t;
-extern task_menu_dta_t task_menu_dta;
-
#ifdef __cplusplus
}
#endif
diff --git a/firmware/app/inc/task_system_attribute.h b/firmware/app/inc/task_system_attribute.h
@@ -54,8 +54,6 @@ typedef struct {
bool event_flag;
} task_system_dta_t;
-extern task_system_dta_t task_system_dta;
-
#ifdef __cplusplus
}
#endif
diff --git a/firmware/app/src/display_i2c.c b/firmware/app/src/display_i2c.c
@@ -48,10 +48,6 @@
#define DISPLAY_LINE4_FIRST_CHAR_ADDR 84
// Private variables
-static bool b_display_i2c_dma_done;
-static uint32_t g_display_i2c_tick;
-static uint8_t async_buffer[4];
-
typedef enum {
DISPLAY_CMD,
DISPLAY_CHAR,
@@ -63,20 +59,24 @@ typedef struct {
uint8_t data;
} display_data_t;
-static struct {
+typedef struct {
uint8_t head;
uint8_t tail;
uint8_t count;
display_data_t queue[DISPLAY_ASYNC_QUEUE_LEN];
-} display_async_queue;
+} display_async_queue_t;
-// Private functions declaration
-void display_i2c_send_cmd(uint8_t cmd);
-void display_i2c_send_data(uint8_t data);
+static bool b_display_i2c_dma_done;
+static uint32_t g_display_i2c_tick;
+static uint8_t async_buffer[4];
+static display_async_queue_t display_async_queue;
-void display_i2c_async_write(display_data_t data);
-void display_i2c_async_enqueue(display_data_t data);
-display_data_t display_i2c_async_dequeue(void);
+// Private functions declaration
+static void display_i2c_send_cmd(uint8_t cmd);
+static void display_i2c_send_data(uint8_t data);
+static void display_i2c_async_write(display_data_t data);
+static void display_i2c_async_enqueue(display_data_t data);
+static display_data_t display_i2c_async_dequeue(void);
// Public functions definition
void display_i2c_init(void)
@@ -201,21 +201,21 @@ bool display_i2c_async_done(void)
void display_i2c_async_tick(void)
{
- if (0 == g_display_i2c_tick)
+ if (0 < g_display_i2c_tick)
+ {
+ g_display_i2c_tick--;
+ }
+ else
{
if ((display_async_queue.count != 0) && b_display_i2c_dma_done)
{
display_i2c_async_write(display_i2c_async_dequeue());
}
}
- else
- {
- g_display_i2c_tick--;
- }
}
// Private functions definitions
-void display_i2c_send_cmd(uint8_t cmd)
+static void display_i2c_send_cmd(uint8_t cmd)
{
uint8_t buffer[4], data_u, data_l;
@@ -230,7 +230,7 @@ void display_i2c_send_cmd(uint8_t cmd)
HAL_I2C_Master_Transmit(&hi2c1, DISPLAY_I2C_ADDRESS<<1, (uint8_t*)buffer, 4, 100);
}
-void display_i2c_send_data(uint8_t data)
+static void display_i2c_send_data(uint8_t data)
{
uint8_t data_u, data_l;
uint8_t data_t[4];
@@ -246,7 +246,7 @@ void display_i2c_send_data(uint8_t data)
HAL_I2C_Master_Transmit(&hi2c1, DISPLAY_I2C_ADDRESS<<1, (uint8_t *)data_t, 4, 100);
}
-void display_i2c_async_write(display_data_t data)
+static void display_i2c_async_write(display_data_t data)
{
uint8_t data_u, data_l;
memset(async_buffer, 0, sizeof(async_buffer));
@@ -289,13 +289,13 @@ void HAL_I2C_MasterTxCpltCallback(I2C_HandleTypeDef *hi2c)
b_display_i2c_dma_done = true;
}
-void display_i2c_async_enqueue(display_data_t data)
+static void display_i2c_async_enqueue(display_data_t data)
{
display_async_queue.count++;
display_async_queue.queue[display_async_queue.head++] = data;
}
-display_data_t display_i2c_async_dequeue(void)
+static display_data_t display_i2c_async_dequeue(void)
{
display_async_queue.count--;
return display_async_queue.queue[display_async_queue.tail++];
diff --git a/firmware/app/src/ds18b20.c b/firmware/app/src/ds18b20.c
@@ -56,29 +56,28 @@ static struct {
} ds18b20_async_queue;
// Private global variables
-uint32_t g_ds18b20_tick;
-uint16_t g_ds18b20_temp, g_ds18b20_update_count;
-uint8_t g_temp_lsb, g_temp_msb;
-uint8_t g_ds18b20_tx_buffer[8], g_ds18b20_rx_buffer[8];
-bool b_ds18b20_dma_tx_done, b_ds18b20_dma_rx_done;
-bool b_ds18b20_rx_data_processed, b_ds18b20_async_temp_ready;
+static uint32_t g_ds18b20_tick;
+static uint16_t g_ds18b20_temp, g_ds18b20_update_count;
+static uint8_t g_temp_lsb, g_temp_msb;
+static uint8_t g_ds18b20_tx_buffer[8], g_ds18b20_rx_buffer[8];
+static bool b_ds18b20_dma_tx_done, b_ds18b20_dma_rx_done;
+static bool b_ds18b20_rx_data_processed, b_ds18b20_async_temp_ready;
// Private functions declaration
//// Blocking calls
-void ds18b20_write(uint8_t data);
-void ds18b20_read_temp(void);
-void ds18b20_set_resolution(uint8_t resolution);
-uint8_t ds18b20_get_rx_byte(void);
-void ds18b20_byte_to_array_of_bytes(uint8_t byte, uint8_t *array);
+static bool ds18b20_reset(void);
+static void ds18b20_write(uint8_t data);
+static void ds18b20_set_resolution(uint8_t resolution);
+static uint8_t ds18b20_get_rx_byte(void);
+static void ds18b20_byte_to_array_of_bytes(uint8_t byte, uint8_t *array);
//// Asynchronous calls
-void ds18b20_dma_write(ds18b20_data_t data);
-void ds18b20_async_reset(void);
-void ds18b20_async_enqueue(ds18b20_data_t data);
-ds18b20_data_t ds18b20_async_dequeue(void);
-ds18b20_data_t ds18b20_async_queue_head(void);
-ds18b20_data_t ds18b20_async_queue_tail(void);
-
-uint8_t ds18b20_reset(void)
+static void ds18b20_dma_write(ds18b20_data_t data);
+static void ds18b20_async_reset(void);
+static void ds18b20_async_enqueue(ds18b20_data_t data);
+static ds18b20_data_t ds18b20_async_dequeue(void);
+static ds18b20_data_t ds18b20_async_queue_tail(void);
+
+static bool ds18b20_reset(void)
{
uint8_t data = 0xF0;
@@ -91,16 +90,16 @@ uint8_t ds18b20_reset(void)
{
// Initialization failed
LOGGER_ERROR("Couldn't read temperature sensor");
- return 1;
+ return true;
}
__HAL_UART_DISABLE(&huart1);
LL_USART_SetBaudRate(USART1, HAL_RCC_GetPCLK2Freq(), G_DATA_BAUDRATE);
__HAL_UART_ENABLE(&huart1);
- return 0;
+ return false;
}
-void ds18b20_set_resolution(uint8_t resolution)
+static void ds18b20_set_resolution(uint8_t resolution)
{
uint8_t config;
@@ -147,21 +146,21 @@ void ds18b20_init(void)
ds18b20_async_queue.count = 0;
}
-void ds18b20_write(uint8_t data)
+static void ds18b20_write(uint8_t data)
{
uint8_t buffer[8];
ds18b20_byte_to_array_of_bytes(data, buffer);
HAL_UART_Transmit(&huart1, buffer, 8, 100);
}
-void ds18b20_async_reset(void)
+static void ds18b20_async_reset(void)
{
ds18b20_async_enqueue((ds18b20_data_t){DS18B20_QUEUE_SET_BAUD_SLOW});
ds18b20_async_enqueue((ds18b20_data_t){DS18B20_QUEUE_RESET});
ds18b20_async_enqueue((ds18b20_data_t){DS18B20_QUEUE_SET_BAUD_FAST});
}
-void ds18b20_dma_write(ds18b20_data_t data)
+static void ds18b20_dma_write(ds18b20_data_t data)
{
switch (data.type)
{
@@ -219,7 +218,7 @@ void ds18b20_dma_write(ds18b20_data_t data)
}
}
-void ds18b20_byte_to_array_of_bytes(uint8_t byte, uint8_t *array)
+static void ds18b20_byte_to_array_of_bytes(uint8_t byte, uint8_t *array)
{
for (uint8_t i = 0; i < 8; ++i)
{
@@ -227,7 +226,7 @@ void ds18b20_byte_to_array_of_bytes(uint8_t byte, uint8_t *array)
}
}
-uint8_t ds18b20_get_rx_byte(void)
+static uint8_t ds18b20_get_rx_byte(void)
{
uint8_t received_value = 0;
@@ -263,7 +262,11 @@ void ds18b20_async_tick(void)
}
else
{
- if (0 == g_ds18b20_tick)
+ if (0 < g_ds18b20_tick)
+ {
+ g_ds18b20_tick--;
+ }
+ else
{
if ((0 != ds18b20_async_queue.count)
&& b_ds18b20_dma_tx_done
@@ -272,10 +275,6 @@ void ds18b20_async_tick(void)
ds18b20_dma_write(ds18b20_async_dequeue());
}
}
- else
- {
- g_ds18b20_tick--;
- }
}
}
@@ -310,26 +309,36 @@ int16_t ds18b20_async_get_temp(void)
return g_ds18b20_temp;
}
-void ds18b20_async_enqueue(ds18b20_data_t data)
+static void ds18b20_async_enqueue(ds18b20_data_t data)
{
ds18b20_async_queue.count++;
ds18b20_async_queue.queue[ds18b20_async_queue.head++] = data;
}
-ds18b20_data_t ds18b20_async_dequeue(void)
+#if 0
+static ds18b20_data_t ds18b20_async_dequeue(void)
{
ds18b20_async_queue.count--;
- return ds18b20_async_queue.queue[ds18b20_async_queue.tail++];
+ ds18b20_data_t ret = ds18b20_async_queue.queue[ds18b20_async_queue.tail];
+
+ if ((DS18B20_QUEUE_READ_LSB != ret.type) || (DS18B20_QUEUE_READ_LSB != ret.type))
+ {
+ ds18b20_async_queue.tail++;
+ }
+
+ return res;
}
+#endif
-ds18b20_data_t ds18b20_async_queue_tail(void)
+static ds18b20_data_t ds18b20_async_dequeue(void)
{
- return ds18b20_async_queue.queue[(ds18b20_async_queue.tail) - 1];
+ ds18b20_async_queue.count--;
+ return ds18b20_async_queue.queue[ds18b20_async_queue.tail++];
}
-ds18b20_data_t ds18b20_async_queue_head(void)
+static ds18b20_data_t ds18b20_async_queue_tail(void)
{
- return ds18b20_async_queue.queue[ds18b20_async_queue.head];
+ return ds18b20_async_queue.queue[(ds18b20_async_queue.tail) - 1];
}
// Callbacks definition
diff --git a/firmware/app/src/task_buttons.c b/firmware/app/src/task_buttons.c
@@ -26,7 +26,7 @@
#define BTN_X_PRESSED GPIO_PIN_RESET
#define BTN_X_HOVER GPIO_PIN_SET
-const task_buttons_cfg_t task_buttons_cfg_list[] = {
+static const task_buttons_cfg_t task_buttons_cfg_list[] = {
{ID_BTN_A, BTN_A_GPIO_Port, BTN_A_Pin, BTN_X_PRESSED, DEL_BTN_XX_MAX, EV_SYS_BTN_A_IDLE, EV_SYS_BTN_A_ACTIVE},
{ID_BTN_B, BTN_B_GPIO_Port, BTN_B_Pin, BTN_X_PRESSED, DEL_BTN_XX_MAX, EV_SYS_BTN_B_IDLE, EV_SYS_BTN_B_ACTIVE},
{ID_BTN_C, BTN_C_GPIO_Port, BTN_C_Pin, BTN_X_PRESSED, DEL_BTN_XX_MAX, EV_SYS_BTN_C_IDLE, EV_SYS_BTN_C_ACTIVE},
@@ -35,7 +35,7 @@ const task_buttons_cfg_t task_buttons_cfg_list[] = {
#define BUTTONS_CFG_QTY (sizeof(task_buttons_cfg_list)/sizeof(task_buttons_cfg_t))
-task_buttons_dta_t task_buttons_dta_list[] = {
+static task_buttons_dta_t task_buttons_dta_list[] = {
{DEL_BTN_XX_MIN, ST_BTN_XX_UP, EV_BTN_XX_UP},
{DEL_BTN_XX_MIN, ST_BTN_XX_UP, EV_BTN_XX_UP},
{DEL_BTN_XX_MIN, ST_BTN_XX_UP, EV_BTN_XX_UP},
@@ -48,7 +48,7 @@ task_buttons_dta_t task_buttons_dta_list[] = {
volatile uint32_t g_task_buttons_tick_cnt;
// Private functions declaration
-void task_buttons_statechart(void);
+static void task_buttons_statechart(void);
void task_buttons_init(void *parameters)
{
@@ -99,7 +99,7 @@ void task_buttons_update(void *parameters)
}
}
-void task_buttons_statechart(void)
+static void task_buttons_statechart(void)
{
uint32_t index;
const task_buttons_cfg_t *p_task_buttons_cfg;
diff --git a/firmware/app/src/task_buzzer.c b/firmware/app/src/task_buzzer.c
@@ -20,25 +20,24 @@
#define SHORT_BEEP_MS 35ul
#define LONG_BEEP_MS 500ul
-const task_buzzer_cfg_t task_buzzer_cfg_list[] = {
+static const task_buzzer_cfg_t task_buzzer_cfg_list[] = {
{ID_BUZ_A, &htim3, TIM_CHANNEL_1, BUZZER_FREQ, SHORT_BEEP_MS, LONG_BEEP_MS}
};
#define BUZZER_CFG_QTY (sizeof(task_buzzer_cfg_list)/sizeof(task_buzzer_cfg_t))
+// Private functions declaration
+static void task_buzzer_statechart(void);
+static uint16_t task_buzzer_freq_to_pres(uint16_t freq);
+
+// Exported data definition
+volatile uint32_t g_task_buzzer_tick_cnt;
task_buzzer_dta_t task_buzzer_dta_list[] = {
{TICK_INI_MS, ST_BUZ_XX_OFF, EV_BUZ_XX_OFF, false},
};
#define BUZZER_DTA_QTY (sizeof(task_buzzer_dta_list)/sizeof(task_buzzer_dta_t))
-// Private functions declaration
-void task_buzzer_statechart(void);
-uint16_t task_buzzer_freq_to_pres(uint16_t freq);
-
-// External data declaration
-volatile uint32_t g_task_buzzer_tick_cnt;
-
// External functions definition
void task_buzzer_init(void *parameters)
{
@@ -97,7 +96,7 @@ void task_buzzer_update(void *parameters)
}
}
-void task_buzzer_statechart(void)
+static void task_buzzer_statechart(void)
{
uint32_t index;
const task_buzzer_cfg_t *p_task_buzzer_cfg;
@@ -189,10 +188,13 @@ void task_buzzer_statechart(void)
}
}
+
+// TODO: replace this defines with HAL variables/functions which returns the
+// APB1 timer clock and timer 3 auto reload value (if exists)
#define APB1_TIMER_CLOCK 64000000UL
#define TIMER3_ARR 8000UL
-uint16_t task_buzzer_freq_to_pres(uint16_t freq)
+static uint16_t task_buzzer_freq_to_pres(uint16_t freq)
{
if (0 == freq)
{
diff --git a/firmware/app/src/task_leds.c b/firmware/app/src/task_leds.c
@@ -8,11 +8,9 @@
/* Project includes */
#include "main.h"
-/* Demo includes */
#include "logger.h"
#include "dwt.h"
-/* Application & Tasks includes */
#include "app.h"
#include "task_leds_attribute.h"
#include "task_leds_interface.h"
@@ -27,27 +25,27 @@
#define LED_ON GPIO_PIN_SET
#define LED_OFF GPIO_PIN_RESET
-const task_leds_cfg_t task_leds_cfg_list[] = {
+static const task_leds_cfg_t task_leds_cfg_list[] = {
{ID_LED_A, LD2_GPIO_Port, LD2_Pin, LED_ON, LED_OFF, DEL_LED_XX_BLI, DEL_LED_XX_PUL},
{ID_LED_B, LD3_GPIO_Port, LD3_Pin, LED_ON, LED_OFF, DEL_LED_XX_BLI, DEL_LED_XX_PUL},
};
#define LEDS_CFG_QTY (sizeof(task_leds_cfg_list)/sizeof(task_leds_cfg_t))
-task_leds_dta_t task_leds_dta_list[] = {
- {DEL_LED_XX_MIN, ST_LED_XX_OFF, EV_LED_XX_NOT_BLINK, false},
- {DEL_LED_XX_MIN, ST_LED_XX_OFF, EV_LED_XX_NOT_BLINK, false},
-};
-
#define LEDS_DTA_QTY (sizeof(task_leds_dta_list)/sizeof(task_leds_dta_t))
// Private functions declaration
-void task_leds_statechart(void);
+static void task_leds_statechart(void);
-// External data declaration
+// Exported data definition
uint32_t g_task_leds_cnt;
volatile uint32_t g_task_leds_tick_cnt;
+task_leds_dta_t task_leds_dta_list[] = {
+ {DEL_LED_XX_MIN, ST_LED_XX_OFF, EV_LED_XX_NOT_BLINK, false},
+ {DEL_LED_XX_MIN, ST_LED_XX_OFF, EV_LED_XX_NOT_BLINK, false},
+};
+
// External functions definition
void task_leds_init(void *parameters)
{
@@ -60,7 +58,6 @@ void task_leds_init(void *parameters)
g_task_leds_cnt = G_TASK_LEDS_CNT_INIT;
for (index = 0; LEDS_DTA_QTY > index; index++)
{
- /* Update Task led Configuration & Data Pointer */
p_task_leds_cfg = &task_leds_cfg_list[index];
p_task_leds_dta = &task_leds_dta_list[index];
@@ -106,7 +103,7 @@ void task_leds_update(void *parameters)
}
}
-void task_leds_statechart(void)
+static void task_leds_statechart(void)
{
uint32_t index;
const task_leds_cfg_t *p_task_leds_cfg;
diff --git a/firmware/app/src/task_menu.c b/firmware/app/src/task_menu.c
@@ -21,16 +21,18 @@
#define G_TASK_MEN_TICK_CNT_INI 0ul
#define G_TASK_MEN_DISPLAY_UPDATE_RATE_MS 1000ul
-task_menu_dta_t task_menu_dta = {
+static task_menu_dta_t task_menu_dta = {
G_TASK_MEN_TICK_INI, ST_MEN_IDLE, EV_MEN_ST_IDLE, false
};
// Private functions declaration
-void task_menu_statechart(void *parameters);
+static void task_menu_statechart(void *parameters);
+static void task_menu_set_state(task_menu_st_t new_state);
+static uint8_t task_menu_count_digits(int16_t n);
// Private variables
-bool g_display_update = false;
-task_menu_st_t g_menu_prev_state;
+static bool g_display_update;
+static task_menu_st_t g_menu_prev_state;
static int16_t temp_sensor_prev;
// Public variables
@@ -98,7 +100,7 @@ void task_menu_update(void *parameters)
}
}
-void menu_set_state(task_menu_st_t new_state)
+static void task_menu_set_state(task_menu_st_t new_state)
{
task_menu_dta_t *p_task_menu_dta;
p_task_menu_dta = &task_menu_dta;
@@ -117,8 +119,9 @@ void menu_set_state(task_menu_st_t new_state)
}
}
-int count_digits(int n) {
- int count = 0;
+static uint8_t task_menu_count_digits(int16_t n)
+{
+ uint8_t count = 0;
if (n == 0) return 1;
if (n < 0) n = -n;
@@ -131,7 +134,7 @@ int count_digits(int n) {
return count;
}
-void task_menu_statechart(void *parameters)
+static void task_menu_statechart(void *parameters)
{
task_menu_dta_t *p_task_menu_dta;
shared_data_type *p_shared_data = (shared_data_type *)parameters;
@@ -152,7 +155,7 @@ void task_menu_statechart(void *parameters)
{
case EV_MEN_ST_IDLE:
case EV_MEN_INACTIVE_TIMEOUT:
- menu_set_state(ST_MEN_IDLE);
+ task_menu_set_state(ST_MEN_IDLE);
break;
case EV_MEN_DISPLAY_UPDATE:
@@ -160,23 +163,23 @@ void task_menu_statechart(void *parameters)
break;
case EV_MEN_ST_CLOCK_SET:
- menu_set_state(ST_MEN_CLOCK_SET);
+ task_menu_set_state(ST_MEN_CLOCK_SET);
break;
case EV_MEN_ST_TEMP_SET:
- menu_set_state(ST_MEN_TEMP_SET);
+ task_menu_set_state(ST_MEN_TEMP_SET);
break;
case EV_MEN_ST_TIMER_SET_STATUS:
- menu_set_state(ST_MEN_TIMER_SET_STATUS);
+ task_menu_set_state(ST_MEN_TIMER_SET_STATUS);
break;
case EV_MEN_ST_TIMER_SET_START:
- menu_set_state(ST_MEN_TIMER_SET_START);
+ task_menu_set_state(ST_MEN_TIMER_SET_START);
break;
case EV_MEN_ST_TIMER_SET_END:
- menu_set_state(ST_MEN_TIMER_SET_END);
+ task_menu_set_state(ST_MEN_TIMER_SET_END);
break;
default: break;
@@ -211,7 +214,8 @@ void task_menu_statechart(void *parameters)
{
display_i2c_async_write_string("On");
display_i2c_async_set_cursor_pos(10, 0);
- snprintf(menu_row_str, 20, "%5d%%", p_shared_data->temp_ctrl_pwm_dc);
+ snprintf(menu_row_str, 20, "%5d%%",
+ p_shared_data->temp_ctrl_pwm_dc);
display_i2c_async_write_string(menu_row_str);
}
else
@@ -224,7 +228,7 @@ void task_menu_statechart(void *parameters)
memset(menu_row_str, '\0', sizeof(menu_row_str));
snprintf(menu_row_str, 20, "%s %*d(%d)%cC",
p_shared_data->timer->enabled ? "[P]" : " ",
- (8 - count_digits(p_shared_data->temp_set_point)),
+ (8 - task_menu_count_digits(p_shared_data->temp_set_point)),
p_shared_data->temp_sensor,
p_shared_data->temp_set_point,
G_DISPLAY_CHAR_DEGREE_CODE);
diff --git a/firmware/app/src/task_menu_interface.c b/firmware/app/src/task_menu_interface.c
@@ -21,8 +21,7 @@
#define EVENT_UNDEFINED (255)
#define MAX_EVENTS (16)
-static struct
-{
+static struct {
uint32_t head;
uint32_t tail;
uint32_t count;
diff --git a/firmware/app/src/task_system.c b/firmware/app/src/task_system.c
@@ -20,50 +20,49 @@
#include "task_buzzer_attribute.h"
#include "task_buzzer_interface.h"
-#define G_TASK_SYS_CNT_INI 0ul
-#define G_TASK_SYS_TICK_CNT_INI 0ul
-#define G_TASK_SYS_EEPROM_START_ADDR 0x0801FC00
-#define G_TASK_SYS_EEPROM_END_ADDR 0x0801FFF0
+#define G_TASK_SYS_CNT_INI 0ul
+#define G_TASK_SYS_TICK_CNT_INI 0ul
+#define G_TASK_SYS_EEPROM_START_ADDR 0x0801FC00
+#define G_TASK_SYS_EEPROM_END_ADDR 0x0801FFF0
+#define G_TASK_SYS_TIMER_UPDATE_RATE_MS 1000ul
#define DEL_SYS_MIN 0ul
#define DEL_SYS_MED 50ul
#define DEL_SYS_MAX 500ul
-#define G_TASK_SYSTEM_TICK_UPDATE_RATE_MS 1000ul
-// If persistent values are lost these are the timer default values
-#define TIMER_DEFAULT_START_HOUR 0000
-#define TIMER_DEFAULT_START_MIN 0000
-#define TIMER_DEFAULT_END_HOUR 0000
-#define TIMER_DEFAULT_END_MIN 0000
+// If persistent values are lost these are the timer default values
+#define TIMER_DEFAULT_START_HOUR 00ul
+#define TIMER_DEFAULT_START_MIN 00ul
+#define TIMER_DEFAULT_END_HOUR 12ul
+#define TIMER_DEFAULT_END_MIN 00ul
#define TIMER_DEFAULT_STATUS false
-task_system_dta_t task_system_dta = {
+// Exported variables
+volatile uint32_t g_task_system_tick_cnt; // Updated every ms by SysTick callback
+
+// Private variables
+static task_system_dta_t task_system_dta = {
DEL_SYS_MIN, ST_SYS_IDLE, EV_SYS_IDLE, false
};
#define SYSTEM_DTA_QTY (sizeof(task_system_dta)/sizeof(task_system_dta_t))
-// Private variables
+static uint32_t g_task_system_timer_tick;
static task_system_timer_t task_system_timer = {
TIMER_DEFAULT_START_HOUR, TIMER_DEFAULT_START_MIN,
TIMER_DEFAULT_END_HOUR, TIMER_DEFAULT_END_MIN,
TIMER_DEFAULT_STATUS
};
-uint32_t g_task_system_timer_tick;
-
-// Exported variables
-volatile uint32_t g_task_system_tick_cnt; // Updated every ms by SysTick callback
-
// Private function declaration
-void task_system_statechart(void *parameters);
-void task_system_timer_update(void *parameters);
-void task_system_rtc_init(void);
-void task_system_rtc_increment_hour(void);
-void task_system_rtc_increment_min(void);
-void task_system_eeprom_read_param(void *parameters);
-void task_system_eeprom_write_param(void *parameters);
-uint32_t task_system_eeprom_get_current_addr(void);
+static void task_system_statechart(void *parameters);
+static void task_system_timer_update(void *parameters);
+static void task_system_rtc_init(void);
+static void task_system_rtc_increment_hour(void);
+static void task_system_rtc_increment_min(void);
+static void task_system_eeprom_read_param(void *parameters);
+static void task_system_eeprom_write_param(void *parameters);
+static uint32_t task_system_eeprom_get_current_addr(void);
// Public function definition
void task_system_init(void *parameters)
@@ -107,7 +106,7 @@ void task_system_update(void *parameters)
{
if (0 == g_task_system_timer_tick)
{
- g_task_system_timer_tick = G_TASK_SYSTEM_TICK_UPDATE_RATE_MS;
+ g_task_system_timer_tick = G_TASK_SYS_TIMER_UPDATE_RATE_MS;
task_system_timer_update(parameters);
}
else
@@ -131,7 +130,7 @@ void task_system_update(void *parameters)
}
// Private function definition
-void task_system_rtc_init(void)
+static void task_system_rtc_init(void)
{
HAL_PWR_EnableBkUpAccess();
@@ -152,21 +151,21 @@ void task_system_rtc_init(void)
}
}
-void task_system_rtc_increment_hour()
+static void task_system_rtc_increment_hour()
{
HAL_RTC_GetTime(&hrtc, &s_time, RTC_FORMAT_BIN);
s_time.Hours = (s_time.Hours + 1) % 24;
HAL_RTC_SetTime(&hrtc, &s_time, RTC_FORMAT_BIN);
}
-void task_system_rtc_increment_min()
+static void task_system_rtc_increment_min()
{
HAL_RTC_GetTime(&hrtc, &s_time, RTC_FORMAT_BIN);
s_time.Minutes = (s_time.Minutes + 1) % 60;
HAL_RTC_SetTime(&hrtc, &s_time, RTC_FORMAT_BIN);
}
-uint32_t task_system_eeprom_get_current_addr(void)
+static uint32_t task_system_eeprom_get_current_addr(void)
{
uint32_t addr = G_TASK_SYS_EEPROM_START_ADDR;
@@ -184,7 +183,7 @@ uint32_t task_system_eeprom_get_current_addr(void)
return 0;
}
-void task_system_eeprom_read_param(void *parameters)
+static void task_system_eeprom_read_param(void *parameters)
{
shared_data_type *p_shared_data = (shared_data_type *)parameters;
@@ -202,7 +201,7 @@ void task_system_eeprom_read_param(void *parameters)
// also has the benefit that there is no need to erase the full page all the
// time but only once the page fills which after 512 writes (2 bytes on a page
// of 1024 bytes).
-void task_system_eeprom_write_param(void *parameters)
+static void task_system_eeprom_write_param(void *parameters)
{
uint32_t new_addr, curr_addr;
shared_data_type *p_shared_data = (shared_data_type *)parameters;
@@ -253,7 +252,7 @@ void task_system_eeprom_write_param(void *parameters)
return;
}
-void task_system_statechart(void *parameters)
+static void task_system_statechart(void *parameters)
{
task_system_dta_t *p_task_system_dta = &task_system_dta;
shared_data_type *p_shared_data = (shared_data_type *)parameters;
@@ -455,8 +454,8 @@ void task_system_statechart(void *parameters)
}
}
-// TOOD: Only check timer conditions every second (not on every tick)
-void task_system_timer_update(void *parameters)
+// TODO: Only check timer conditions every second (not on every tick)
+static void task_system_timer_update(void *parameters)
{
shared_data_type *p_shared_data = (shared_data_type *)parameters;
uint16_t start_24, end_24, clock_24;
@@ -470,8 +469,10 @@ void task_system_timer_update(void *parameters)
HAL_RTC_GetTime(&hrtc, &s_time, RTC_FORMAT_BIN);
clock_24 = (s_time.Hours*100) + s_time.Minutes;
- start_24 = (p_shared_data->timer->start_hour*100) + p_shared_data->timer->start_min;
- end_24 = (p_shared_data->timer->end_hour*100) + p_shared_data->timer->end_min;
+ start_24 = (p_shared_data->timer->start_hour*100) +
+ p_shared_data->timer->start_min;
+ end_24 = (p_shared_data->timer->end_hour*100) +
+ p_shared_data->timer->end_min;
new_temp_ctrl_state = ((end_24 > start_24)
? ((clock_24 >= start_24) && (clock_24 < end_24))
diff --git a/firmware/app/src/task_system_interface.c b/firmware/app/src/task_system_interface.c
@@ -16,8 +16,7 @@
#define EVENT_UNDEFINED (255)
#define MAX_EVENTS (16)
-static struct
-{
+static struct {
uint32_t head;
uint32_t tail;
uint32_t count;
diff --git a/firmware/app/src/task_temp_ctrl.c b/firmware/app/src/task_temp_ctrl.c
@@ -22,7 +22,10 @@ typedef struct {
uint32_t tim_channel;
} task_temp_ctrl_cfg_t;
-task_temp_ctrl_cfg_t task_temp_ctrl_cfg = {&htim1, TIM_CHANNEL_1};
+static const task_temp_ctrl_cfg_t task_temp_ctrl_cfg = {&htim1, TIM_CHANNEL_1};
+
+// Private functions declaration
+static inline int16_t ceil_i16(int16_t val, int16_t max_val);
// Public data definition
volatile uint32_t g_task_temp_ctrl_tick_cnt; // Incremented by HAL_SysTick callback
@@ -32,7 +35,7 @@ void task_temp_ctrl_init(void *parameters)
{
LOGGER_INFO("Initializing `task_temp_ctrl`...");
- task_temp_ctrl_cfg_t *p_task_cfg = &task_temp_ctrl_cfg;
+ const task_temp_ctrl_cfg_t *p_task_cfg = &task_temp_ctrl_cfg;
shared_data_type *p_shared_data = (shared_data_type *)parameters;
__HAL_TIM_SET_COMPARE(p_task_cfg->htim,
@@ -43,11 +46,16 @@ void task_temp_ctrl_init(void *parameters)
LOGGER_INFO("Done initializing `task_temp_ctrl`");
}
+static inline int16_t ceil_i16(int16_t val, int16_t max_val)
+{
+ return val > max_val ? max_val : val;
+}
+
void task_temp_ctrl_update(void *parameters)
{
bool b_time_update_required;
shared_data_type *p_shared_data = (shared_data_type *)parameters;
- task_temp_ctrl_cfg_t *p_task_cfg = &task_temp_ctrl_cfg;
+ const task_temp_ctrl_cfg_t *p_task_cfg = &task_temp_ctrl_cfg;
__asm("CPSID i");
if (G_TASK_CTRL_TICK_CNT_INI < g_task_temp_ctrl_tick_cnt)
@@ -71,10 +79,11 @@ void task_temp_ctrl_update(void *parameters)
}
__asm("CPSIE i");
- int16_t dtemp = (p_shared_data->temp_set_point - p_shared_data->temp_sensor);
- if (dtemp > 0)
+ int16_t error = p_shared_data->temp_set_point - p_shared_data->temp_sensor;
+
+ if (error > 0)
{
- p_shared_data->temp_ctrl_pwm_dc = dtemp;
+ p_shared_data->temp_ctrl_pwm_dc = ceil_i16(error*error, 80);
}
else {
p_shared_data->temp_ctrl_pwm_dc = 0;