<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://devzone.nordicsemi.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>How to deal with NRF_ERROR_NO_MEM when APP_UART_FIFO_ERROR occurred?</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/110738/how-to-deal-with-nrf_error_no_mem-when-app_uart_fifo_error-occurred</link><description>I&amp;#39;m developing with SDK 17 in custom board using nrf52832. 
 It&amp;#39;s always happened after running for some time that APP_UART_FIFO_ERROR. 
 By observe the p_evt-&amp;gt;data.error_code field,I find the error is NRF_ERROR_NO_MEM. 
 How I write the code deal with</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Tue, 07 May 2024 13:58:59 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/110738/how-to-deal-with-nrf_error_no_mem-when-app_uart_fifo_error-occurred" /><item><title>RE: How to deal with NRF_ERROR_NO_MEM when APP_UART_FIFO_ERROR occurred?</title><link>https://devzone.nordicsemi.com/thread/482313?ContentTypeID=1</link><pubDate>Tue, 07 May 2024 13:58:59 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:04532da6-40c4-43c2-99b4-a8eed6c2bcc5</guid><dc:creator>Edvin</dc:creator><description>&lt;p&gt;When APP_UART_FIFO_ERROR occurs, you will loose the byte that it was trying to add to your FIFO. If you want to preserve it, you need to modify the&amp;nbsp;NRF_DRV_UART_EVT_RX_DONE event in app_uart_fifo.c.&lt;/p&gt;
