[PD-dev] trying to understand class_new

Boštjan Jerko bojerko at gmail.com
Tue Mar 24 09:25:27 CET 2020


I don’t use PDINSTANCE, but after checking some online stuff I thought maybe the size of the stack is the problem so I’ve changed it from 0x400 to 0x4000 and heap size from 0x200 to 0x2000, but no success.
Still - I guess there is something going on with the memory so I’ll be checking this some more.


> On 22 Mar 2020, at 18:01, Christof Ressi <info at christofressi.com> wrote:
> 
> Don't worry too much about *vp for now. The fault actually occurs in m_class.c:506.
> 
> Do you use PDINSTANCE?
> 
> Also, you can check stm32f4xx_it.c:90 to see what kind of error you're getting.
> 
> How much memory do you have available?
> 
> Christof
> 
> On 22.03.2020 17:15, Boštjan Jerko wrote:
>> I’m attaching images from debugger. The strange thing is that type1 is A_DEFFLOAT, but *vp is still A_NULL. Guess I need to work (at least) on that.
>> That way the loop doesn’t even get started.
>> So one image shows values of type1 and *vp and the other is stack.
>> 
>> I’m using stm32f429 and Segger programmer with their Ozone debugger.
>> 
>> B.
>> 
>> <vp_value.png><stack.png>
>> 
>> 
>>> On 22 Mar 2020, at 11:52, Christof Ressi <info at christofressi.com <mailto:info at christofressi.com>> wrote:
>>> 
>>>> and then in function class_new vp is empty so while (*vp) doesn’t go through it
>>> What do you mean by "empty", when exactly is "vp" empty and how did you test?
>>> 
>>> "vp" is initially set to "type1", which in the case of pdint_setup() is "A_DEFFLOAT". So it would be very strange if "vp" was initially empty in the case pdint_setup(). The while loop sets "vp" to the next vararg and increments the pointer until it encounters "A_NULL" (= 0). So finally, "*vp" will always be 0, if that is what you mean by empty.
>>> 
>>> Or did you mean "vp" itself is NULL? This would be even stranger, because it points to the stack.
>>> 
>>> Do your run the code in a debugger? If yes, post the stack trace. If not, well, use a debugger :-)
>>> 
>>> BTW, which device are you using?
>>> 
>>> Christof
>>> 
>>> On 22.03.2020 09:13, Boštjan Jerko wrote:
>>>> Hi Christof,
>>>> 
>>>> the problem is that I don’t really know what happens but it goes something like that:
>>>> 
>>>> calling pd_init -> pd_init_systems -> conf_init -> x_connective_setup -> pdint_setup
>>>> 
>>>> and then in function class_new vp is empty so while (*vp) doesn’t go through it and after exiting class_new the microcontroller stops with a hard error.
>>>> So maybe the question is really - should the vp be empty and if not - why is that happening?
>>>> 
>>>> B.
>>>> 
>>>>> On 21 Mar 2020, at 13:58, Christof Ressi <info at christofressi.com <mailto:info at christofressi.com>> wrote:
>>>>> 
>>>>> Hi,
>>>>> 
>>>>>> The code compiles but I get the error when running in the pdint_setup where pdint_new in class_new breaks with an error.
>>>>>> My idea is to first try to understand the code hence my question:
>>>>> I think first you should post the error you get ;-) Maybe the problem is trivially solved without having to look at  code for class_new() at all.
>>>>>> What does class_new do?
>>>>> It creates a new Pd class (t_pd). The class contains all the methods and some metadata. It also registers a creator function in pd_objectmaker, which is the factory object for all classes.
>>>>> 
>>>>> When you type "[foo 0]" you really send a message "obj <x> <y> foo 0" to the canvas, which in turn sends a message "foo 0" to pd_objectmaker, which finally returns a newly created instance (given that it can find a creator method for "foo").
>>>>> 
>>>>> But again, I think the problem is likely trivial and those implementation details shouldn't concern you, unless you want to learn about Pd internals, of course :-)
>>>>> 
>>>>> Christof
>>>>> 
>>>>> On 21.03.2020 13:20, Boštjan Jerko wrote:
>>>>>> Hi,
>>>>>> 
>>>>>> I’m trying to port libpd to stm32. I don’t need gui so working only on connecting pd script to the output (which is DAC from stm32 in my case).
>>>>>> The code compiles but I get the error when running in the pdint_setup where pdint_new in class_new breaks with an error.
>>>>>> My idea is to first try to understand the code hence my question:
>>>>>> What does class_new do?
>>>>>> 
>>>>>> My guess is connecting puredata command with a function in C. Am I correct or completely missing the point?
>>>>>> 
>>>>>> Thanks.
>>>>>> 
>>>>>> B.
>>>>>> 
>>>>>> 
>>>>>> _______________________________________________
>>>>>> Pd-dev mailing list
>>>>>> Pd-dev at lists.iem.at <mailto:Pd-dev at lists.iem.at>
>>>>>> https://lists.puredata.info/listinfo/pd-dev <https://lists.puredata.info/listinfo/pd-dev>
>>>>> 
>>>>> 
>>>>> _______________________________________________
>>>>> Pd-dev mailing list
>>>>> Pd-dev at lists.iem.at <mailto:Pd-dev at lists.iem.at>
>>>>> https://lists.puredata.info/listinfo/pd-dev <https://lists.puredata.info/listinfo/pd-dev>
>>> 
>>> 
>>> 
>>> _______________________________________________
>>> Pd-dev mailing list
>>> Pd-dev at lists.iem.at <mailto:Pd-dev at lists.iem.at>
>>> https://lists.puredata.info/listinfo/pd-dev <https://lists.puredata.info/listinfo/pd-dev>
>> 
> _______________________________________________
> Pd-dev mailing list
> Pd-dev at lists.iem.at
> https://lists.puredata.info/listinfo/pd-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puredata.info/pipermail/pd-dev/attachments/20200324/2efa2546/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ozone.jpg
Type: image/jpeg
Size: 192481 bytes
Desc: not available
URL: <http://lists.puredata.info/pipermail/pd-dev/attachments/20200324/2efa2546/attachment-0001.jpg>


More information about the Pd-dev mailing list