diff options
| author | Shlomo Hecht <shlomo@twine-s.com> | 2019-05-30 17:33:20 +0300 |
|---|---|---|
| committer | Shlomo Hecht <shlomo@twine-s.com> | 2019-05-30 17:33:20 +0300 |
| commit | b525fbcad1ac8c7126caa82ec8458ffbb6284384 (patch) | |
| tree | 61abe4c1610fc2e0b6af8e5f926d5624692df2fe /Software/Embedded_SW/Embedded/Modules | |
| parent | 405096b3d489f4ea7b50b1d5db7d32241251b8d7 (diff) | |
| download | Tango-b525fbcad1ac8c7126caa82ec8458ffbb6284384.tar.gz Tango-b525fbcad1ac8c7126caa82ec8458ffbb6284384.zip | |
Version 1.4.0.4: Improved memory handling, handles SW crash after a job failure
Diffstat (limited to 'Software/Embedded_SW/Embedded/Modules')
6 files changed, 49 insertions, 26 deletions
diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c index 73532a7d2..a4e1379c5 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c @@ -1051,6 +1051,12 @@ void SendEventNotifications(void) if (AlarmState[i].Status == true) { EventsResponse.n_events++; + if ((AlarmState[i].EventPtr == NULL) ||(AlarmState[i].EventPtr->base.descriptor->sizeof_message != 24)) + { + LOG_ERROR(i,"bad pointer for event"); + EventsResponse.n_events--; + AlarmState[i].Status = false; + } } } @@ -1098,10 +1104,12 @@ void SendEventNotifications(void) my_free(container_buffer); } } + else + AlarmHandlingStop(); if (EventsResponse.events) my_free(EventsResponse.events); - if (responseContainer.data.data) - my_free(responseContainer.data.data); + //if (responseContainer.data.data) + // my_free(responseContainer.data.data); } uint32_t ResolveEventRequestFunc(MessageContainer* requestContainer) { diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c index b89fa43ed..a3b2022e9 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c @@ -423,7 +423,7 @@ int j=0; MessageContainer diagnosticsresponseContainer; uint8_t diagnostics_response_buffer[3500]; uint8_t *diagnostics_response_ptr = diagnostics_response_buffer; -uint8_t* diagnosticscontainer_buffer=0; +char * diagnosticscontainer_buffer=0; int LargeMessagesD = 0; void SendDiagnostics(void) diff --git a/Software/Embedded_SW/Embedded/Modules/General/process.c b/Software/Embedded_SW/Embedded/Modules/General/process.c index 277891861..b0351b4ff 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/process.c +++ b/Software/Embedded_SW/Embedded/Modules/General/process.c @@ -235,33 +235,41 @@ uint32_t ProcessParamsInit(void) UploadProcessParametersRequest* request; FileHandle = my_malloc(sizeof(FIL)); - Fresult = FileOpen(ProcessParamsConfigPath, &Bytes, FileHandle); - if (Fresult == FR_OK) + if (FileHandle) { - buffer = my_malloc (Bytes); - if (buffer) + Fresult = FileOpen(ProcessParamsConfigPath, &Bytes, FileHandle); + if (Fresult == FR_OK) { - for (i=0;i<=(Bytes/100);i++) + buffer = my_malloc (Bytes); + if (buffer) { - Fresult = f_read(FileHandle,&buffer[i*100],100,&j ); - k+=j; - } - if (k!=Bytes) - LOG_ERROR(k,"File read error"); + for (i=0;i<=(Bytes/100);i++) + { + Fresult = f_read(FileHandle,&buffer[i*100],100,&j ); + k+=j; + } + if (k!=Bytes) + LOG_ERROR(k,"File read error"); - request = upload_process_parameters_request__unpack(NULL, Bytes, buffer); - // ProcessParameters* ProcessParams = process_parameters__unpack(NULL, Bytes, buffer); - if (request) - { - ProcessParameters* ProcessParams = request->processparameters; - Fresult = HandleProcessParameters(ProcessParams); - //memcpy (&ProcessParametersKeep,ProcessParams,sizeof(ProcessParameters)); - upload_process_parameters_request__free_unpacked(request,NULL); - } - free (buffer); + request = upload_process_parameters_request__unpack(NULL, Bytes, buffer); + // ProcessParameters* ProcessParams = process_parameters__unpack(NULL, Bytes, buffer); + if (request) + { + ProcessParameters* ProcessParams = request->processparameters; + Fresult = HandleProcessParameters(ProcessParams); + //memcpy (&ProcessParametersKeep,ProcessParams,sizeof(ProcessParameters)); + upload_process_parameters_request__free_unpacked(request,NULL); + } + my_free (buffer); + } + f_close(FileHandle); + } + else + { + LOG_ERROR(Fresult,"File open error"); } + my_free (FileHandle); } - f_close(FileHandle); return Fresult; } diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c index 0907c4a67..e9efd97df 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c @@ -207,7 +207,7 @@ uint32_t IDS_StopHomeDispenser (uint32_t DispenserId) Control3WayValvesWithCallback ((Valves_t)DispenserId, MidTank_Dispenser, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer if (DispenserId == LUBRICANT_DISPENSER) { - Lubricant_2Way_Valve (START); + Lubricant_2Way_Valve (STOP); } MotorSetMicroStep(MotorId, MotorsCfg[MotorId].microstep); diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index aea16bb60..f7cf38ba8 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -475,12 +475,16 @@ c. Go to step 2.a x Segment.BrushStopsCount. if (SegmentPtr) my_free(SegmentPtr); + SegmentPtr = NULL; if (BrushStopPtr) my_free(BrushStopPtr); + BrushStopPtr = NULL; if (Segment != NULL) job_description_file_segment__free_unpacked(Segment,NULL); + Segment = NULL; if (BrushStop != NULL) job_description_file_brush_stop__free_unpacked (BrushStop,NULL); + BrushStop = NULL; Fresult = f_close(FileHandle); GeneralHwReady = true; REPORT_MSG (n_segments, "Finished checking the file"); diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c index a285d4194..4743008e5 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c @@ -114,7 +114,10 @@ uint32_t Control_Delta_Position_Pass(uint32_t Current_Read,uint32_t Previous_Rea if (Current_Read < Previous_Read) + { Time_Pass = (MAX_COUNTER - Previous_Read) + Current_Read + 1; + Report("Length rollover",__FILE__,__LINE__,(int)Current_Read,RpWarning,(int)Previous_Read,0); + } else Time_Pass = Current_Read - Previous_Read; @@ -771,7 +774,7 @@ void SetOriginMotorSpeed(float process_speed) //MotorControlConfig[Motor_i].m_SetParam = motor_speed; OriginalMotorSpd_2PPS[Motor_i] = (int) motor_speed; CurrentControlledSpeed[Motor_i] = (int) motor_speed; - Report("Original Speed",__FILE__,Motor_i,motor_speed,RpWarning,process_speed,0); + //Report("Original Speed",__FILE__,Motor_i,motor_speed,RpWarning,process_speed,0); for (i = 0; i <= MAX_CONTROL_SAMPLES; i++) MotorSpeedSamples[Motor_i][i] = motor_speed; |
