lpcmanager

Fix infinite loop in retain code for SOM6 + Cosmetic changes: removed/added comments, re-indent.
--- 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 @@
}
int err;
+ // 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);
return;
@@ -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,
- BUFFER_FREE,
- BUFFER_BUSY);
- 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,
+ BUFFER_FREE,
+ BUFFER_BUSY);
+ RETAIN_got_lock = previous_lock_state == BUFFER_FREE;
}
// called at the end of publish, after collecting
@@ -161,9 +155,7 @@
{
if(RETAIN_got_lock){
RETAIN_got_lock = 0;
- // // Done at init once for all
- // if(PLC_ID)
- // memcpy(priv.buf.id, PLC_ID, IDLEN);
+
RETAIN_selected_buf->full = 1;
AtomicCompareExchange(
&RETAIN_selected_buf->lock,