Ring buffer fixes and spark time compute

This commit is contained in:
2026-06-03 11:18:44 +02:00
parent 42e64b673c
commit e346c67e00
4 changed files with 16 additions and 7 deletions

View File

@@ -6,6 +6,7 @@
#include <stdint.h> #include <stdint.h>
#define MAX_CAM_MISS 2 #define MAX_CAM_MISS 2
#define SPARK_ADVANCE 20
typedef enum { SYNC_OK = 0, SYNC_PENDING = 1, SYNC_NOT_OK = 2 } sync_state_t; typedef enum { SYNC_OK = 0, SYNC_PENDING = 1, SYNC_NOT_OK = 2 } sync_state_t;

View File

@@ -8,8 +8,8 @@ typedef struct ring_buffer_t {
uint8_t w_head; uint8_t w_head;
} ring_buffer_t; } ring_buffer_t;
inline void ringBufferPush(ring_buffer_t *rb, uint32_t value); inline void ringBufferPush(volatile ring_buffer_t *rb, uint32_t value);
inline uint32_t ringBufferRead(ring_buffer_t *rb, uint8_t idx); inline uint32_t ringBufferRead(volatile ring_buffer_t *rb, uint8_t neg_idx);
inline void ringBufferRevert(ring_buffer_t *rb, uint8_t val); inline void ringBufferRevert(volatile ring_buffer_t *rb, uint8_t val);

View File

@@ -6,17 +6,17 @@
#include <ring_buffer.h> #include <ring_buffer.h>
#include <stdbool.h> #include <stdbool.h>
void ringBufferPush(ring_buffer_t *rb, uint32_t value) { void ringBufferPush(volatile ring_buffer_t *rb, uint32_t value) {
rb->buffer[rb->w_head] = value; rb->buffer[rb->w_head] = value;
rb->w_head++; rb->w_head++;
return; return;
} }
uint32_t ringBufferRead(ring_buffer_t *rb, uint8_t idx) { uint32_t ringBufferRead(volatile ring_buffer_t *rb, uint8_t neg_idx) {
return rb->buffer[rb->w_head - 1 - idx]; return rb->buffer[rb->w_head - 1 - neg_idx];
} }
void ringBufferRevert(ring_buffer_t *rb, uint8_t val) { void ringBufferRevert(volatile ring_buffer_t *rb, uint8_t val) {
rb->w_head -= val; rb->w_head -= val;
return; return;
} }

View File

@@ -8,6 +8,7 @@
#include "main.h" #include "main.h"
#include "ring_buffer.h" #include "ring_buffer.h"
#include "tasks.h" #include "tasks.h"
#include <stdint.h>
void crankHandler(void *argument) { void crankHandler(void *argument) {
for (;;) { for (;;) {
@@ -60,6 +61,13 @@ void crankHandler(void *argument) {
if (state_g.crank_state == CYCLE_COMPRESSION && if (state_g.crank_state == CYCLE_COMPRESSION &&
state_g.sync_state == SYNC_OK) { state_g.sync_state == SYNC_OK) {
DEBUG_LOG("Spark schedule reached, congrats\n\r"); DEBUG_LOG("Spark schedule reached, congrats\n\r");
uint32_t t_now = ringBufferRead(&state_g.crank_RB, 0);
uint32_t t_prev = ringBufferRead(&state_g.crank_RB, 1);
uint32_t d1a = t_now - t_prev;
// TODO: Map interpolation rather than SPARK_ADVANCE CONSTANT
uint32_t d_spark = d1a * (45 - SPARK_ADVANCE) / 180;
uint32_t t_spark = t_now + d_spark;
// TODO: schedule spark // TODO: schedule spark
} }
} }