<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: problem with events in multi-threaded code in MQX Software Solutions</title>
    <link>https://community.nxp.com/t5/MQX-Software-Solutions/problem-with-events-in-multi-threaded-code/m-p/174270#M2139</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Mark,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;first of all thanks for sharing your ideas.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;a) I added the dealy you suggested (tried just one as well), but if I add that in the audio task the sound that comes out is a terrible noise rather than a sound.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;b) I then tried to add this delay in the main task instead, where the capacitive touch is handled, using following tasks configuration:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; {MAIN_TASK,&amp;nbsp;&amp;nbsp; MainTask,&amp;nbsp;&amp;nbsp; 1000,&amp;nbsp; 11,&amp;nbsp;&amp;nbsp; "main",&amp;nbsp;&amp;nbsp; &amp;nbsp;MQX_AUTO_START_TASK},&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {AUDIO_TASK,&amp;nbsp; AudioTask,&amp;nbsp; 3000,&amp;nbsp; 12,&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; "audio", &amp;nbsp;&amp;nbsp; &amp;nbsp;MQX_AUTO_START_TASK|MQX_TIME_SLICE_TASK},&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The result is that the audio can be interrupted (finally!) but the sound quality is very deteriorated comparing to the original sound. Unfortunately it is not acceptable...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;c) if I give main task same or lower priority than audio task, then the sounds cannot be interrupted (although quality is Ok)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;As a conclusion I think the daly is not a valid solution I am afraid :smileysad:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks for helping though!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Mik&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 17 Oct 2011 16:25:14 GMT</pubDate>
    <dc:creator>michele_novalia</dc:creator>
    <dc:date>2011-10-17T16:25:14Z</dc:date>
    <item>
      <title>problem with events in multi-threaded code</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/problem-with-events-in-multi-threaded-code/m-p/174265#M2134</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Dear all,&lt;BR /&gt;&lt;BR /&gt;I am writing a simple app using K40, MQX 3.7, where I have 2 threads.&lt;BR /&gt;In one thread (main) I handle capacitive touch and corresponding to which key gets pushed, in a second thread (audio) a different audio file should be played.&lt;BR /&gt;The whole point of having threads is that while one audio is playing and a different button is pressed, then the current audio should stop an a new one should start.&lt;BR /&gt;I am a beginner with &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;MQX&lt;/SPAN&gt;, so it is quite likely that I am doing something silly...&lt;BR /&gt;&lt;BR /&gt;DESIGN:&lt;BR /&gt;I thought I could handle this with events, setting an event in main thread, and reading it from the audio thread.&lt;BR /&gt;Is this the best way of doing this?&lt;BR /&gt;&lt;BR /&gt;PROBLEM:&lt;BR /&gt;when one audio is played, the board does not seem to respond to capacitive touch, so any new key press is ignored until the current audio terminates.&lt;BR /&gt;Both of the audios are played properly, but they are not interrupted by the other one.&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Some code follows, please help if you notice anything obvious:&lt;BR /&gt;&lt;BR /&gt;TASK_TEMPLATE_&lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;STRUCT&lt;/SPAN&gt; &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;MQX&lt;/SPAN&gt;_template_list[] =&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {MAIN_TASK,&amp;nbsp;&amp;nbsp; &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;MainTask&lt;/SPAN&gt;,&amp;nbsp;&amp;nbsp; 1000,&amp;nbsp; 11,&amp;nbsp;&amp;nbsp; "main",&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;MQX&lt;/SPAN&gt;_AUTO_START_TASK},&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {AUDIO_TASK,&amp;nbsp; &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;AudioTask&lt;/SPAN&gt;,&amp;nbsp; 3000,&amp;nbsp; 10,&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; "audio", &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;MQX&lt;/SPAN&gt;_AUTO_START_TASK|&lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;MQX&lt;/SPAN&gt;_TIME_SLICE_TASK},&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {0,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0,&amp;nbsp;&amp;nbsp; 0,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;};&lt;BR /&gt;&lt;BR /&gt;/* main.c FILE */&lt;BR /&gt;/*****************************************************************/&lt;BR /&gt;[..] Main Task calls following:&lt;BR /&gt;&lt;BR /&gt;void &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;MainElCheck&lt;/SPAN&gt;(void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _Electrodes_Check();&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (&lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;ElectrodeFlags&lt;/SPAN&gt; &amp;amp; &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;TSS&lt;/SPAN&gt;_ELECTRODE_0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _event_set(&lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;eventPtr&lt;/SPAN&gt;, SOUND1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (&lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;ElectrodeFlags&lt;/SPAN&gt; &amp;amp; &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;TSS&lt;/SPAN&gt;_ELECTRODE_1)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _event_set(&lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;eventPtr&lt;/SPAN&gt;, SOUND2);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;ElectrodeFlags&lt;/SPAN&gt; = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;/* audio.c */&lt;BR /&gt;/**********************************************************/&lt;BR /&gt;volatile &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;BOOL&lt;/SPAN&gt; &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;isWriteSample&lt;/SPAN&gt; = FALSE;&lt;BR /&gt;static &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;BOOL&lt;/SPAN&gt; &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;isPlaying&lt;/SPAN&gt; = FALSE;&lt;BR /&gt;static volatile Sound &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;currentSound&lt;/SPAN&gt; = AUDIO_OFF;&lt;BR /&gt;static pointer &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;eventPtr&lt;/SPAN&gt; = NULL;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;/* ******************************************************************** */&lt;BR /&gt;void &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;AudioTask&lt;/SPAN&gt;(U32 initial_data)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;PlayerInit&lt;/SPAN&gt;();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;initialization&lt;/SPAN&gt;, follows&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while ( &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;currentSound&lt;/SPAN&gt; != AUDIO_OFF )&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; static _&lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;mqx&lt;/SPAN&gt;_&lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;uint&lt;/SPAN&gt; &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;eventBits&lt;/SPAN&gt; = 0;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if ( _event_wait_any(&lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;eventPtr&lt;/SPAN&gt;, ANY_SOUND, 0) != &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;MQX&lt;/SPAN&gt;_OK )&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;printf&lt;/SPAN&gt;("\nERROR! &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;AudioTask&lt;/SPAN&gt;, event_wait_any failed!\n");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if ( _event_get_value(&lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;eventPtr&lt;/SPAN&gt;, &amp;amp;&lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;eventBits&lt;/SPAN&gt;) != &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;MQX&lt;/SPAN&gt;_OK )&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;printf&lt;/SPAN&gt;("\nERROR! &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;AudioTask&lt;/SPAN&gt;, event_get_value failed!\n");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;printf&lt;/SPAN&gt;("&lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;DBG&lt;/SPAN&gt;: Audio - passed wait for any, value: %u\n", &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;eventBits&lt;/SPAN&gt;);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; switch ( &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;eventBits&lt;/SPAN&gt; )&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case SOUND1:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;currentSound&lt;/SPAN&gt; = SOUND1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;isPlaying&lt;/SPAN&gt; = TRUE;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;printf&lt;/SPAN&gt;("&lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;DBG&lt;/SPAN&gt;: playing sound 1\n");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _event_clear( &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;eventPtr&lt;/SPAN&gt;, SOUND1 );&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; while( &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;isPlaying&lt;/SPAN&gt; &amp;amp;&amp;amp; (&lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;currentSound&lt;/SPAN&gt; == SOUND1) )&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;isPlaying&lt;/SPAN&gt; = !( &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;PlayWave&lt;/SPAN&gt;(SOUND1, array1Len) );&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _event_get_value(&lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;eventPtr&lt;/SPAN&gt;, &amp;amp;&lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;eventBits&lt;/SPAN&gt;);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if ( &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;eventBits&lt;/SPAN&gt; )&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;printf&lt;/SPAN&gt;("&lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;DBG&lt;/SPAN&gt;: event changed! new sound is %d\n", &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;eventBits&lt;/SPAN&gt;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ///!!!!! I never see this one&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;currentSound&lt;/SPAN&gt; = &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;eventBits&lt;/SPAN&gt;;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;isPlaying&lt;/SPAN&gt; = FALSE;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;isPlaying&lt;/SPAN&gt; = FALSE;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case SOUND2:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;currentSound&lt;/SPAN&gt; = SOUND2;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;isPlaying&lt;/SPAN&gt; = TRUE;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;printf&lt;/SPAN&gt;("&lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;DBG&lt;/SPAN&gt;: playing sound 2\n");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _event_clear( &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;eventPtr&lt;/SPAN&gt;, SOUND2 );&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; while( &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;isPlaying&lt;/SPAN&gt; &amp;amp;&amp;amp; (&lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;currentSound&lt;/SPAN&gt; == SOUND2) )&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;isPlaying&lt;/SPAN&gt; = !( &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;PlayWave&lt;/SPAN&gt;(SOUND2, array2Len) );&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _event_get_value(&lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;eventPtr&lt;/SPAN&gt;, &amp;amp;&lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;eventBits&lt;/SPAN&gt;);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if ( &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;eventBits&lt;/SPAN&gt; != AUDIO_READY &amp;amp;&amp;amp; &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;eventBits&lt;/SPAN&gt; != SOUND2 )&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;printf&lt;/SPAN&gt;("&lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;DBG&lt;/SPAN&gt;: event changed! new sound is %d\n", &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;eventBits&lt;/SPAN&gt;);&amp;nbsp;&amp;nbsp;&amp;nbsp; //!!!!! I never see this one&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;currentSound&lt;/SPAN&gt; = &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;eventBits&lt;/SPAN&gt;;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;isPlaying&lt;/SPAN&gt; = FALSE;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;isPlaying&lt;/SPAN&gt; = FALSE;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; default:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;currentSound&lt;/SPAN&gt; = AUDIO_READY;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;eventBits&lt;/SPAN&gt; = AUDIO_READY;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _event_get_value(&lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;eventPtr&lt;/SPAN&gt;, &amp;amp;&lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;eventBits&lt;/SPAN&gt;);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _event_close(&lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;eventPtr&lt;/SPAN&gt;);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _&lt;SPAN style="background: none repeat scroll 0% 0% yellow;"&gt;mqx&lt;/SPAN&gt;_exit(0);&lt;BR /&gt;}&lt;BR /&gt;&lt;SPAN&gt;&lt;BR /&gt;I am a bit blind here... any help appreciated!&lt;BR /&gt;Thanks&lt;BR /&gt;Mik&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 13 Oct 2011 23:01:07 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/problem-with-events-in-multi-threaded-code/m-p/174265#M2134</guid>
      <dc:creator>michele_novalia</dc:creator>
      <dc:date>2011-10-13T23:01:07Z</dc:date>
    </item>
    <item>
      <title>Re: problem with events in multi-threaded code</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/problem-with-events-in-multi-threaded-code/m-p/174266#M2135</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Mik,&lt;/P&gt;&lt;P&gt;Cool project!&lt;/P&gt;&lt;P&gt;Just guessing that your MainTask is blocked by your AudioTask since the AudioTask is at a higher priority than the MainTask.&lt;/P&gt;&lt;P&gt;You either need to have them both at same priority with MQX_TIME_SLICE_TASK set...this then sets the tasks up in a round robin mode&lt;/P&gt;&lt;P&gt;or in the AudioTask have a blocking call when it isn't doing work to allow the MainTask a chance to run&lt;/P&gt;&lt;P&gt;or setup the TSS to be in an interrupt routine&lt;/P&gt;&lt;P&gt;or also poll the TSS in a FlexTimer interrupt routine.&lt;/P&gt;&lt;P&gt;Events are a good way to do what you are trying to do.&lt;/P&gt;&lt;P&gt;Hope this helps.&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;David&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 14 Oct 2011 21:22:58 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/problem-with-events-in-multi-threaded-code/m-p/174266#M2135</guid>
      <dc:creator>DavidS</dc:creator>
      <dc:date>2011-10-14T21:22:58Z</dc:date>
    </item>
    <item>
      <title>Re: problem with events in multi-threaded code</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/problem-with-events-in-multi-threaded-code/m-p/174267#M2136</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello David,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;thanks for your reply.&lt;/P&gt;&lt;P&gt;I have tried the following two:&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;a)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {MAIN_TASK,&amp;nbsp;&amp;nbsp; MainTask,&amp;nbsp;&amp;nbsp; 1000,&amp;nbsp; 11,&amp;nbsp;&amp;nbsp; "main",&amp;nbsp;&amp;nbsp;&amp;nbsp; MQX_AUTO_START_TASK},&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {AUDIO_TASK,&amp;nbsp; AudioTask,&amp;nbsp; 3000,&amp;nbsp; 11,&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; "audio", &amp;nbsp;&amp;nbsp;&amp;nbsp; MQX_AUTO_START_TASK|MQX_TIME_SLICE_TASK},&lt;BR /&gt;&lt;BR /&gt;b)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {MAIN_TASK,&amp;nbsp;&amp;nbsp; MainTask,&amp;nbsp;&amp;nbsp; 1000,&amp;nbsp; 11,&amp;nbsp;&amp;nbsp; "main",&amp;nbsp;&amp;nbsp;&amp;nbsp; MQX_AUTO_START_TASK|MQX_TIME_SLICE_TASK},&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {AUDIO_TASK,&amp;nbsp; AudioTask,&amp;nbsp; 3000,&amp;nbsp; 11,&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; "audio", &amp;nbsp;&amp;nbsp;&amp;nbsp; MQX_AUTO_START_TASK|MQX_TIME_SLICE_TASK},&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;In both of the cases no audio is ever played, as it seems that the Touching event is not caught from Audio...&lt;/P&gt;&lt;P&gt;it seems the audio task never goes after this:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( _event_wait_any(eventPtr, ANY_SOUND, 0) != MQX_OK )&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;About this:&lt;/P&gt;&lt;P&gt;"or in the AudioTask have a blocking call when it isn't doing work to allow the MainTask a chance to run"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I think this shouldn't work as while one audio is playing (ie audio is doing work) and a key is pressed it wont be noticed (if I understood it correctly).&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Finally, please forgive my MQX ignorance:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;"or setup the TSS to be in an interrupt routine or also poll the TSS in a FlexTimer interrupt routine."&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Would you mind to elaborate these concepts please?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;Mik&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 14 Oct 2011 21:44:04 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/problem-with-events-in-multi-threaded-code/m-p/174267#M2136</guid>
      <dc:creator>michele_novalia</dc:creator>
      <dc:date>2011-10-14T21:44:04Z</dc:date>
    </item>
    <item>
      <title>Re: problem with events in multi-threaded code</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/problem-with-events-in-multi-threaded-code/m-p/174268#M2137</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I amnot sure this is what you meant, but I've tried the following as well:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; {MAIN_TASK,&amp;nbsp;&amp;nbsp; MainTask,&amp;nbsp;&amp;nbsp; 1000,&amp;nbsp; 11,&amp;nbsp;&amp;nbsp; "main",&amp;nbsp;&amp;nbsp; &amp;nbsp;MQX_AUTO_START_TASK},&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {AUDIO_TASK,&amp;nbsp; AudioTask,&amp;nbsp; 3000,&amp;nbsp; 10,&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; "audio", &amp;nbsp;&amp;nbsp; &amp;nbsp;MQX_AUTO_START_TASK|MQX_TIME_SLICE_TASK},&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;and then in Audio task:&lt;/P&gt;&lt;P&gt;void _FlexTimer_FTM0_ISR(pointer isr)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;static _mqx_uint eventBits = 0;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;_event_get_value(eventPtr, &amp;amp;eventBits);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if ( eventBits )&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;printf("DBG: event changed! new sound is %d\n", eventBits);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;currentSound = eventBits;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;isPlaying = FALSE;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; isWriteSample = TRUE;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FTM0_SC &amp;amp;= ~(1 &amp;lt;&amp;lt; FTM_SC_TOF_SHIFT);&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;But the message "DBG...." is never printed, not even when I touch a key while audio is played (which was what I expected to see...)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 14 Oct 2011 21:52:42 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/problem-with-events-in-multi-threaded-code/m-p/174268#M2137</guid>
      <dc:creator>michele_novalia</dc:creator>
      <dc:date>2011-10-14T21:52:42Z</dc:date>
    </item>
    <item>
      <title>Re: problem with events in multi-threaded code</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/problem-with-events-in-multi-threaded-code/m-p/174269#M2138</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Mik,&lt;/P&gt;&lt;P&gt;I think the audio task eats all CPU time. What happens if you add a delay:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;while( isPlaying &amp;amp;&amp;amp; (currentSound == SOUND1) )&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; isPlaying = !( PlayWave(SOUND1, array1Len) );&lt;BR /&gt;&amp;nbsp; _event_get_value(eventPtr, &amp;amp;eventBits);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; if ( eventBits )&lt;BR /&gt;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("DBG: event changed! new sound is %d\n", eventBits);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; currentSound = eventBits;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; isPlaying = FALSE;&lt;BR /&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; else&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG&gt;_time_delay_ticks(2);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I recommend to use different priorities in different tasks, this ensures that tasks are&lt;/P&gt;&lt;P&gt;running always as their priority determines.&lt;/P&gt;&lt;P&gt;~Mark&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 15 Oct 2011 19:28:09 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/problem-with-events-in-multi-threaded-code/m-p/174269#M2138</guid>
      <dc:creator>MarkP_</dc:creator>
      <dc:date>2011-10-15T19:28:09Z</dc:date>
    </item>
    <item>
      <title>Re: problem with events in multi-threaded code</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/problem-with-events-in-multi-threaded-code/m-p/174270#M2139</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Mark,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;first of all thanks for sharing your ideas.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;a) I added the dealy you suggested (tried just one as well), but if I add that in the audio task the sound that comes out is a terrible noise rather than a sound.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;b) I then tried to add this delay in the main task instead, where the capacitive touch is handled, using following tasks configuration:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; {MAIN_TASK,&amp;nbsp;&amp;nbsp; MainTask,&amp;nbsp;&amp;nbsp; 1000,&amp;nbsp; 11,&amp;nbsp;&amp;nbsp; "main",&amp;nbsp;&amp;nbsp; &amp;nbsp;MQX_AUTO_START_TASK},&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {AUDIO_TASK,&amp;nbsp; AudioTask,&amp;nbsp; 3000,&amp;nbsp; 12,&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; "audio", &amp;nbsp;&amp;nbsp; &amp;nbsp;MQX_AUTO_START_TASK|MQX_TIME_SLICE_TASK},&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The result is that the audio can be interrupted (finally!) but the sound quality is very deteriorated comparing to the original sound. Unfortunately it is not acceptable...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;c) if I give main task same or lower priority than audio task, then the sounds cannot be interrupted (although quality is Ok)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;As a conclusion I think the daly is not a valid solution I am afraid :smileysad:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks for helping though!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Mik&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 17 Oct 2011 16:25:14 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/problem-with-events-in-multi-threaded-code/m-p/174270#M2139</guid>
      <dc:creator>michele_novalia</dc:creator>
      <dc:date>2011-10-17T16:25:14Z</dc:date>
    </item>
    <item>
      <title>Re: problem with events in multi-threaded code</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/problem-with-events-in-multi-threaded-code/m-p/174271#M2140</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Mik,&lt;/P&gt;&lt;P&gt;I think you are on the right trail.&lt;/P&gt;&lt;P&gt;Try making the MainTask the highest priority task (so get rid of the time slice stuff) and add in the _time_delay(100) (the 100 is in milliseconds) to the MainTask.&amp;nbsp; That way the audio task runs most of the time and you are polling the touch 10 times a second.&amp;nbsp; Since that loop in main is short you should affect the audio quality.&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;David&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 17 Oct 2011 20:33:24 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/problem-with-events-in-multi-threaded-code/m-p/174271#M2140</guid>
      <dc:creator>DavidS</dc:creator>
      <dc:date>2011-10-17T20:33:24Z</dc:date>
    </item>
    <item>
      <title>Re: problem with events in multi-threaded code</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/problem-with-events-in-multi-threaded-code/m-p/174272#M2141</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;Maybe the DAC write should be done in interrupt routine.&lt;/P&gt;&lt;P&gt;~Mark&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 17 Oct 2011 21:43:32 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/problem-with-events-in-multi-threaded-code/m-p/174272#M2141</guid>
      <dc:creator>MarkP_</dc:creator>
      <dc:date>2011-10-17T21:43:32Z</dc:date>
    </item>
    <item>
      <title>Re: problem with events in multi-threaded code</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/problem-with-events-in-multi-threaded-code/m-p/174273#M2142</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi David,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;thanks for your suggestion, IMO it makes sense.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;However this is what I tried:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; {MAIN_TASK,&amp;nbsp;&amp;nbsp; MainTask,&amp;nbsp;&amp;nbsp; 1000,&amp;nbsp; 10,&amp;nbsp;&amp;nbsp; "main",&amp;nbsp;&amp;nbsp; &amp;nbsp;MQX_AUTO_START_TASK},&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {AUDIO_TASK,&amp;nbsp; AudioTask,&amp;nbsp; 3000,&amp;nbsp; 12,&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; "audio", &amp;nbsp;&amp;nbsp; &amp;nbsp;MQX_AUTO_START_TASK},&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Then adding in MainElectrodeCheck() a delay as it follows:&lt;/P&gt;&lt;P&gt;a) &amp;nbsp;&amp;nbsp;&amp;nbsp; _time_delay(100);&lt;/P&gt;&lt;P&gt;=&amp;gt; the audio is not interruptable&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;b) &amp;nbsp;&amp;nbsp;&amp;nbsp; _time_delay(10);&lt;/P&gt;&lt;P&gt;=&amp;gt; the audio is not interruptable &amp;amp; low quality&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;c) &amp;nbsp;&amp;nbsp;&amp;nbsp; _time_delay(1);&lt;/P&gt;&lt;P&gt;=&amp;gt; the audio is interruptable but low quality&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I'm a bit puzzled here... it seems an exercise of fine tuning.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Mark, I'll give it a go at your idea as well, I just need to reorganize the code so that in the interrupt routine it is clear which sound should be played.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks for your interest guys!&lt;/P&gt;&lt;P&gt;Mik&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 18 Oct 2011 15:52:38 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/problem-with-events-in-multi-threaded-code/m-p/174273#M2142</guid>
      <dc:creator>michele_novalia</dc:creator>
      <dc:date>2011-10-18T15:52:38Z</dc:date>
    </item>
    <item>
      <title>Re: problem with events in multi-threaded code</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/problem-with-events-in-multi-threaded-code/m-p/174274#M2143</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Mark,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;bingo!&lt;/P&gt;&lt;P&gt;that was the trick, it seems the audio is both: interruptable and good quality when played inside the interrupt routine!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you very much for this!&lt;/P&gt;&lt;P&gt;(Now I wish to know why is so :smileyhappy:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Mik&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 18 Oct 2011 16:09:39 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/problem-with-events-in-multi-threaded-code/m-p/174274#M2143</guid>
      <dc:creator>michele_novalia</dc:creator>
      <dc:date>2011-10-18T16:09:39Z</dc:date>
    </item>
    <item>
      <title>Re: problem with events in multi-threaded code</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/problem-with-events-in-multi-threaded-code/m-p/174275#M2144</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Mik,&lt;/P&gt;&lt;P&gt;Nice to hear that sound is OK.&lt;/P&gt;&lt;P&gt;One more improvement left:&lt;/P&gt;&lt;P&gt;If there are other (heavy) interrupts running or there are long _int_disable().._int_enable() code blocks, the DAC write may be delayed.&lt;/P&gt;&lt;P&gt;The improvement is to use DAC-buffer and watermark interrupt / event. When this watermark position is reached the&lt;/P&gt;&lt;P&gt;next buffer data is written in task or in interrupt.&lt;/P&gt;&lt;P&gt;The watermark is set in Processor Expert code driver by calling DA1_SetBufferWatermark(), or when using DAC driver by calling DAC_SetBufferWatermark(DAC_DevicePtr, DAC_Watermark);&lt;/P&gt;&lt;P&gt;(Example in ..\Freescale MQX 3.7\mqx\examples\dac)&lt;/P&gt;&lt;P&gt;I haven't used the DAC feature in my project, cannot help more.&lt;/P&gt;&lt;P&gt;Maybe David knows this feature better.&lt;/P&gt;&lt;P&gt;~Mark&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 19 Oct 2011 01:01:16 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/problem-with-events-in-multi-threaded-code/m-p/174275#M2144</guid>
      <dc:creator>MarkP_</dc:creator>
      <dc:date>2011-10-19T01:01:16Z</dc:date>
    </item>
  </channel>
</rss>

