RTX - Data integrity

Hello,

I have a pretty generic question about embedded RTOS systems and data integrity.

I'm using RTX and I have several instances of structures that need to be read/written from several task.

As an example, take:

struct demo
{
int var_a;
int var_b;
int var_a_max;
int var_a_min;
}

If I have several global demo instances, what is the 'danger' in allowing several tasks to R/W the global instances?

I understand that the values could change mid execution but say you implemented a simple "lock and copy" procedure before each tasks loop execution.

Would mailboxes really be required in this case?

Further, what if all tasks only ever read/write one of the fields (var_a) do you even need a lock and copy or would simple copy do?

Finally, say I did want to implement a generic mailbox pattern so that any task could request a copy from a managing task and send updates to a managing task. Does any one have an example of such a pattern?

Thanks. I appreciate any discussion and opinion on this topic, I'm looking for the most efficient (time and complexity) way to proceed while still being 'safe' in my logic.

M

Parents
  • If I have several global demo instances, what is the 'danger' in allowing several tasks to R/W the global instances?

    Because assignment/read operations that involve memory are generally not atomic, register values might get corrupted due to a context switch while such an operation is in progress.

    Would mailboxes really be required in this case?

    I would say a mutex would be a better choice - but that totally depends on the details of your application.

    Further, what if all tasks only ever read/write one of the fields (var_a) do you even need a lock and copy or would simple copy do?

    Any write operation requires synchronization primitives. It might be safer to lock the entire instance considering possible future developments and maintenance.

Reply
  • If I have several global demo instances, what is the 'danger' in allowing several tasks to R/W the global instances?

    Because assignment/read operations that involve memory are generally not atomic, register values might get corrupted due to a context switch while such an operation is in progress.

    Would mailboxes really be required in this case?

    I would say a mutex would be a better choice - but that totally depends on the details of your application.

    Further, what if all tasks only ever read/write one of the fields (var_a) do you even need a lock and copy or would simple copy do?

    Any write operation requires synchronization primitives. It might be safer to lock the entire instance considering possible future developments and maintenance.

Children
More questions in this forum