--- a/SOM6Target/plc_SOM6_main_retain.c Mon Feb 27 11:24:44 2023 +0100
+++ b/SOM6Target/plc_SOM6_main_retain.c Mon Feb 27 12:12:18 2023 +0100
@@ -103,6 +103,7 @@
+ // TODO: use REALTIME priority, one step lower than PLC if(err = pthread_create(&RETAIN_thread, NULL, (void*) &RETAIN_thread_proc, NULL)) {
fprintf(stderr, "Failed to create retain SPI thread. Error code: %d.\n", err);
@@ -139,20 +140,13 @@
int last_written = __atomic_load_n(&RETAIN_last_written, __ATOMIC_SEQ_CST);
int try_buf_idx = 1-last_written;
- while(!RETAIN_got_lock){
- RETAIN_selected_buf = &buf[try_buf_idx];
- RETAIN_idx = try_buf_idx;
- long previous_lock_state = AtomicCompareExchange(
- &RETAIN_selected_buf->lock,
- RETAIN_got_lock = previous_lock_state == BUFFER_FREE;
- // // Wrting zero in RAM to "invalidate" makes no sense since it still
- // // has to be copied to SPI NVRAM
- // if(RETAIN_got_lock){
- // bzero(&RETAIN)selected_buf.id[0], IDLEN);
+ RETAIN_selected_buf = &buf[try_buf_idx]; + RETAIN_idx = try_buf_idx; + long previous_lock_state = AtomicCompareExchange( + &RETAIN_selected_buf->lock, + RETAIN_got_lock = previous_lock_state == BUFFER_FREE; // called at the end of publish, after collecting
@@ -161,9 +155,7 @@
- // // Done at init once for all
- // memcpy(priv.buf.id, PLC_ID, IDLEN);
RETAIN_selected_buf->full = 1;
&RETAIN_selected_buf->lock,