[ivory-search id="2373" title="AJAX Search Form"]
Search

Become a leader in the IoT community!

New DevHeads get a 320-point leaderboard boost when joining the DevHeads IoT Integration Community. In addition to learning and advising, active community leaders are rewarded with community recognition and free tech stuff. Start your Legendary Collaboration now!

Step 1 of 5

CREATE YOUR PROFILE *Required

OR
Step 2 of 5

WHAT BRINGS YOU TO DEVHEADS? *Choose 1 or more

Collaboration & Work 🤝
Learn & Grow 📚
Contribute Experience & Expertise 🔧
Step 3 of 5

WHAT'S YOUR INTEREST OR EXPERTISE? *Choose 1 or more

Hardware & Design 💡
Embedded Software 💻
Edge Networking
Step 4 of 5

Personalize your profile

Step 5 of 5

Read & agree to our COMMUNITY RULES

  1. We want this server to be a welcoming space! Treat everyone with respect. Absolutely no harassment, witch hunting, sexism, racism, or hate speech will be tolerated.
  2. If you see something against the rules or something that makes you feel unsafe, let staff know by messaging @admin in the "support-tickets" tab in the Live DevChat menu.
  3. No age-restricted, obscene or NSFW content. This includes text, images, or links featuring nudity, sex, hard violence, or other graphically disturbing content.
  4. No spam. This includes DMing fellow members.
  5. You must be over the age of 18 years old to participate in our community.
  6. Our community uses Answer Overflow to index content on the web. By posting in this channel your messages will be indexed on the worldwide web to help others find answers.
  7. You agree to our Terms of Service (https://www.devheads.io/terms-of-service/) and Privacy Policy (https://www.devheads.io/privacy-policy)
By clicking "Finish", you have read and agreed to the our Terms of Service and Privacy Policy.

Handling Non-Atomic Operations for 64-bit Variables on a 32-bit Non-Preemptive System

Hi everyone, @Middleware & OS I’m struggling to find sufficient material on handling non-atomic operations, and I’d appreciate some guidance.

I need to maintain a microsecond count in a 64-bit variable, with a 32-bit processor system that uses a non-preemptive scheduler. An ISR will update this variable every microsecond. My system provides functions to clear the variable and read its value.
Since the processor is 32-bit, accessing the entire 64-bit variable atomically might not be possible. Concerned how I can ensure that the read function doesn’t retrieve a partially updated value as in reading half from the old value and half from the new value during an interrupt?

In non-preemptive scheduling context now, are there standard approaches to guarantee consistent reads of the 64-bit variable? If so, could anyone help me on some of these techniques?

  1. Marvee Amasi#0000

    I know double buffering is a common technique for handling non atomic operations. You can create two 32-bit variables `buffer_a` and `buffer_b` and use them as a double buffer. ISR would update one buffer say `buffer_a` with the new microsecond count. The read function would access the other buffer `buffer_b` . You can then toggle between which buffer the ISR writes to and which the read function accesses so that a complete value is always read, even if ISR updates the other buffer during the read operation

  2. Sterling#0000

    Hmm, okay okay… Makes sense, Thanks for this @marveeamasi 🙏

  3. Marvee Amasi#0000

    Yh you welcome @ifreakio you know you can temporarily disable interrupts around the update operation in the ISR and the read operation in your main code

  4. Sterling#0000

    To give me exclusive access to the variable during these critical sections

  5. UC GEE#0000

    Yeah, you are right @marveeamasi 👍… @ifreakio try to disable interrupts during the read operation to prevent the ISR from updating the variable while you’re reading it.This will enable you to read either the old or new value in its entirety.

  6. Marvee Amasi#0000

    Okay yh
    re enable interrupts after the operation is complete !! But pls use this approach with caution cus disabling interrupts for too long can make your system unresponsiveness

CONTRIBUTE TO THIS THREAD

Leaderboard

RANKED BY XP

All time
  • 1.
    Avatar
    @Nayel115
    1620 XP
  • 2.
    Avatar
    @UcGee
    650 XP
  • 3.
    Avatar
    @melta101
    600 XP
  • 4.
    Avatar
    @lifegochi
    250 XP
  • 5.
    Avatar
    @Youuce
    180 XP
  • 6.
    Avatar
    @hemalchevli
    170 XP