This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Using LDREXD in a task/normal mode and STREXD in ISR

On a Cortex R,  where ldm/stm are interruptible, can i use ldrex and strex for double words to pass from ISR to a task in this way?

in ISR:

 STREXD,   //  Ignoring  (yes, dumping it)  if it actually failed to write , do no spin-lock or retry here at all

in Task :

  LDREXD   // load ..
  CLREX     // clear exclusion

One core  (2 in dual lock-step),  no sharing mem with other cores.  Will this work for automically write/read double words in the scenario one ISR feeding a task?

And yes, no buffering between them.

Parents
  • Wait, no dummy "ldrexd" needed:
    a)
    1) "main" => ldrexd => sets lock
    2) "main" (no ISR) => strexd succeeds => no new data

    b)
    1) "main" => ldrexd => sets lock
    2) isr => strexd (succeeds or not, does not matter as you wrote), but if succeeded, lock is cleared
    3) "main" => strexd fails => follow with an "ldrexd" and "clrex" to get new data

    Edit: Typo

Reply
  • Wait, no dummy "ldrexd" needed:
    a)
    1) "main" => ldrexd => sets lock
    2) "main" (no ISR) => strexd succeeds => no new data

    b)
    1) "main" => ldrexd => sets lock
    2) isr => strexd (succeeds or not, does not matter as you wrote), but if succeeded, lock is cleared
    3) "main" => strexd fails => follow with an "ldrexd" and "clrex" to get new data

    Edit: Typo

Children