Hi Marcus,
By mentioning that I spent many hours I wanted to say I'm hardly stuck on
this problem yet! :)

You said the there is no problem that we wait on the source to produce as
long as we want! But this is not true when I have other blocks waiting for
processing!! In other word, when the source produces one packet, I want
this packet go down through blocks and amid of these blocks a message must
tells the source to produce again.
*If the source doesn't produce anything after generating some packets, the
scheduler will be locked on the source and does nothing with other blocks!!*

As you said, the *wait* will work for this source, but it's also has the
same problem I mentioned.

Here is the summary of *random bit generator:*


#include <gnuradio/io_signature.h>

#include <stdlib.h>

#include <time.h>

#include <bitset>

#include <unistd.h>



namespace gr {

  namespace my_lte {


  lte_random_bit_gen::sptr

  lte_random_bit_gen::make(int packet_len) // packet_len: the size of
generating packet bits

  {

    return gnuradio::get_initial_sptr

      (new lte_random_bit_gen_impl(packet_len));

  }


  /*

   * The private constructor

   */

  lte_random_bit_gen_impl::lte_random_bit_gen_impl(int packet_len)

    : gr::sync_block("lte_random_bit_gen",

            gr::io_signature::make(0, 0, 0),

            gr::io_signature::make(1, 1, sizeof(char))),

      packet_length(packet_len),

  {

      srand (time(NULL)); // randomizing the seed


      set_max_noutput_items(packet_length);


  }


  lte_random_bit_gen_impl::~lte_random_bit_gen_impl()

  {

  }


  int

  lte_random_bit_gen_impl::work(int noutput_items,

            gr_vector_const_void_star &input_items,

            gr_vector_void_star &output_items)

  {


      char *out = (char *) output_items[0];


      int random_val, nout_written = 0;



          for (int i=0; i<packet_length; i++)

          {

              random_val = rand();

              bitset<8> b(random_val);


              if (b[0] == 0)

                  *out = 1;

              else

                  *out = 0;


              out++;

              nout_written++;

          }


                 // add tag

          add_item_tag(0,

                       nitems_written(0),

                       pmt::string_to_symbol("length"),

                       pmt::from_long(packet_length));


          cout << "bit generator " << endl ;


      return nout_written;

  }





On Sun, Jun 1, 2014 at 1:43 PM, Marcus Müller <marcus.muel...@ettus.com>
wrote:

> Mostafa,
>
> I know you've been working many hours on this :) so don't worry, you're
> being heard.
>
> Nevertheless, GNU Radio is surely not calling the asking the source
> "crazily" to produce items.
>
> GNU Radio is a streaming-into-buffers architecture, which means that the
> runtime will ask a source to produce output when there is space in the
> output buffer. I fail to see the problem with this, since your source
> can just take as much time as it wants to finish a work call, can
> produce less than noutput_items, and generally should just be as fast as
> it could. Not a single one of the items it produced is going to waste!
>
> It is good practice and done by *every* externally rate-limited source
> to just block in work until enough items can be produced. If you need to
> wait to get more random seed, well, then wait in work(). I admit, that
> gets a little tricky when you want your seed to come in using a message,
> because messages are not going to disturb your work due to design for
> thread-safety.
>
> But then again, before I start proposing wait-notify/condition
> multithreading methods, I'd like to hear a bit about your source and why
> being called often is a problem; that's usually not the case, so chances
> are we might help you find a solution if we understood what's wrong with
> your source ;)
>
> Greetings,
> Marcus
>
> On 01.06.2014 10:56, Mostafa Alizadeh wrote:
> > Hi Mike,
> >
> > No, the throttle isn't a source! It just controls the flow of items in an
> > specific time interval. I don't want this! I want cognitively tell the
> > source produces the random bits after some special procedures have done
> (a
> > message can do this for the source). But the scheduler crazily wants the
> > source to produce items! :)
> >
> > How could I deal with this problem?
> > please.
> >
> > Best,
> >
> >
> >
> > On Sun, Jun 1, 2014 at 1:18 PM, Mike Jameson <mike.jame...@ettus.com>
> wrote:
> >
> >> The "Throttle" block is required if you are not using any external
> >> hardware:
> >>
> >> http://gnuradio.org/doc/doxygen/classgr_1_1blocks_1_1throttle.html
> >>
> >> Mike
> >>
> >> --
> >> Mike Jameson M0MIK BSc MIET
> >> Ettus Research Technical Support
> >> Email: supp...@ettus.com
> >> Web: http://ettus.com
> >>
> >>
> >> On Sun, Jun 1, 2014 at 9:30 AM, Mostafa Alizadeh <
> m.alizade...@gmail.com>
> >> wrote:
> >>
> >>> Hi,
> >>> I worked on GNURadio for many hours. After all, I prepared my blocks in
> >>> c++. However, the source by which I produce random bits (items with
> >>> sizeof(char) ) doesn't work properly! By properly I mean, I wanted
> GNURadio
> >>> to lead me control how it's going to call the *source.* It's crazily
> >>> calling the random bit generator so many times.
> >>>
> >>> I think this is because of the GNURadio's strategy for executing blocks
> >>> to achieve as maximum throughput as possible! So GNURadio translates
> it*
> >>> to call the source as much as possible*.(no matter what is the source,
> >>> here is the random bit generator)
> >>>
> >>> Am I right? If I am, what is the solution?
> >>>
> >>> Best,
> >>> Mostafa
> >>>
> >>> _______________________________________________
> >>> Discuss-gnuradio mailing list
> >>> Discuss-gnuradio@gnu.org
> >>> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
> >>>
> >>>
> >
> >
> > _______________________________________________
> > Discuss-gnuradio mailing list
> > Discuss-gnuradio@gnu.org
> > https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>
>
> _______________________________________________
> Discuss-gnuradio mailing list
> Discuss-gnuradio@gnu.org
> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>
_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to