implemented atomary writing to the output files (by creating tmp file and renaming it).

This commit is contained in:
2025-11-13 22:47:40 +03:00
parent e4194a8afa
commit 196c872093
3 changed files with 27 additions and 3 deletions

Binary file not shown.

Binary file not shown.

30
main.c
View File

@ -154,9 +154,16 @@ typedef enum {
BF_MODE_AVG = 1
} bf_mode_t;
typedef enum {
BFMODE_TRANSPARENT = 0,
BFMODE_AVG = 1,
BFMODE_FFT = 2
} blackfin_mode_t;
typedef struct main_state_typedef{
run_mode_t run_mode; // TEST, FINITE_RUN, INF_RUN
bf_mode_t BF_mode; // TRANSPARENT, AVG
blackfin_mode_t BlackFin_mode; // TRANSPARENT, AVG, FFT
uint32_t run_length; // in ms. Used as timeout for receive_to_file
uint32_t run_I; // № current run
uint32_t runs_N; // total number of runs
@ -166,6 +173,7 @@ typedef struct main_state_typedef{
static void main_state_set_defaults(main_state* st) {
st->run_mode = RUN_MODE_TEST;
st->BF_mode = BF_MODE_TRANSPARENT;
st->BlackFin_mode = BFMODE_TRANSPARENT;
st->run_length = 1000;
st->run_I = 0;
st->runs_N = 1;
@ -218,6 +226,16 @@ static void parse_cmd_file(const char* filename, main_state* st) {
} else {
st->BF_mode = BF_MODE_TRANSPARENT; // default on mismatch
}
} else if (strcmp(field, "BlackFin_mode") == 0) {
if (strcmp(value, "TRANSPARENT") == 0) {
st->BlackFin_mode = BFMODE_TRANSPARENT;
} else if (strcmp(value, "AVG") == 0) {
st->BlackFin_mode = BFMODE_AVG;
} else if (strcmp(value, "FFT") == 0) {
st->BlackFin_mode = BFMODE_FFT;
} else {
st->BlackFin_mode = BFMODE_TRANSPARENT; // default on mismatch
}
} else if (strcmp(field, "run_length") == 0) {
char* endp = NULL;
unsigned long v = strtoul(value, &endp, 0);
@ -675,7 +693,11 @@ void insert_marker_to_file(char* logfilename, char* marker_text){
void receive_to_file(t_x502_hnd hnd, char* logfilename, uint32_t* inp_buff, uint32_t max_total_words, uint32_t timeout){
FILE* logfile_ptr = fopen(logfilename, "a");
char logfilename_tmp[300];
snprintf(logfilename_tmp, sizeof(logfilename_tmp), "%s.tmp", logfilename);
printf("tmp file: %s ",logfilename_tmp);
FILE* logfile_ptr = fopen(logfilename_tmp, "a");
// fprintf(logfile_ptr, "0xFF00000 \n");
// fprintf(logfile_ptr, "0xFFFFFFF \n");
@ -695,6 +717,7 @@ void receive_to_file(t_x502_hnd hnd, char* logfilename, uint32_t* inp_buff, uint
printf("receive error: %d\n======================\n", recv_Err_code);
}
fclose(logfile_ptr);
rename(logfilename_tmp, logfilename);
}
@ -726,8 +749,9 @@ int main(int argc, char** argv) {
main_state_set_defaults(&state);
parse_cmd_file(cmd_filename, &state);
// отладочный вывод принятых значений
printf("Parsed state: run_mode=%d, BF_mode=%d, run_length=%u, runs_N=%u, run_I=%u, data_path=%s\n",
(int)state.run_mode, (int)state.BF_mode, state.run_length, state.runs_N, state.run_I, state.data_path);
printf("Parsed state: run_mode=%d, BF_mode=%d, BlackFin_mode=%d, run_length=%u, runs_N=%u, run_I=%u, data_path=%s\n",
(int)state.run_mode, (int)state.BF_mode, (int)state.BlackFin_mode,
state.run_length, state.runs_N, state.run_I, state.data_path);
/* Removed unused temporary buffers and FFT/LFSM placeholders */