diff --git a/APP/inc/ADC_Temp.h b/APP/inc/ADC_Temp.h index fe56e58..5dd2e3c 100644 --- a/APP/inc/ADC_Temp.h +++ b/APP/inc/ADC_Temp.h @@ -34,7 +34,7 @@ typedef enum { #define TABLE_SIZE_DUCT 26 #define TABLE_SIZE_INCAR 38 #define TABLE_SIZE_AMBIENT 39 -#define TABLE_SIZE_LOOKUP 1024 +#define TABLE_SIZE_LOOKUP 4096 // Предварительно вычисленная таблица для быстрого доступа для каждой таблицы typedef struct { diff --git a/APP/main.c b/APP/main.c index 3be37b0..679686f 100644 --- a/APP/main.c +++ b/APP/main.c @@ -47,6 +47,77 @@ void save_table_to_csv(const char* filename, const adc_temp_lookup* table, const printf("Таблица '%s' сохранена в CSV файл: %s\n", table_name, filename); } +// Функция для сохранения таблицы в виде C-массива +void save_table_to_c_array(const char* filename, const adc_temp_lookup* table, const char* table_name) { + FILE* file = fopen(filename, "w"); + if (file == NULL) { + printf("Ошибка: не удалось создать файл %s\n", filename); + return; + } + + fprintf(file, "// Таблица быстрого поиска: %s\n", table_name); + fprintf(file, "// Всего записей: %d\n", TABLE_SIZE_LOOKUP); + fprintf(file, "// Формат: {ADC, Temp_TenthsC, Resistance_Ohm}\n\n"); + fprintf(file, "const adc_temp_lookup %s_lookup_table[%d] = {\n", + table_name, TABLE_SIZE_LOOKUP); + + for (int i = 0; i < TABLE_SIZE_LOOKUP; i++) { + if (i == TABLE_SIZE_LOOKUP - 1) { + fprintf(file, " {%u, %d, %.2f}\n", + table[i].adc_value, + table[i].temp_c, + table[i].resistance_ohm); + } else { + fprintf(file, " {%u, %d, %.2f},\n", + table[i].adc_value, + table[i].temp_c, + table[i].resistance_ohm); + } + } + + fprintf(file, "};\n"); + fclose(file); + printf("Таблица '%s' сохранена в C-массив: %s\n", table_name, filename); +} + +// Функция для сохранения таблицы в виде компактного C-массива (как в примере) +void save_table_to_c_array_compact(const char* filename, const adc_temp_lookup* table, const char* array_name) { + FILE* file = fopen(filename, "w"); + if (file == NULL) { + printf("Ошибка: не удалось создать файл %s\n", filename); + return; + } + + fprintf(file, "// Таблица быстрого поиска\n"); + fprintf(file, "const adc_temp_lookup %s[] = {\n", array_name); + + for (int i = 0; i < TABLE_SIZE_LOOKUP; i++) { + if (i % 4 == 0 && i > 0) { + fprintf(file, "\n"); + } + + if (i == TABLE_SIZE_LOOKUP - 1) { + fprintf(file, " {%u, %d, %.2f}", + table[i].adc_value, + table[i].temp_c, + table[i].resistance_ohm); + } else { + fprintf(file, " {%u, %d, %.2f},", + table[i].adc_value, + table[i].temp_c, + table[i].resistance_ohm); + } + + if ((i + 1) % 4 != 0 && i != TABLE_SIZE_LOOKUP - 1) { + fprintf(file, " "); + } + } + + fprintf(file, "\n};\n"); + fclose(file); + printf("Таблица '%s' сохранена в компактный C-массив: %s\n", array_name, filename); +} + // Функция для сохранения всех таблиц void save_all_tables(void) { const fast_lookup_tables_t* tables = get_fast_tables(); @@ -60,6 +131,16 @@ void save_all_tables(void) { save_table_to_csv("duct_table.csv", tables->duct, "DUCT"); save_table_to_csv("incar_table.csv", tables->incar, "INCAR"); save_table_to_csv("ambient_table.csv", tables->ambient, "AMBIENT"); + + // Сохраняем в виде C-массивов + save_table_to_c_array("duct_table_array.c", tables->duct, "DUCT"); + save_table_to_c_array("incar_table_array.c", tables->incar, "INCAR"); + save_table_to_c_array("ambient_table_array.c", tables->ambient, "AMBIENT"); + + // Сохраняем в виде компактных C-массивов + save_table_to_c_array_compact("duct_table_compact.c", tables->duct, "duct_lookup"); + save_table_to_c_array_compact("incar_table_compact.c", tables->incar, "incar_lookup"); + save_table_to_c_array_compact("ambient_table_compact.c", tables->ambient, "ambient_lookup"); } int main() { @@ -85,20 +166,6 @@ int main() { int16_t temp_ambient = get_temperature_log_fast_for_table(adc_value, TABLE_AMBIENT); printf("AMBIENT (NTC 10k): ADC=%u, Temp=%.2f °C\n", adc_value, temp_ambient / 10.0f); - // Переключение активной конфигурации - printf("\n=== Переключение активной конфигурации ===\n"); - - set_active_config(TABLE_DUCT, 3300.0f); - int16_t temp_active1 = get_temperature_log_fast(adc_value); - printf("Активная (DUCT): Temp=%.2f °C\n", temp_active1 / 10.0f); - - set_active_config(TABLE_INCAR, 3300.0f); - int16_t temp_active2 = get_temperature_log_fast(adc_value); - printf("Активная (INCAR): Temp=%.2f °C\n", temp_active2 / 10.0f); - - set_active_config(TABLE_AMBIENT, 10000.0f); - int16_t temp_active3 = get_temperature_log_fast(adc_value); - printf("Активная (AMBIENT): Temp=%.2f °C\n", temp_active3 / 10.0f); // Сохраняем таблицы в файлы printf("\n=== Сохранение таблиц в файлы ===\n");