[Microbit-Python] another maximum size of program thread

Jeff Young jeff at perfectmotion.co.uk
Thu Jun 30 11:06:28 EDT 2016


Yes there is definitely some limit in place.  

You think it may be a limit on the size of a single file?

I'll try modularising as you suggest.

Just as a matter of interest I think the run time partition is 8Kb

from microbit import *
x=[]
for i in range(0,9999):
    print(i)
    x.append(2)

from .... REPL.....

1021
1022
1023
1024
Traceback (most recent call last):
  File "__main__", line 6, in <module>
MemoryError: memory allocation failed, allocating 8192 bytes
MicroPython v1.7-9-gbe020eb on 2016-04-18; micro:bit with nRF51822

so a list containing 1025 integers breaks the microbit at 8kb exactly.

So we have 8kb runtime space
My script that breaks is around 4kb ( 130 lines ) from windows explorer.
Gives us 12kb.  Is micropython ~4kb by any chance ?
Being able to change the balance ie runtime 6kb/code 6kb would be helpful.



-----Original Message-----
From: Microbit [mailto:microbit-bounces+jeff=perfectmotion.co.uk at python.org]
On Behalf Of Nicholas H.Tollervey
Sent: 30 June 2016 15:38
To: microbit at python.org
Subject: Re: [Microbit-Python] another maximum size of program thread

I believe there is a max file length due to the constraints of the device
(Mark Shannon will be able to confirm this). Perhaps you're hitting that?
Why not modularise your code and import it as required in main.py..?

Just guessing out loud here... YMMV.

:-)

N.

On 30/06/16 15:35, Jeff Young wrote:
> Good idea.  I gave it a try...
> 
> Installed microfs on my PC with a 'pip install microfs'
> Flashed the microbit from the mu editor with a blank file. ( installed
> runtime)
> Uploaded the first test script to the microbit with 'ufs  put main.py'
> Hit the restart button.
> It worked perfectly with this basic script ( main.py )
> 
> from microbit import *
> while True:
>     display.scroll('Hello, World!')
>     display.show(Image.HEART)
>     sleep(2000)
> 
> Tried with my problem script getting smaller and smaller...
> 
> ufs put memory.py
> MemoryError: memory allocation failed, allocating 3381 bytes
> 
> ufs put main.py
> MemoryError: memory allocation failed, allocating 3087 bytes
> 
> ufs put main.py
> MemoryError: memory allocation failed, allocating 2756 bytes
> 
> I even got past the point where the SAME code loads and runs from mu ! 
> i.e If I take the 2756bytes version above and load it into Mu and 
> flash it works.
> 
> Close but no cigar...
> 
> -----Original Message-----
> From: Microbit 
> [mailto:microbit-bounces+jeff=perfectmotion.co.uk at python.org]
> On Behalf Of Nicholas H.Tollervey
> Sent: 30 June 2016 14:55
> To: microbit at python.org
> Subject: Re: [Microbit-Python] another maximum size of program thread
> 
> Jeff,
> 
> A quick thought. If it's script length that's the problem, you could 
> just use the file-system. Viz:
> 
> https://microbit-micropython.readthedocs.io/en/latest/tutorials/storag
> e.html
> #mainly-main-py
> 
> Hope this helps,
> 
> N.
> 
> On 30/06/16 14:47, Jeff Young wrote:
>> Hi All
>>
>>  
>>
>> First time posting here.  Checked the archives and found my exact 
>> problem outlined in a thread titled 'Maximum Size of Microbit Python 
>> Program' from Jun '16.
>>
>> I've tried a few things and I'm hitting the 'size of script' memory 
>> problem as outlined in a post from Nicholas Tollervey.  Runtime 
>> memory is fine.
>>
>>  
>>
>> The program never starts and I just see;
>>
>>  
>>
>> MemoryError: memory allocation failed, allocating 3688 bytes
>>
>> MicroPython v1.7-9-gbe020eb on 2016-04-18; micro:bit with nRF51822
>>
>>  
>>
>> The thread doesn't really reach any solutions so I was wondering if 
>> anyone had found a workround ?  I've tried Mu and online editors.
>> Same result.  I'm seeing the messages via REPL in Mu
>>
>>  
>>
>> My program is 127 lines working but add in another 8 lines and it 
>> breaks.  No comments in the code ;-)
>>
>>  
>>
>> As an aside I originally wrote it using python classes and objects 
>> but found I quickly hit the runtime error limit after about 3 or 4
objects.
>> Rewrote with simple lists and we're up to 20 objects before hitting 
>> the runtime limit.  I'm thinking classes/objects consume a lot of memory.
>> Also lists-of-lists seem quite memory hungry.
>>
>>  
>>
>> It would be great to be able to see how much memory is being 
>> consumed/free during runtime.  Great to be able to see the size of 
>> objects etc in memory.
>>
>>  
>>
>> I'm also wondering it there is some way to re-balance the memory 
>> partitioning between the block of memory that holds the code and the 
>> runtime memory ? ie take a few kb from the run time partition and add 
>> it to the code partition ?
>>
>>  
>>
>> Thanks
>>
>>  
>>
>> Jeff
>>
>>  
>>
>>  
>>
>>
>>
>> _______________________________________________
>> Microbit mailing list
>> Microbit at python.org
>> https://mail.python.org/mailman/listinfo/microbit
>>
> are you in a meeting @be
> 
> 
> _______________________________________________
> Microbit mailing list
> Microbit at python.org
> https://mail.python.org/mailman/listinfo/microbit
> 





More information about the Microbit mailing list