Welcome to the Pycom forum Forum
    • \[\[global:header.categories\]\]
    • \[\[global:header.recent\]\]
    • \[\[global:header.tags\]\]
    • \[\[global:header.popular\]\]
    • Login

    Explore Pybytes | Official Documentation | Report a Firmware Bug/Issue | GitHub

    New firmware release, version 1.6.0.b1

    Scheduled Pinned Locked Moved Announcements & News
    72 Posts 13 Posters 40.6k Views 13 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • L Offline
      livius
      last edited by

      @daniel

      i still have problem of corruption of files stored throught ftp :(

      think about people first, then computers

      D 1 Reply Last reply Reply Quote 0
      • D Offline
        daniel
        last edited by

        Hello,

        We just released new firmware, version 1.6.2.b1. These are the changes:

        • Fix issue when trying to send empty strings via sockets.
        • Update the ESP-IDF.
        • Correct RCZ3 uplink frequency and integers overflow.
        • Implement ntp_sync for RTC. Add simple support for timezones. See: https://docs.pycom.io/pycom_esp32/library/machine.RTC.html#machine.rtc.ntp_sync
        • Correctly set the DNS server. Also disable and enable the right TCP adapter interface.

        Cheers,
        Daniel

        J 1 Reply Last reply Reply Quote 0
        • D Offline
          daniel @livius
          last edited by

          I still have problem of corruption of files stored throught ftp :(

          @livius Really? We have been testing a lot during the last 2 weeks with large files and the issue seem resolved. Does it happen when you perform file operations in your script while at the same time the FTP server is busy with a transfer?

          L 1 Reply Last reply Reply Quote 0
          • L Offline
            livius @daniel
            last edited by livius

            @daniel
            it is by copy file throught e.g. filezilla and without while true: loop

            think about people first, then computers

            D 2 Replies Last reply Reply Quote 0
            • D Offline
              daniel @livius
              last edited by

              @livius what's the size of the file?

              L 1 Reply Last reply Reply Quote 0
              • D Offline
                daniel @livius
                last edited by

                @livius could it be that your file system is corrupted from previous firmware versions? Could you try:

                import os
                os.mkfs('/flash')
                

                to format the file system and start from scratch...

                Cheers,
                Daniel

                L 1 Reply Last reply Reply Quote 0
                • L Offline
                  livius @daniel
                  last edited by livius

                  @daniel
                  3905 bytes

                  I will test with 1.6.2 and will see if something changed

                  could it be that your file system is corrupted from previous firmware versions? Could you try:

                  I can erase all data - but i can back tomorrow with review

                  think about people first, then computers

                  1 Reply Last reply Reply Quote 0
                  • J Offline
                    JF002 @daniel
                    last edited by

                    @daniel With 1.6.1, I encountered some instabilities : the lopy hangs when trying to sync the project from Pymakr, and when I call gc.collect(). Are you aware of these issues? Is it possible that they are fixed in 1.6.2?

                    Thanks

                    1 Reply Last reply Reply Quote 1
                    • D Offline
                      daniel
                      last edited by

                      @livius can you show me an example of the gc.collect() crash?

                      J 1 Reply Last reply Reply Quote 0
                      • J Offline
                        JF002 @daniel
                        last edited by

                        @daniel

                        import gc
                        gc.collect()
                        

                        Just freeze my lopy. I noticed it when trying to fix another issue with ds1820 and mqtt : https://forum.pycom.io/topic/670/onewire-wifi-mqtt-crash/7

                        1 Reply Last reply Reply Quote 0
                        • D Offline
                          daniel
                          last edited by

                          Just freeze my lopy. I noticed it when trying to fix another issue with ds1820 and mqtt :

                          OK it happens, not always at the first time. I'm working on it... Wait for the 1.6.3.b1 coming a bit later...

                          J 1 Reply Last reply Reply Quote 0
                          • J Offline
                            JF002 @daniel
                            last edited by

                            @daniel said in New firmware release, version 1.6.0.b1:

                            Just freeze my lopy. I noticed it when trying to fix another issue with ds1820 and mqtt :

                            OK it happens, not always at the first time. I'm working on it... Wait for the 1.6.3.b1 coming a bit later...

                            Yeah, thank you! You're the best!

                            1 Reply Last reply Reply Quote 0
                            • D Offline
                              daniel
                              last edited by

                              Hello,

                              1.6.3.b1 is out there. In my tests the gc.collect() problem is now fixed. @livius @JF002 please test and let me know... Thanks!

                              Cheers,
                              Daniel

                              N C 2 Replies Last reply Reply Quote 1
                              • N Offline
                                Neo @daniel
                                last edited by Neo

                                @daniel Still hanging on LopY. In our script this is happening after wifi STA connect ... we have a gc.mem_free call. We removed all gc collect calls.

                                1 Reply Last reply Reply Quote 0
                                • D Offline
                                  daniel
                                  last edited by

                                  Then it's not the gc anymore in your case. If you can share with me a piece of code that can reproduce it I'll get onto it.

                                  Cheers,
                                  Daniel

                                  N 2 Replies Last reply Reply Quote 0
                                  • N Offline
                                    Neo @daniel
                                    last edited by

                                    @daniel Unfortunatelly the code is huge. I will try to reduce the area. I chekced also one auto tests only with LoRa initiation and Lora socket reading + gc.mem_free calls ... I saw that this test is hanging. I believe the real problem ties to memory leak /bad management. Here is the memory output at each second called soket recv and dump the mem_free:
                                    Memory 19264
                                    Memory 18656
                                    Memory 18080
                                    Memory 17504
                                    Memory 16928
                                    Memory 16352
                                    Memory 15776
                                    Memory 15200
                                    Memory 14624
                                    Memory 14048
                                    Memory 13472
                                    Memory 12896
                                    Memory 12320
                                    Memory 11744
                                    Memory 11168
                                    Memory 10592
                                    Memory 10016
                                    Memory 9440
                                    Memory 8864
                                    Memory 8288
                                    Memory 7712
                                    Memory 7136
                                    Memory 6560
                                    Memory 5984
                                    Memory 5408
                                    Memory 4832
                                    Memory 4256
                                    Memory 3680

                                    1 Reply Last reply Reply Quote 0
                                    • N Offline
                                      Neo @daniel
                                      last edited by

                                      @daniel Here it is your memory leak script:

                                      def test2():

                                      from network import LoRa
                                      _lora = LoRa(mode=LoRa.LORA)
                                      
                                      import socket
                                      _socket = socket.socket(socket.AF_LORA, socket.SOCK_RAW)
                                      _socket.setblocking(False)    
                                      
                                      import gc
                                      gc.enable()   
                                      while True:
                                      
                                          try:
                                              bytes = self._socket.recv(512)
                                              if len(bytes) > 0:
                                                  print(" %s RECV %s" %  (self, bytes))
                                              
                                          except Exception as e:   
                                                  print("_recv", str(e))    
                                                  
                                          print('Memory %d' % (gc.mem_free()))
                                      
                                          utime.sleep(1)
                                      

                                      test2()

                                      1 Reply Last reply Reply Quote 0
                                      • D Offline
                                        daniel
                                        last edited by daniel

                                        @Neo, I modified your script in order to be able to run it:

                                        from network import LoRa
                                        import utime
                                        
                                        class test:
                                            def __init__ (self):
                                                self._lora = LoRa(mode=LoRa.LORA)
                                        
                                                import socket
                                                self._socket = socket.socket(socket.AF_LORA, socket.SOCK_RAW)
                                                self._socket.setblocking(False)    
                                        
                                            def run(self):
                                                import gc
                                                gc.enable()
                                        
                                                while True:
                                                    try:
                                                        bytes = self._socket.recv(512)
                                                        if len(bytes) > 0:
                                                            print("%s RECV %s" %  (self, bytes))
                                        
                                                    except Exception as e:
                                                        print("_recv", str(e))
                                        
                                                    print('Memory %d' % gc.mem_free())
                                                    utime.sleep(1)
                                        
                                        t = test()
                                        t.run()
                                        

                                        I get the following output:

                                        Memory 54880
                                        Memory 54320
                                        Memory 53760
                                        Memory 53200
                                        Memory 52640
                                        Memory 52080
                                        Memory 51520
                                        Memory 50960
                                        Memory 50400
                                        Memory 49840
                                        Memory 49280
                                        Memory 48720
                                        Memory 48160
                                        Memory 47600
                                        Memory 47040
                                        Memory 46480
                                        Memory 45920
                                        

                                        Which is totally correct, that's the way Python works. Memory is consumed as code runs, and when there's no more memory, the garbage collector kicks in and frees memory so that code can continue running. At some point you see:

                                        Memory 5040
                                        Memory 4480
                                        Memory 3920
                                        Memory 3360
                                        Memory 2800
                                        Memory 2240
                                        Memory 1680
                                        Memory 1120
                                        Memory 560
                                        Memory 0
                                        Memory 54592
                                        Memory 54032
                                        Memory 53472
                                        Memory 52912
                                        

                                        However, if I add a gc.collect() line like this:

                                        from network import LoRa
                                        import utime
                                        
                                        class test:
                                            def __init__ (self):
                                                self._lora = LoRa(mode=LoRa.LORA)
                                        
                                                import socket
                                                self._socket = socket.socket(socket.AF_LORA, socket.SOCK_RAW)
                                                self._socket.setblocking(False)    
                                        
                                            def run(self):
                                                import gc
                                                gc.enable()
                                        
                                                while True:
                                                    try:
                                                        bytes = self._socket.recv(512)
                                                        if len(bytes) > 0:
                                                            print("%s RECV %s" %  (self, bytes))
                                        
                                                    except Exception as e:
                                                        print("_recv", str(e))
                                        
                                                    print('Memory %d' % gc.mem_free())
                                                    utime.sleep(1)
                                                    gc.collect()
                                        
                                        t = test()
                                        t.run()
                                        

                                        I get:

                                        Memory 55520
                                        Memory 55664
                                        Memory 55648
                                        Memory 55648
                                        Memory 55648
                                        Memory 55648
                                        Memory 55648
                                        Memory 55648
                                        Memory 55648
                                        Memory 55648
                                        Memory 55648
                                        Memory 55648
                                        Memory 55648
                                        Memory 55648
                                        Memory 55648
                                        

                                        Which at least in this test it shows that there's no memory leak...

                                        L C N 3 Replies Last reply Reply Quote 0
                                        • C Offline
                                          crankshaft @daniel
                                          last edited by crankshaft

                                          @daniel - can you make a new announcement when a new beta is released, the topic of this current thread is ... version 1.6.0.b1 however I think it is now version 1.6.3.b1 ?

                                          You have to trawl and check every post to see if a new release has been made and it's not very productive.

                                          Or at least update the header

                                          1 Reply Last reply Reply Quote 0
                                          • L Offline
                                            livius @daniel
                                            last edited by livius

                                            @daniel said in New firmware release, version 1.6.0.b1:

                                            bytes = self._socket.recv(512)

                                            One hint if i can suggest something
                                            what if you send something to this socket and this line recive some data?

                                            bytes = self._socket.recv(512)
                                            

                                            is this still the same result?
                                            I can test it self only in the evening (and only on different socket - Wipy2) - but maybe result is different and you can find something interesting
                                            If not then we can only wait for @Neo to provide some sample

                                            @crankshaft good point

                                            think about people first, then computers

                                            1 Reply Last reply Reply Quote 0

                                            Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                                            Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                                            With your input, this post could be even better 💗

                                            Register Login
                                            • 1
                                            • 2
                                            • 3
                                            • 4
                                            • 3 / 4
                                            • First post
                                              Last post

                                            Pycom on Twitter

                                            Pycom