&lt;p&gt;If the FIFO is full, then it will not start the next uart_rx automatically. This needs to be done using app_uart_get() from your application.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Edvin&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to deal with NRF_ERROR_NO_MEM when APP_UART_FIFO_ERROR occurred?</title><link>https://devzone.nordicsemi.com/thread/481943?ContentTypeID=1</link><pubDate>Mon, 06 May 2024 08:43:08 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:5d77b38f-98cf-4ebe-b776-403e06d7b513</guid><dc:creator>Chaoyue Ying</dc:creator><description>&lt;p&gt;The buf_is_full() just used to check if the array used as buffer is full.&lt;span class="yd-translate-container"&gt;&lt;span class="yd-wrapper-block yd-highlight"&gt;buf_is_full()只是用来检查用作缓冲区的数组是否已满。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The interrupt have higher&amp;nbsp;priority,So maybe delay due to too many data not been deal so that the fuction return andapp_uart_get() didn&amp;#39;t work.&lt;/p&gt;
&lt;p&gt;But it is still puzzled me that maybe something I can do in APP_UART_FIFO_ERROR so that I can reach to effect that the uart seem to be restart and transfer data normally again by itself.&lt;/p&gt;
&lt;p&gt;I want to know what need to do.&lt;/p&gt;
&lt;p&gt;Just uninit uart and restart init or just clear fifo buffer or both?Or some other operation?&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;
&lt;p&gt;&lt;span class="yd-translate-container"&gt;&lt;span class="yd-wrapper-block yd-highlight"&gt;中断具有更高的优先级，因此可能由于没有处理太多数据而延迟，因此函数return和app_uart_get()没有工作。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to deal with NRF_ERROR_NO_MEM when APP_UART_FIFO_ERROR occurred?</title><link>https://devzone.nordicsemi.com/thread/481939?ContentTypeID=1</link><pubDate>Mon, 06 May 2024 08:15:35 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:a8e8ab30-cf55-4ec9-be09-b41e4679dc38</guid><dc:creator>Edvin</dc:creator><description>&lt;p&gt;I don&amp;#39;t know what &amp;quot;buf_is_full()&amp;quot; does, but if this returns true, and your application doesn&amp;#39;t start emptying using app_uart_get(), then you risk that the FIFO is full, and you will enter the APP_UART_FIFO_ERROR eventually.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Edvin&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to deal with NRF_ERROR_NO_MEM when APP_UART_FIFO_ERROR occurred?</title><link>https://devzone.nordicsemi.com/thread/481890?ContentTypeID=1</link><pubDate>Mon, 06 May 2024 00:21:20 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:5de0b4f0-f04f-47bd-8c94-0e914237c877</guid><dc:creator>Chaoyue Ying</dc:creator><description>&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;The app_uart_get() is used in my code.I get the data and put into a global array as fllow:&lt;/p&gt;
&lt;p&gt;&lt;span class="mceItem mceInsertEmbeddableItem mceNonEditable" style="background-image:url(&amp;#39;/cfs-file/__key/communityserver-discussions-components-files/4/1157.embedcode.png&amp;#39;);"&gt;&lt;span class="preview"&gt;void&amp;nbsp;uart_event_handle(app_uart_evt_t&amp;nbsp;*&amp;nbsp;p_event) &lt;span class="yd-translate-container"&gt;&lt;span class="yd-wrapper-block yd-highlight"&gt;uart_evt_t * p_event&lt;/span&gt;&lt;/span&gt;&lt;span class="yd-translate-container"&gt;&lt;span class="yd-wrapper-block yd-highlight"&gt;uart_evt_t * p_event&lt;/span&gt;&lt;/span&gt;&lt;span class="yd-translate-container"&gt;&lt;span class="yd-wrapper-block yd-highlight"&gt;uart_evt_t * p_event&lt;/span&gt;&lt;/span&gt;&lt;span class="yd-translate-container"&gt;&lt;span class="yd-wrapper-block yd-highlight"&gt;uart_evt_t * p_event&lt;/span&gt;&lt;/span&gt;&lt;span class="yd-translate-container"&gt;&lt;span class="yd-wrapper-block yd-highlight"&gt;uart_evt_t * p_event&lt;/span&gt;&lt;/span&gt;&lt;span class="yd-translate-container"&gt;&lt;span class="yd-wrapper-block yd-highlight"&gt;uart_evt_t * p_event&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;p&gt;&lt;span class="mceItem mceInsertEmbeddableItem mceNonEditable" style="background-image:url(&amp;#39;/cfs-file/__key/communityserver-discussions-components-files/4/1157.embedcode.png&amp;#39;);"&gt;&lt;span class="preview"&gt;{ &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;p&gt;&lt;span class="mceItem mceInsertEmbeddableItem mceNonEditable" style="background-image:url(&amp;#39;/cfs-file/__key/communityserver-discussions-components-files/4/1157.embedcode.png&amp;#39;);"&gt;&lt;span class="preview"&gt;&amp;nbsp;&amp;nbsp;switch(p_event-&amp;gt;evt_type) &lt;span class="yd-translate-container"&gt;&lt;span class="yd-wrapper-block yd-highlight"&gt;开关(p_event - &amp;gt; evt_type)&lt;/span&gt;&lt;/span&gt;&lt;span class="yd-translate-container"&gt;&lt;span class="yd-wrapper-block yd-highlight"&gt;开关(p_event - &amp;gt; evt_type)&lt;/span&gt;&lt;/span&gt;&lt;span class="yd-translate-container"&gt;&lt;span class="yd-wrapper-block yd-highlight"&gt;开关(p_event - &amp;gt; evt_type)&lt;/span&gt;&lt;/span&gt;&lt;span class="yd-translate-container"&gt;&lt;span class="yd-wrapper-block yd-highlight"&gt;开关(p_event - &amp;gt; evt_type)&lt;/span&gt;&lt;/span&gt;&lt;span class="yd-translate-container"&gt;&lt;span class="yd-wrapper-block yd-highlight"&gt;开关(p_event - &amp;gt; evt_type)&lt;/span&gt;&lt;/span&gt;&lt;span class="yd-translate-container"&gt;&lt;span class="yd-wrapper-block yd-highlight"&gt;开关(p_event - &amp;gt; evt_type)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;p&gt;&lt;span class="mceItem mceInsertEmbeddableItem mceNonEditable" style="background-image:url(&amp;#39;/cfs-file/__key/communityserver-discussions-components-files/4/1157.embedcode.png&amp;#39;);"&gt;&lt;span class="preview"&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;p&gt;&lt;span class="mceItem mceInsertEmbeddableItem mceNonEditable" style="background-image:url(&amp;#39;/cfs-file/__key/communityserver-discussions-components-files/4/1157.embedcode.png&amp;#39;);"&gt;&lt;span class="preview"&gt;&amp;nbsp;case&amp;nbsp;APP_UART_DATA_READY: &lt;span class="yd-translate-container"&gt;&lt;span class="yd-wrapper-block yd-highlight"&gt;案例APP_UART_DATA_READY:&lt;/span&gt;&lt;/span&gt;&lt;span class="yd-translate-container"&gt;&lt;span class="yd-wrapper-block yd-highlight"&gt;案例APP_UART_DATA_READY:&lt;/span&gt;&lt;/span&gt;&lt;span class="yd-translate-container"&gt;&lt;span class="yd-wrapper-block yd-highlight"&gt;案例APP_UART_DATA_READY:&lt;/span&gt;&lt;/span&gt;&lt;span class="yd-translate-container"&gt;&lt;span class="yd-wrapper-block yd-highlight"&gt;案例APP_UART_DATA_READY:&lt;/span&gt;&lt;/span&gt;&lt;span class="yd-translate-container"&gt;&lt;span class="yd-wrapper-block yd-highlight"&gt;案例APP_UART_DATA_READY:&lt;/span&gt;&lt;/span&gt;&lt;span class="yd-translate-container"&gt;&lt;span class="yd-wrapper-block yd-highlight"&gt;案例APP_UART_DATA_READY:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;p&gt;&lt;span class="mceItem mceInsertEmbeddableItem mceNonEditable" style="background-image:url(&amp;#39;/cfs-file/__key/communityserver-discussions-components-files/4/1157.embedcode.png&amp;#39;);"&gt;&lt;span class="preview"&gt;&amp;nbsp;uart_flag&amp;nbsp;=&amp;nbsp;true; &lt;span class="yd-translate-container"&gt;&lt;/span&gt;&lt;span class="yd-translate-container"&gt;&lt;/span&gt;&lt;span class="yd-translate-container"&gt;&lt;/span&gt;&lt;span class="yd-translate-container"&gt;&lt;/span&gt;&lt;span class="yd-translate-container"&gt;&lt;/span&gt;&lt;span class="yd-translate-container"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;p&gt;&lt;span class="mceItem mceInsertEmbeddableItem mceNonEditable" style="background-image:url(&amp;#39;/cfs-file/__key/communityserver-discussions-components-files/4/1157.embedcode.png&amp;#39;);"&gt;&lt;span class="preview"&gt;&amp;nbsp;if(buf_is_full()) &lt;span class="yd-translate-container"&gt;&lt;span&gt; &lt;/span&gt;&lt;span class="yd-wrapper-inline yd-highlight"&gt; 如果(buf_is_full ())&lt;/span&gt;&lt;/span&gt;&lt;span class="yd-translate-container"&gt;&lt;span&gt; &lt;/span&gt;&lt;span class="yd-wrapper-inline yd-highlight"&gt; 如果(buf_is_full ())&lt;/span&gt;&lt;/span&gt;&lt;span class="yd-translate-container"&gt;&lt;span&gt; &lt;/span&gt;&lt;span class="yd-wrapper-inline yd-highlight"&gt; 如果(buf_is_full ())&lt;/span&gt;&lt;/span&gt;&lt;span class="yd-translate-container"&gt;&lt;span&gt; &lt;/span&gt;&lt;span class="yd-wrapper-inline yd-highlight"&gt; 如果(buf_is_full ())&lt;/span&gt;&lt;/span&gt;&lt;span class="yd-translate-container"&gt;&lt;span&gt; &lt;/span&gt;&lt;span class="yd-wrapper-inline yd-highlight"&gt; 如果(buf_is_full ())&lt;/span&gt;&lt;/span&gt;&lt;span class="yd-translate-container"&gt;&lt;span&gt; &lt;/span&gt;&lt;span class="yd-wrapper-inline yd-highlight"&gt; 如果(buf_is_full ())&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;p&gt;&lt;span class="mceItem mceInsertEmbeddableItem mceNonEditable" style="background-image:url(&amp;#39;/cfs-file/__key/communityserver-discussions-components-files/4/1157.embedcode.png&amp;#39;);"&gt;&lt;span class="preview"&gt;&amp;nbsp;{ &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;p&gt;&lt;span class="mceItem mceInsertEmbeddableItem mceNonEditable" style="background-image:url(&amp;#39;/cfs-file/__key/communityserver-discussions-components-files/4/1157.embedcode.png&amp;#39;);"&gt;&lt;span class="preview"&gt;&amp;nbsp;return; &lt;span class="yd-translate-container"&gt;&lt;span&gt; &lt;/span&gt;&lt;span class="yd-wrapper-inline yd-highlight"&gt; 返回;&lt;/span&gt;&lt;/span&gt;&lt;span class="yd-translate-container"&gt;&lt;span&gt; &lt;/span&gt;&lt;span class="yd-wrapper-inline yd-highlight"&gt; 返回;&lt;/span&gt;&lt;/span&gt;&lt;span class="yd-translate-container"&gt;&lt;span&gt; &lt;/span&gt;&lt;span class="yd-wrapper-inline yd-highlight"&gt; 返回;&lt;/span&gt;&lt;/span&gt;&lt;span class="yd-translate-container"&gt;&lt;span&gt; &lt;/span&gt;&lt;span class="yd-wrapper-inline yd-highlight"&gt; 返回;&lt;/span&gt;&lt;/span&gt;&lt;span class="yd-translate-container"&gt;&lt;span&gt; &lt;/span&gt;&lt;span class="yd-wrapper-inline yd-highlight"&gt; 返回;&lt;/span&gt;&lt;/span&gt;&lt;span class="yd-translate-container"&gt;&lt;span&gt; &lt;/span&gt;&lt;span class="yd-wrapper-inline yd-highlight"&gt; 返回;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;p&gt;&lt;span class="mceItem mceInsertEmbeddableItem mceNonEditable" style="background-image:url(&amp;#39;/cfs-file/__key/communityserver-discussions-components-files/4/1157.embedcode.png&amp;#39;);"&gt;&lt;span class="preview"&gt;&amp;nbsp;} &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;p&gt;&lt;span class="mceItem mceInsertEmbeddableItem mceNonEditable" style="background-image:url(&amp;#39;/cfs-file/__key/communityserver-discussions-components-files/4/1157.embedcode.png&amp;#39;);"&gt;&lt;span class="preview"&gt;&amp;nbsp;UNUSED_VARIABLE(app_uart_get(&amp;amp;uart_buf_input[p_rail])); &lt;span class="yd-translate-container"&gt;&lt;/span&gt;&lt;span class="yd-translate-container"&gt;&lt;/span&gt;&lt;span class="yd-translate-container"&gt;&lt;/span&gt;&lt;span class="yd-translate-container"&gt;&lt;/span&gt;&lt;span class="yd-translate-container"&gt;&lt;/span&gt;&lt;span class="yd-translate-container"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;void uart_event_handle(app_uart_evt_t * p_event)
{
	switch(p_event-&amp;gt;evt_type)
	{
		case APP_UART_DATA_READY:
			uart_flag = true;
			if(buf_is_full())
			{
				return;
			}
			UNUSED_VARIABLE(app_uart_get(&amp;amp;uart_buf_input[p_rail]));
			p_rail = (p_rail+1)%(BLE_NUS_MAX_DATA_LEN);
			break;
		case APP_UART_FIFO_ERROR:
			NRF_LOG_INFO(&amp;quot;FIFO_ERR:%08x&amp;quot;,p_event-&amp;gt;data.error_code);
			break;
		default:
			NRF_LOG_INFO(&amp;quot;UART EVT ID:%d&amp;quot;,p_event-&amp;gt;evt_type);
			break;
	}
}&lt;/pre&gt;I deal with the global array in main loop.And in order to deal with some specifically data,add delay&amp;nbsp;&lt;/p&gt;
&lt;p&gt;in it.So maybe the issue caused by delay so that the fifo buffer is full?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to deal with NRF_ERROR_NO_MEM when APP_UART_FIFO_ERROR occurred?</title><link>https://devzone.nordicsemi.com/thread/481314?ContentTypeID=1</link><pubDate>Tue, 30 Apr 2024 13:54:11 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:7bd5b98c-d0e5-466f-86f3-01b2b25c3c51</guid><dc:creator>Edvin</dc:creator><description>&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;Please see the uart_event_handler() in app_uart_fifo.c. This is the part that generates the APP_UART_FIFO_ERROR event, and it happens if app_fifo_put() returns anything other than NRF_SUCCESS. You can check what the app_fifo_put() actually returns, but I guess the issue is that you have not emptied the fifo using&amp;nbsp;app_uart_get(), which uses app_fifo_get(), and the fifo buffer is full.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;To &amp;quot;recover&amp;quot; from this event, you need to not forward the p_event-&amp;gt;data.error_code into an APP_ERROR_HANDLER() (you can, but this will reboot the application), but instead start emptying your fifo buffer. However, the byte that caused the APP_UART_FIFO_ERROR is lost, unless you modify the app_uart_fifo.c to store it somewhere else.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Edvin&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>