<?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>S32Kのトピックhow to process multi-task access printf ?</title>
    <link>https://community.nxp.com/t5/S32K/how-to-process-multi-task-access-printf/m-p/1673116#M24216</link>
    <description>&lt;P&gt;does this osif_IsIsrContext API is get current status in isr or task with freertos?&lt;/P&gt;&lt;P&gt;can i used it in printf/scanf ? static inline bool osif_IsIsrContext(void) { bool is_isr = false; uint32_t ipsr_code = (uint32_t)( (S32_SCB-&amp;gt;ICSR &amp;amp; S32_SCB_ICSR_VECTACTIVE_MASK) &amp;gt;&amp;gt; S32_SCB_ICSR_VECTACTIVE_SHIFT ); if (ipsr_code != 0u) { is_isr = true; } return is_isr; } int_t __read_console(__file_handle handle, uchar_t * buffer, size_t * count) { #ifdef rtos_version if(osif_IsIsrContext() == true) taskDISABLE_INTERRUPTS(); else { taskENTER_CRITICAL(); } #endif uint32_t bytesRemain; bool MsgDone=false; uchar_t new_lin[]={"\n"}; int i=0; while (MsgDone==false) { LPUART_DRV_ReceiveData(INST_LPUART1, &amp;amp;buffer[i], 1); while(LPUART_DRV_GetReceiveStatus(INST_LPUART1, &amp;amp;bytesRemain) != STATUS_SUCCESS); LPUART_DRV_SendData(INST_LPUART1, &amp;amp;buffer[i], 1); while(LPUART_DRV_GetTransmitStatus(INST_LPUART1, &amp;amp;bytesRemain) != STATUS_SUCCESS); if(buffer[i++] == '\r') { buffer[i-1]='\n'; MsgDone = true; } } LPUART_DRV_SendData(INST_LPUART1, new_lin, 1); while(LPUART_DRV_GetTransmitStatus(INST_LPUART1, &amp;amp;bytesRemain) != STATUS_SUCCESS); buffer[i]=0; *count = (size_t)i; #ifdef rtos_version if(osif_IsIsrContext() == true) taskENABLE_INTERRUPTS(); else { taskEXIT_CRITICAL(); } #endif return 0; }&lt;/P&gt;</description>
    <pubDate>Wed, 21 Jun 2023 01:56:16 GMT</pubDate>
    <dc:creator>alice_th</dc:creator>
    <dc:date>2023-06-21T01:56:16Z</dc:date>
    <item>
      <title>how to process multi-task access printf ?</title>
      <link>https://community.nxp.com/t5/S32K/how-to-process-multi-task-access-printf/m-p/1673116#M24216</link>
      <description>&lt;P&gt;does this osif_IsIsrContext API is get current status in isr or task with freertos?&lt;/P&gt;&lt;P&gt;can i used it in printf/scanf ? static inline bool osif_IsIsrContext(void) { bool is_isr = false; uint32_t ipsr_code = (uint32_t)( (S32_SCB-&amp;gt;ICSR &amp;amp; S32_SCB_ICSR_VECTACTIVE_MASK) &amp;gt;&amp;gt; S32_SCB_ICSR_VECTACTIVE_SHIFT ); if (ipsr_code != 0u) { is_isr = true; } return is_isr; } int_t __read_console(__file_handle handle, uchar_t * buffer, size_t * count) { #ifdef rtos_version if(osif_IsIsrContext() == true) taskDISABLE_INTERRUPTS(); else { taskENTER_CRITICAL(); } #endif uint32_t bytesRemain; bool MsgDone=false; uchar_t new_lin[]={"\n"}; int i=0; while (MsgDone==false) { LPUART_DRV_ReceiveData(INST_LPUART1, &amp;amp;buffer[i], 1); while(LPUART_DRV_GetReceiveStatus(INST_LPUART1, &amp;amp;bytesRemain) != STATUS_SUCCESS); LPUART_DRV_SendData(INST_LPUART1, &amp;amp;buffer[i], 1); while(LPUART_DRV_GetTransmitStatus(INST_LPUART1, &amp;amp;bytesRemain) != STATUS_SUCCESS); if(buffer[i++] == '\r') { buffer[i-1]='\n'; MsgDone = true; } } LPUART_DRV_SendData(INST_LPUART1, new_lin, 1); while(LPUART_DRV_GetTransmitStatus(INST_LPUART1, &amp;amp;bytesRemain) != STATUS_SUCCESS); buffer[i]=0; *count = (size_t)i; #ifdef rtos_version if(osif_IsIsrContext() == true) taskENABLE_INTERRUPTS(); else { taskEXIT_CRITICAL(); } #endif return 0; }&lt;/P&gt;</description>
      <pubDate>Wed, 21 Jun 2023 01:56:16 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S32K/how-to-process-multi-task-access-printf/m-p/1673116#M24216</guid>
      <dc:creator>alice_th</dc:creator>
      <dc:date>2023-06-21T01:56:16Z</dc:date>
    </item>
    <item>
      <title>Re: how to process multi-task access printf ?</title>
      <link>https://community.nxp.com/t5/S32K/how-to-process-multi-task-access-printf/m-p/1673118#M24217</link>
      <description>&lt;DIV&gt;static inline bool osif_IsIsrContext(void)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; bool is_isr = false;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; uint32_t ipsr_code = (uint32_t)( (S32_SCB-&amp;gt;ICSR &amp;amp; S32_SCB_ICSR_VECTACTIVE_MASK) &amp;gt;&amp;gt; S32_SCB_ICSR_VECTACTIVE_SHIFT );&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; if (ipsr_code != 0u)&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; {&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; is_isr = true;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; }&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; return is_isr;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;int_t __read_console(__file_handle handle, uchar_t * buffer, size_t * count)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;#ifdef rtos_version&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; if(osif_IsIsrContext() == true)&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; taskDISABLE_INTERRUPTS();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; else&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; {&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; taskENTER_CRITICAL();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; }&lt;/DIV&gt;&lt;DIV&gt;#endif&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; uint32_t bytesRemain;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;bool MsgDone=false;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;uchar_t new_lin[]={"\n"};&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;int i=0;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;while (MsgDone==false)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; LPUART_DRV_ReceiveData(INST_LPUART1, &amp;amp;buffer[i], 1);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; while(LPUART_DRV_GetReceiveStatus(INST_LPUART1, &amp;amp;bytesRemain) != STATUS_SUCCESS);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; LPUART_DRV_SendData(INST_LPUART1, &amp;amp;buffer[i], 1);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; while(LPUART_DRV_GetTransmitStatus(INST_LPUART1, &amp;amp;bytesRemain) != STATUS_SUCCESS);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; if(buffer[i++] == '\r')&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp;buffer[i-1]='\n';&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp;MsgDone = true;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp;LPUART_DRV_SendData(INST_LPUART1, new_lin, 1);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp;while(LPUART_DRV_GetTransmitStatus(INST_LPUART1, &amp;amp;bytesRemain) != STATUS_SUCCESS);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp;buffer[i]=0;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp;*count = (size_t)i;&lt;/DIV&gt;&lt;DIV&gt;#ifdef rtos_version&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp;if(osif_IsIsrContext() == true)&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; taskENABLE_INTERRUPTS();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; else&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; {&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; taskEXIT_CRITICAL();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; }&lt;/DIV&gt;&lt;DIV&gt;#endif&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp;return 0;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;int_t __write_console(__file_handle handle, uchar_t * buffer, size_t * count)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;#ifdef rtos_version&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; if(osif_IsIsrContext() == true)&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; taskDISABLE_INTERRUPTS();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; else&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; {&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; taskENTER_CRITICAL();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; }&lt;/DIV&gt;&lt;DIV&gt;#endif&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; uint32_t bytesRemain;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; size_t bytes=*count;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; uchar_t ret_car[]={"\r"};&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; LPUART_DRV_SendData(INST_LPUART1, buffer, bytes);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; while(LPUART_DRV_GetTransmitStatus(INST_LPUART1, &amp;amp;bytesRemain) != STATUS_SUCCESS);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; LPUART_DRV_SendData(INST_LPUART1, ret_car, 1);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; while(LPUART_DRV_GetTransmitStatus(INST_LPUART1, &amp;amp;bytesRemain) != STATUS_SUCCESS);&lt;/DIV&gt;&lt;DIV&gt;#ifdef rtos_version&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; if(osif_IsIsrContext() == true)&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; taskENABLE_INTERRUPTS();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; else&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; {&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;taskEXIT_CRITICAL();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; }&lt;/DIV&gt;&lt;DIV&gt;#endif&amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; return 0;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 21 Jun 2023 01:57:49 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S32K/how-to-process-multi-task-access-printf/m-p/1673118#M24217</guid>
      <dc:creator>alice_th</dc:creator>
      <dc:date>2023-06-21T01:57:49Z</dc:date>
    </item>
  </channel>
</rss>

