Ring buffer fixes and spark time compute
This commit is contained in:
@@ -6,17 +6,17 @@
|
||||
#include <ring_buffer.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->w_head++;
|
||||
return;
|
||||
}
|
||||
|
||||
uint32_t ringBufferRead(ring_buffer_t *rb, uint8_t idx) {
|
||||
return rb->buffer[rb->w_head - 1 - idx];
|
||||
uint32_t ringBufferRead(volatile ring_buffer_t *rb, uint8_t neg_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;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#include "main.h"
|
||||
#include "ring_buffer.h"
|
||||
#include "tasks.h"
|
||||
#include <stdint.h>
|
||||
|
||||
void crankHandler(void *argument) {
|
||||
for (;;) {
|
||||
@@ -60,6 +61,13 @@ void crankHandler(void *argument) {
|
||||
if (state_g.crank_state == CYCLE_COMPRESSION &&
|
||||
state_g.sync_state == SYNC_OK) {
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user