<?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 mcc_recv_nocopy never timeouts in Vybrid Processors</title>
    <link>https://community.nxp.com/t5/Vybrid-Processors/mcc-recv-nocopy-never-timeouts/m-p/264612#M1518</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I think I hit on a bug in implementation of blocking calls in MCC library. I'm using &lt;CODE&gt;mcc_recv_nocopy()&lt;/CODE&gt; with finite non-zero timeout to receive a message from Linux (A5) to MQX (M4) on Vybrid. It works fine if the system time is not changed, but when I change it using the following code, subsequent calls to &lt;CODE&gt;mcc_recv_nocopy()&lt;/CODE&gt; never return until a message is received (which may never happen).&lt;/P&gt;&lt;P&gt;&lt;CODE&gt;&amp;nbsp; _rtc_set_time_mqxd(pDate);&lt;/CODE&gt;&lt;/P&gt;&lt;P&gt;&lt;CODE&gt;&amp;nbsp; _rtc_sync_with_mqx(TRUE);&lt;/CODE&gt;&lt;/P&gt;&lt;P&gt;Am I misusing something or is this a bug? Is there any patch? It is pretty important to me.&lt;/P&gt;&lt;P&gt;(I'm not even asking what would happen if I changed the system time &lt;EM&gt;between&lt;/EM&gt; a call to &lt;CODE&gt;mcc_recv_nocopy()&lt;/CODE&gt; and its return.)&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 27 Feb 2014 17:48:21 GMT</pubDate>
    <dc:creator>kubiznak_petr</dc:creator>
    <dc:date>2014-02-27T17:48:21Z</dc:date>
    <item>
      <title>mcc_recv_nocopy never timeouts</title>
      <link>https://community.nxp.com/t5/Vybrid-Processors/mcc-recv-nocopy-never-timeouts/m-p/264612#M1518</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I think I hit on a bug in implementation of blocking calls in MCC library. I'm using &lt;CODE&gt;mcc_recv_nocopy()&lt;/CODE&gt; with finite non-zero timeout to receive a message from Linux (A5) to MQX (M4) on Vybrid. It works fine if the system time is not changed, but when I change it using the following code, subsequent calls to &lt;CODE&gt;mcc_recv_nocopy()&lt;/CODE&gt; never return until a message is received (which may never happen).&lt;/P&gt;&lt;P&gt;&lt;CODE&gt;&amp;nbsp; _rtc_set_time_mqxd(pDate);&lt;/CODE&gt;&lt;/P&gt;&lt;P&gt;&lt;CODE&gt;&amp;nbsp; _rtc_sync_with_mqx(TRUE);&lt;/CODE&gt;&lt;/P&gt;&lt;P&gt;Am I misusing something or is this a bug? Is there any patch? It is pretty important to me.&lt;/P&gt;&lt;P&gt;(I'm not even asking what would happen if I changed the system time &lt;EM&gt;between&lt;/EM&gt; a call to &lt;CODE&gt;mcc_recv_nocopy()&lt;/CODE&gt; and its return.)&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 27 Feb 2014 17:48:21 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Vybrid-Processors/mcc-recv-nocopy-never-timeouts/m-p/264612#M1518</guid>
      <dc:creator>kubiznak_petr</dc:creator>
      <dc:date>2014-02-27T17:48:21Z</dc:date>
    </item>
    <item>
      <title>Re: mcc_recv_nocopy never timeouts</title>
      <link>https://community.nxp.com/t5/Vybrid-Processors/mcc-recv-nocopy-never-timeouts/m-p/264613#M1519</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Would you have a simple test, so I can reproduce the issue at my side?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 13 Mar 2014 22:57:03 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Vybrid-Processors/mcc-recv-nocopy-never-timeouts/m-p/264613#M1519</guid>
      <dc:creator>juangutierrez</dc:creator>
      <dc:date>2014-03-13T22:57:03Z</dc:date>
    </item>
    <item>
      <title>Re: mcc_recv_nocopy never timeouts</title>
      <link>https://community.nxp.com/t5/Vybrid-Processors/mcc-recv-nocopy-never-timeouts/m-p/264614#M1520</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi ,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I noticed that the above functions are no longer in the MQX 4.1 version. They are removed and the way to synchronize the RTC with the MQX time is different now.&lt;/P&gt;&lt;P&gt;I am trying to reproduce the problem with MQX 4.1 but it is not failing. One thing I noticed is that if you set a timeout and sometimes fail other does not, after a few seconds both cores stop executing the tasks.&lt;/P&gt;&lt;P&gt;I used the below code, it is the same one found in the mcc/examples folder of&amp;nbsp; MQX.&lt;/P&gt;&lt;P&gt;This happens no matter if the rtc is used or not. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*HEADER**********************************************************************&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;* Copyright 2013 Freescale Semiconductor, Inc.&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;* This software is owned or controlled by Freescale Semiconductor.&lt;/P&gt;&lt;P&gt;* Use of this software is governed by the Freescale MQX RTOS License&lt;/P&gt;&lt;P&gt;* distributed with this Material.&lt;/P&gt;&lt;P&gt;* See the MQX_RTOS_LICENSE file distributed for more details.&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;* Brief License Summary:&lt;/P&gt;&lt;P&gt;* This software is provided in source form for you to use free of charge,&lt;/P&gt;&lt;P&gt;* but it is not open source software. You are allowed to use this software&lt;/P&gt;&lt;P&gt;* but you cannot redistribute it or derivative works of it in source form.&lt;/P&gt;&lt;P&gt;* The software may be used only in connection with a product containing&lt;/P&gt;&lt;P&gt;* a Freescale microprocessor, microcontroller, or digital signal processor.&lt;/P&gt;&lt;P&gt;* See license agreement file for full license terms including other&lt;/P&gt;&lt;P&gt;* restrictions.&lt;/P&gt;&lt;P&gt;*****************************************************************************&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;* Comments:&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;*&amp;nbsp;&amp;nbsp; This file contains the source for one of the MCC pingpong examples.&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;*END************************************************************************/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#include &amp;lt;mqx.h&amp;gt;&lt;/P&gt;&lt;P&gt;#include &amp;lt;bsp.h&amp;gt;&lt;/P&gt;&lt;P&gt;#include "mcc.h"&lt;/P&gt;&lt;P&gt;#include "mcc_config.h"&lt;/P&gt;&lt;P&gt;#include "mcc_common.h"&lt;/P&gt;&lt;P&gt;#include "mcc_api.h"&lt;/P&gt;&lt;P&gt;#include "mcc_mqx.h"&lt;/P&gt;&lt;P&gt;#include &amp;lt;string.h&amp;gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#include &amp;lt;core_mutex.h&amp;gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; DATE_STRUCT&amp;nbsp;&amp;nbsp; date;&lt;/P&gt;&lt;P&gt;&amp;nbsp; uint32_t&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; u32time;&lt;/P&gt;&lt;P&gt;&amp;nbsp; TIME_STRUCT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mqx_time;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#if ! BSPCFG_ENABLE_IO_SUBSYSTEM&lt;/P&gt;&lt;P&gt;#error This application requires BSPCFG_ENABLE_IO_SUBSYSTEM defined non-zero in user_config.h. Please recompile BSP with this option.&lt;/P&gt;&lt;P&gt;#endif&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#ifndef BSP_DEFAULT_IO_CHANNEL_DEFINED&lt;/P&gt;&lt;P&gt;#error This application requires BSP_DEFAULT_IO_CHANNEL to be not NULL. Please set corresponding BSPCFG_ENABLE_TTYx to non-zero in user_config.h and recompile BSP with this option.&lt;/P&gt;&lt;P&gt;#endif&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* Application-specific settings */&lt;/P&gt;&lt;P&gt;/* 1: Blocking mode (task is blocked when no new message is available)&lt;/P&gt;&lt;P&gt; * 0: Non-blocking mode (task is waiting for a new message in a spin loop) */&lt;/P&gt;&lt;P&gt;#define MCC_APP_BLOCKING_MODE&amp;nbsp; (1)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;extern void main_task(uint32_t);&lt;/P&gt;&lt;P&gt;extern void responder_task(uint32_t);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#if PSP_MQX_CPU_IS_VYBRID_A5&lt;/P&gt;&lt;P&gt;const TASK_TEMPLATE_STRUCT&amp;nbsp; MQX_template_list[] =&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* Task Index,&amp;nbsp;&amp;nbsp;&amp;nbsp; Function,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Stack,&amp;nbsp; Priority, Name,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Attributes,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Param, Time Slice */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { MAIN_TTN,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; main_task,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2000,&amp;nbsp;&amp;nbsp; 9,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Main",&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MQX_AUTO_START_TASK, MCC_MQX_NODE_A5,&amp;nbsp;&amp;nbsp; 0 },&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { 0 }&lt;/P&gt;&lt;P&gt;};&lt;/P&gt;&lt;P&gt;#else&lt;/P&gt;&lt;P&gt;TASK_TEMPLATE_STRUCT&amp;nbsp; MQX_template_list[] =&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* Task Index,&amp;nbsp;&amp;nbsp;&amp;nbsp; Function,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Stack,&amp;nbsp; Priority,&amp;nbsp; Name,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Attributes,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Param, Time Slice */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { RESPONDER_TTN, responder_task, 2000,&amp;nbsp;&amp;nbsp; 9,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Responder", MQX_AUTO_START_TASK, MCC_MQX_NODE_M4,&amp;nbsp; 0 },&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { 0 }&lt;/P&gt;&lt;P&gt;};&lt;/P&gt;&lt;P&gt;#endif&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;MCC_ENDPOINT&amp;nbsp;&amp;nbsp;&amp;nbsp; mqx_endpoint_a5 = {0,MCC_MQX_NODE_A5,MCC_MQX_SENDER_PORT};&lt;/P&gt;&lt;P&gt;MCC_ENDPOINT&amp;nbsp;&amp;nbsp;&amp;nbsp; mqx_endpoint_m4 = {1,MCC_MQX_NODE_M4,MCC_MQX_RESPONDER_PORT};&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*TASK*----------------------------------------------------------&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;* Task Name : main_task&lt;/P&gt;&lt;P&gt;* Comments&amp;nbsp; :&lt;/P&gt;&lt;P&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; This task creates a message pool and a message queue then&lt;/P&gt;&lt;P&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sends a message to a queue on the second CPU.&lt;/P&gt;&lt;P&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; It waits for a return message, validating the message before&lt;/P&gt;&lt;P&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sending a new message.&lt;/P&gt;&lt;P&gt;*END*-----------------------------------------------------------*/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void main_task(uint32_t node_num)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DATE_STRUCT&amp;nbsp;&amp;nbsp; date;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; THE_MESSAGE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; msg;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCC_MEM_SIZE&amp;nbsp;&amp;nbsp;&amp;nbsp; num_of_received_bytes;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CORE_MUTEX_PTR&amp;nbsp; coremutex_app_ptr;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCC_INFO_STRUCT mcc_info;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ret_value;&lt;/P&gt;&lt;P&gt;#if !MCC_APP_BLOCKING_MODE&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned int&amp;nbsp;&amp;nbsp;&amp;nbsp; num_available_msgs;&lt;/P&gt;&lt;P&gt;#endif&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* create core mutex used in the app. for accessing the serial console */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; coremutex_app_ptr = _core_mutex_create( 0, MCC_PRINTF_SEMAPHORE_NUMBER, MQX_TASK_QUEUE_FIFO );&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; msg.DATA = 1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ret_value = mcc_initialize(node_num);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ret_value = mcc_get_info(node_num, &amp;amp;mcc_info);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(MCC_SUCCESS == ret_value &amp;amp;&amp;amp; (strcmp(mcc_info.version_string, MCC_VERSION_STRING) != 0)) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _core_mutex_lock(coremutex_app_ptr);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("\n\n\nError, attempting to use different versions of the MCC library on each core! Application is stopped now.\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _core_mutex_unlock(coremutex_app_ptr);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mcc_destroy(node_num);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _task_block();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ret_value = mcc_create_endpoint(&amp;amp;mqx_endpoint_a5, MCC_MQX_SENDER_PORT);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _core_mutex_lock(coremutex_app_ptr);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("\n\n\nMain task started, MCC version is %s\n", mcc_info.version_string);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _core_mutex_unlock(coremutex_app_ptr);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; date.YEAR&amp;nbsp;&amp;nbsp; = 2014;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; date.MONTH&amp;nbsp; = 3;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; date.DAY&amp;nbsp;&amp;nbsp;&amp;nbsp; = 5;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; date.HOUR&amp;nbsp;&amp;nbsp; = 8;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; date.MINUTE = 7;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; date.SECOND = 6;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; date.MILLISEC = 5;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; _time_from_date(&amp;amp;date, &amp;amp;mqx_time);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _time_get(&amp;amp;mqx_time);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; u32time =&amp;nbsp; mqx_time.SECONDS ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _rtc_set_time(u32time);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //(void)_rtc_sync_with_mqx(TRUE);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (1) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* wait until the remote endpoint is created by the other core */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(MCC_ERR_ENDPOINT == mcc_send(&amp;amp;mqx_endpoint_m4, &amp;amp;msg, sizeof(THE_MESSAGE), 0xffffffff)) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _time_delay(1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;#if MCC_APP_BLOCKING_MODE&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ret_value = mcc_recv_copy(&amp;amp;mqx_endpoint_a5, &amp;amp;msg, sizeof(THE_MESSAGE), &amp;amp;num_of_received_bytes, 1000000); //0xffffffff&lt;/P&gt;&lt;P&gt;#else&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mcc_msgs_available(&amp;amp;mqx_endpoint_a5, &amp;amp;num_available_msgs);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(num_available_msgs==0) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mcc_msgs_available(&amp;amp;mqx_endpoint_a5, &amp;amp;num_available_msgs);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ret_value = mcc_recv_copy(&amp;amp;mqx_endpoint_a5, &amp;amp;msg, sizeof(THE_MESSAGE), &amp;amp;num_of_received_bytes, 0);&lt;/P&gt;&lt;P&gt;#endif&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(MCC_SUCCESS != ret_value) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _core_mutex_lock(coremutex_app_ptr);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("Main task receive error: %i\n", ret_value);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _core_mutex_unlock(coremutex_app_ptr);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _core_mutex_lock(coremutex_app_ptr);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("Main task received a msg\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("Message: Size=%x, DATA = %x\n", num_of_received_bytes, msg.DATA);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _core_mutex_unlock(coremutex_app_ptr);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; msg.DATA++;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*TASK*----------------------------------------------------------&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;* Task Name : responder_task&lt;/P&gt;&lt;P&gt;* Comments&amp;nbsp; :&lt;/P&gt;&lt;P&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; This task creates a message queue then waits for a message.&lt;/P&gt;&lt;P&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Upon receiving the message the data is incremented before&lt;/P&gt;&lt;P&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; the message is returned to the sender.&lt;/P&gt;&lt;P&gt;*END*-----------------------------------------------------------*/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void responder_task(uint32_t node_num)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; THE_MESSAGE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; msg;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCC_MEM_SIZE&amp;nbsp;&amp;nbsp;&amp;nbsp; num_of_received_bytes;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CORE_MUTEX_PTR&amp;nbsp; coremutex_app_ptr;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCC_INFO_STRUCT mcc_info;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ret_value;&lt;/P&gt;&lt;P&gt;#if !MCC_APP_BLOCKING_MODE&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned int&amp;nbsp;&amp;nbsp;&amp;nbsp; num_available_msgs;&lt;/P&gt;&lt;P&gt;#endif&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* create core mutex used in the app. for accessing the serial console */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; coremutex_app_ptr = _core_mutex_create( 0, MCC_PRINTF_SEMAPHORE_NUMBER, MQX_TASK_QUEUE_FIFO );&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; msg.DATA = 1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ret_value = mcc_initialize(node_num);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ret_value = mcc_get_info(node_num, &amp;amp;mcc_info);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(MCC_SUCCESS == ret_value &amp;amp;&amp;amp; (strcmp(mcc_info.version_string, MCC_VERSION_STRING) != 0)) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _core_mutex_lock(coremutex_app_ptr);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("\n\n\nError, attempting to use different versions of the MCC library on each core! Application is stopped now.\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _core_mutex_unlock(coremutex_app_ptr);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mcc_destroy(node_num);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _task_block();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ret_value = mcc_create_endpoint(&amp;amp;mqx_endpoint_m4, MCC_MQX_RESPONDER_PORT);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _core_mutex_lock(coremutex_app_ptr);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("\n\n\nResponder task started, MCC version is %s\n", mcc_info.version_string);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _core_mutex_unlock(coremutex_app_ptr);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; date.YEAR&amp;nbsp;&amp;nbsp; = 2014;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; date.MONTH&amp;nbsp; = 3;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; date.DAY&amp;nbsp;&amp;nbsp;&amp;nbsp; = 5;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; date.HOUR&amp;nbsp;&amp;nbsp; = 8;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; date.MINUTE = 7;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; date.SECOND = 6;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; date.MILLISEC = 5;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; // _rtc_set_time(&amp;amp;date);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; // _time_from_date(&amp;amp;date, &amp;amp;mqx_time);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //_time_get(&amp;amp;mqx_time);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //u32time =&amp;nbsp; mqx_time.SECONDS ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //_rtc_set_time(u32time);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //(void)_rtc_sync_with_mqx(TRUE);&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (TRUE) {&lt;/P&gt;&lt;P&gt;#if MCC_APP_BLOCKING_MODE&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ret_value = mcc_recv_copy(&amp;amp;mqx_endpoint_m4, &amp;amp;msg, sizeof(THE_MESSAGE), &amp;amp;num_of_received_bytes, 0xffffffff); //0xffffffff&lt;/P&gt;&lt;P&gt;#else&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mcc_msgs_available(&amp;amp;mqx_endpoint_m4, &amp;amp;num_available_msgs);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(num_available_msgs==0) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mcc_msgs_available(&amp;amp;mqx_endpoint_m4, &amp;amp;num_available_msgs);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ret_value = mcc_recv_copy(&amp;amp;mqx_endpoint_m4, &amp;amp;msg, sizeof(THE_MESSAGE), &amp;amp;num_of_received_bytes, 0);&lt;/P&gt;&lt;P&gt;#endif&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(MCC_SUCCESS != ret_value) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _core_mutex_lock(coremutex_app_ptr);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("Responder task receive error: %i\n", ret_value);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _core_mutex_unlock(coremutex_app_ptr);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _core_mutex_lock(coremutex_app_ptr);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("Responder task received a msg\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("Message: Size=%x, DATA = %x\n", num_of_received_bytes, msg.DATA);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _core_mutex_unlock(coremutex_app_ptr);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; msg.DATA++;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _time_delay(1000);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ret_value = mcc_send(&amp;amp;mqx_endpoint_a5, &amp;amp;msg, sizeof(THE_MESSAGE), 0xffffffff);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 19 Mar 2014 00:57:55 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Vybrid-Processors/mcc-recv-nocopy-never-timeouts/m-p/264614#M1520</guid>
      <dc:creator>alejandrolozan1</dc:creator>
      <dc:date>2014-03-19T00:57:55Z</dc:date>
    </item>
  </channel>
</rss>

