Просмотр исходного кода

Solve the problem of event log misaligned access

Signed-off-by: FuangCao <cavan.cao@foxmail.com>
FuangCao 4 лет назад
Родитель
Сommit
186fc847ac
3 измененных файлов с 11 добавлено и 8 удалено
  1. 1 1
      Application/app/bms_message.c
  2. 9 6
      Application/app/event_record.c
  3. 1 1
      Application/app/event_record.h

+ 1 - 1
Application/app/bms_message.c

@@ -243,7 +243,7 @@ void process_bms_message(can_frame_t *frame, int len){
 		case CAN_KEY_GET_EVENT: {
 			u8 event[sizeof(event_record_t) * 8 + 1];
 			u16 offset = DECODE_U16(frame->data);
-			int num = get_event(8, offset, (event_record_t *)(event + 1));
+			int num = get_event(8, offset, event + 1);
 			*event = (u8)num;
 			protocol_send_bms_info(frame->head.can_addr, frame->key, event, sizeof(event_record_t) * num + 1);
 			break;

+ 9 - 6
Application/app/event_record.c

@@ -26,19 +26,22 @@ static int _event_size(void) {
 	return event_w_idx;
 }
 
-int get_event(int num, int offset, event_record_t *recoder) {
+int get_event(int num, int offset, u8 *recoder) {
 	if (offset >= _event_size()) {
 		return 0;
 	}
 	num = MIN(num, _event_size()-offset);
-	int start = offset + event_w_idx;
 	int rtn = 0;
+
+	if (_event_full) {
+		offset += event_w_idx;
+	}
+
 	while(num > 0) {
-		start = start % MAX_EVENT_SIZE;
-		memcpy(recoder, &_event[start], sizeof(event_record_t));
+		memcpy(recoder, _event + offset % MAX_EVENT_SIZE, sizeof(event_record_t));
 		num --;
-		start ++;
-		recoder ++;
+		offset ++;
+		recoder += sizeof(event_record_t);
 		rtn ++;
 	}
 	return rtn;

+ 1 - 1
Application/app/event_record.h

@@ -26,6 +26,6 @@ typedef struct {
 }event_record_t;
 
 void push_event(event_id_t id, u32 data);
-int get_event(int num, int offset, event_record_t *recoder);
+int get_event(int num, int offset, u8 *recoder);
 #endif /* _Event_Recorde_H__ */