• kevincox@lemmy.ml
      link
      fedilink
      arrow-up
      1
      ·
      6 months ago

      I’ve written these cycle-perfect sleep loops before.

      It gets really complicated if you want to account for time spent in interrupt handlers.

        • towerful@programming.dev
          link
          fedilink
          arrow-up
          1
          ·
          6 months ago

          Nah, some MCUs have low power modes.
          ESP32 has 5 of them, from disabling fancy features, throttling the clock, even delegating to an ultra low power coprocessor, or just going to sleep until a pin wakes it up again. It can go from 240mA to 150uA and still process things, or sleep for only 5uA.

  • Bronco1676@lemmy.ml
    link
    fedilink
    arrow-up
    2
    ·
    5 months ago

    I just measured it, and this takes 0.17 seconds. And it’s really reliable, I added another zero to that number and it was 1.7 seconds

  • Dr. Moose@lemmy.world
    link
    fedilink
    English
    arrow-up
    1
    ·
    edit-2
    6 months ago

    Javascript enters chat:

    await new Promise(r => setTimeout(r, 2000));
    

    Which is somehow even worse.

  • ExtraMedicated@lemmy.world
    link
    fedilink
    English
    arrow-up
    0
    ·
    6 months ago

    I actually remember the teacher having us do this in high school. I tried it again a few years later and it didn’t really work anymore.

    • snaggen@programming.dev
      link
      fedilink
      arrow-up
      0
      ·
      6 months ago

      On my first programming lesson, we were taught that 1 second sleep was for i = 1 to 1000 😀, computers was not that fast back then…

      • ferret@sh.itjust.works
        link
        fedilink
        English
        arrow-up
        0
        ·
        6 months ago

        I mean maybe in an early interpreted language like BASIC… even the Intel 8086 could count to 1000 in a fraction of a second

        • snaggen@programming.dev
          link
          fedilink
          arrow-up
          1
          ·
          6 months ago

          This was in 1985, on a ABC80, a Swedish computer with a 3 MHz CPU. So, in theory it would be much faster, but I assume there were many performance losses (slow basic interpretor and thing like that) so that for loop got close enough to a second for us to use.

          https://en.m.wikipedia.org/wiki/ABC_80

  • Matty_r@programming.dev
    link
    fedilink
    arrow-up
    0
    ·
    6 months ago

    This should be the new isEven()/isOdd(). Calculate the speed of the CPU and use that to determine how long it might take to achieve a ‘sleep’ of a required time.

    • henfredemars@infosec.pub
      link
      fedilink
      English
      arrow-up
      1
      ·
      6 months ago

      I took an embedded hardware class where specifically we were required to manually calculate our sleeps or use interrupts and timers rather than using a library function to do it for us.