Init
This commit is contained in:
parent
6369fa916c
commit
c8864328fe
|
|
@ -34,7 +34,7 @@ typedef enum {
|
||||||
#define TABLE_SIZE_DUCT 26
|
#define TABLE_SIZE_DUCT 26
|
||||||
#define TABLE_SIZE_INCAR 38
|
#define TABLE_SIZE_INCAR 38
|
||||||
#define TABLE_SIZE_AMBIENT 39
|
#define TABLE_SIZE_AMBIENT 39
|
||||||
#define TABLE_SIZE_LOOKUP 1024
|
#define TABLE_SIZE_LOOKUP 4096
|
||||||
|
|
||||||
// Предварительно вычисленная таблица для быстрого доступа для каждой таблицы
|
// Предварительно вычисленная таблица для быстрого доступа для каждой таблицы
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
|
||||||
95
APP/main.c
95
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);
|
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) {
|
void save_all_tables(void) {
|
||||||
const fast_lookup_tables_t* tables = get_fast_tables();
|
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("duct_table.csv", tables->duct, "DUCT");
|
||||||
save_table_to_csv("incar_table.csv", tables->incar, "INCAR");
|
save_table_to_csv("incar_table.csv", tables->incar, "INCAR");
|
||||||
save_table_to_csv("ambient_table.csv", tables->ambient, "AMBIENT");
|
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() {
|
int main() {
|
||||||
|
|
@ -85,20 +166,6 @@ int main() {
|
||||||
int16_t temp_ambient = get_temperature_log_fast_for_table(adc_value, TABLE_AMBIENT);
|
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("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");
|
printf("\n=== Сохранение таблиц в файлы ===\n");
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue