discuss-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Discuss-gnuradio] Problem with large number of inputs.


From: Mostafa Alizadeh
Subject: Re: [Discuss-gnuradio] Problem with large number of inputs.
Date: Sun, 27 Jul 2014 10:21:12 -0700

Thank you for your notes Marcus, 

As you said this is unnecessary process to point to the input_items in a for loop!! 
However, this is not the problem because I checked that I have the same number of iteration in the for loop as the number of input ports. 

The problem is somewhere else. Again I must mention that if I use, only 8 input ports, the code runs perfectly, however, with 24 inputs, it does something wrong! (perhaps pointing to somewhere in the memory which is not allocated to the input as it seemed to allocated to the input!). In another words, when I want to access the first input of the first input port, I can write:

gr_complex **in = (gr_complex) input_items;

// for example 
cout << in[0][0] << endl; 


The program terminated with unexpected error! 

Please help me, where is the problem?? :(




On Sun, Jul 27, 2014 at 4:21 AM, Marcus Müller <address@hidden> wrote:
Having your complete general_work function wouldn't have hurt my
understanding much...

I really can't make out what you're trying to do without doubt.

Anyway, from the code below I think "in" *must at least* have the same
number of entries that your for loop has iterations; did you just try using

d_group * N_FS(d_normal) instead of d_N_phich_group * N_FS_phich(d_normal_cp) when allocating your array?
It seems to me that having two ways to determine how many inputs there is a likely cause for mistake. Use the size() of the input_items to determine how many inputs you really have, and assert(input_items.size() == number_of_inputs_like_I_calculate_it); to make sure things line up.

Also, the whole process seems unnecessary, since you do nothing more than copying the pointers from input_items to in; the typecast is nothing but syntactic magic and can be done by having "in = ((const gr_complex*)*) input_items;"; also, I encourage you to use the C++-style explicit cast operators (in this case, reinterpret_cast<>) for their clarity, but that's more a question of personal liking :)

Greetings,
Marcus

On 26.07.2014 21:55, Mostafa Alizadeh wrote:
> Hi Marcus,
>
> You're right. I didn't clarify the problem.
>
> Actually in C++, I wrote:
>
> block_impl::block_impl(bool normal, int group)
>       : gr::block("phich_grouping",
>                   gr::io_signature::make(1, group * N_FS(normal), sizeof
> (gr_complex)),
>               gr::io_signature::make(1, 1, sizeof(gr_complex))),
>
> // N_FS function returns 8 or 4 depends on its input.
> // in the work function :
> // d_normal and d_group are defined in the .h file
>
>
> const gr_complex *in[d_N_phich_group * N_FS_phich(d_normal_cp)];
> for (int i=0; i<d_group * N_FS(d_normal); i++)
>         {
>             in[i] = (const gr_complex *) input_items[i];
> }
>
>
> when I set the "group" value to 3, the number of input ports would be 24.
> In this case, I want to access to one element of "in" like this:
>
> cout << " in " << in[0][0] << endl;
>
> I got the aforementioned error!
>
> But when I set "group = 1" which means 8 input ports, all things are fine.
>
>
> any idea please,
>
> Best
>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]