Machine-translated by Google. Questions are authored in English.
Top

Discussion

A handler and a task share this flag, on a 32-bit core.

volatile uint32_t flag = 0;
/* handler */  flag = 1;
/* task */     if (flag) { flag = 0; handle(); }

The arrangement is

  • A.entirely safe
  • B.unsafe only because the variable should not be volatile
  • C.unsafe because a 32-bit write is never atomic
  • D.liable to lose an event set between the test and the clear

Answer: D

An interrupt falling between the test and the assignment sets the flag and the task then clears it without handling that second event. A semaphore or a notification counts the events instead of merely recording that at least one occurred, which is why they exist.

No comment is present. Be the first to comment.
Loading…

Post your comment

Please log in or register to post a comment.