Thanks! I was not sure about responding.

Will
> On Nov 4, 2016, at 9:42 AM, Christopher Collins <[email protected]> wrote:
> 
> (responding to Runtime only)
> 
> I will reply to Wayne's email this morning, and follow it up with a
> message to dev regarding the recent eventq changes.  I just wanted to
> send this note so no one spends time writing a response.
> 
> Thanks,
> Chris
> 
> On Fri, Nov 04, 2016 at 01:08:50PM +0000, Wayne Keenan wrote:
>> sorry for the typo'ed subject and also these corrections are required:
>> 
>> In the first post example this line:
>>    my_event(&MY_EVENT_QUEUE, my_event);
>> should be:
>>    os_eventq_put(&MY_EVENT_QUEUE, my_event);
>> 
>> 
>> In the second post example this line:
>> 
>> rc = my_event(&MY_EVENT_QUEUE, OS_EVENT_T_PERUSER+1, arg ); //*1
>> 
>> 
>> should read:
>> 
>> rc = os_eventq_put(&MY_EVENT_QUEUE, OS_EVENT_T_PERUSER+1, arg ); //*1
>> 
>> 
>> 
>> All the best
>> Wayne
>> 
>> On 4 November 2016 at 12:57, Wayne Keenan <[email protected]> wrote:
>> 
>>> Hi,
>>> 
>>> I had to move from the commonly found  'statically allocated' os_event
>>> usage pattern to something dynamic.
>>> 
>>> This is what I'm using:
>>> 
>>> // Post event:
>>> 
>>>    struct os_event* my_event = (struct os_event
>>> *)os_memblock_get(&bleprph_mbuf_mpool);
>>> 
>>>    if (!my_event) {
>>>        // TODO: scream loudly
>>>        return;
>>>    }
>>>    my_event->ev_queued = 0;
>>>    my_event->ev_arg = arg;
>>>    my_event->ev_type=OS_EVENT_T_PERUSER+1;   // *1
>>>    my_event(&MY_EVENT_QUEUE, my_event);
>>> 
>>> 
>>> 
>>> // Poll handler:
>>> 
>>>            case OS_EVENT_T_PERUSER+1:
>>>                my_data = ev->ev_arg;
>>>                os_eventq_remove(&btask_evq, ev);
>>>                os_memblock_put(&task_mbuf_mpool, ev);   //* 2
>>>                process_data(my_data);
>>>                break;
>>> 
>>> 
>>> This seems to work and will fail quickly (reset) if step *2 isn't
>>> performed,  but I have some questions.
>>> 
>>> 1. Is this really correct?  I've not seen it in the samples or the docs.
>>> 2. The samples and docs didn't make *2 obvious,  e.g. who owns the memory
>>> pool.
>>> 3. Would it be better if the Task didn't care which pool the memory came
>>> from? i.e. inter task events.
>>> 4. I've assumed OS_EVENT_T_PERUSER+n is a valid thing todo, is it? until
>>> what n? is there a documented range limit?
>>> 
>>> 
>>> It would be nice to have the API that perhaps look something like this:
>>> 
>>> // Post:
>>>        rc = my_event(&MY_EVENT_QUEUE, OS_EVENT_T_PERUSER+1, arg ); //*1
>>>        if (rc) {
>>>            // TODO: scream loudly
>>>            return;
>>>        }
>>> 
>>> 
>>> At *1 a default application pool, registered with the OS,  is used (which
>>> would require additional API  and setup in the application main startup)
>>> 
>>> 
>>> // Poll:
>>>        struct os_event ev;
>>> 
>>>        os_eventq_get(&task_evq, &ev);   // *1
>>> 
>>>        switch (ev->ev_type) {
>>>            case OS_EVENT_T_PERUSER+1:
>>>                my_data = ev->ev_arg;
>>>                process_data(my_data);
>>>                break;
>>>        }
>>> 
>>> 
>>> At *1 the event data is copied and the event itself is released by '
>>> os_eventq_get'
>>> 
>>> 
>>> All the best
>>> Wayne
>>> 

Reply via email to