<?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 SDCARD task question in MQX Software Solutions</title>
    <link>https://community.nxp.com/t5/MQX-Software-Solutions/SDCARD-task-question/m-p/519683#M16366</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;I have a K60 tower board: TWRK60F120MUM.&lt;/P&gt;&lt;P&gt;I have observed an interesting MQX programming topic related to the SDCard task. I hope some expert can point me where is the issue.&lt;/P&gt;&lt;P&gt;I worked out SD card init, open file, and write file based on demo.c of the SDCard task. Summaried here:&lt;/P&gt;&lt;P&gt;I moved FILE pointers as global to retain the handle valves:&lt;/P&gt;&lt;P&gt;The SDCard_Init runs as a task. (as demo.c)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;volatile MQX_FILE_PTR&lt;/TD&gt;&lt;TD&gt;ghComHandle=NULL;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;volatile MQX_FILE_PTR&lt;/TD&gt;&lt;TD&gt;ghFileSystem=NULL;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;volatile MQX_FILE_PTR&lt;/TD&gt;&lt;TD&gt;gphSDCard=NULL, gphPartition=NULL;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;void SDCard_Init(uint32_t temp)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;bool&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;inserted = TRUE, readonly = FALSE, last = FALSE;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;ghComHandle = fopen(BSP_SDCARD_ESDHC_CHANNEL, (void *)(SPI_FLAG_FULL_DUPLEX));&lt;/TD&gt;&lt;TD&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;_io_sdcard_install("sdcard:", (void *)&amp;amp;_bsp_sdcard0_init, ghComHandle);&amp;nbsp; &lt;/P&gt;&lt;P&gt;inserted =1;//!lwgpio_get_value(&amp;amp;sd_detect);&amp;nbsp; always inserted &lt;/P&gt;&lt;P&gt;for (;;) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (last != inserted) {&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;last = inserted;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;if (inserted) {&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;gphSDCard = fopen("sdcard:", 0); &lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;_io_part_mgr_install(gphSDCard, partman_name, 0);&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;gphPartition = fopen(partition_name, NULL);&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;_io_ioctl(gphPartition, IO_IOCTL_VAL_PART, NULL);&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;// Install MFS over partition &lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;_io_mfs_install(gphPartition, filesystem_name, 0);&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;ghFileSystem = fopen(filesystem_name, NULL);&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;//LogFileOpen();&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;giSdCardReady=1;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;}&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;else { //never closed&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;}&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;}&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In the Main Task, wait until giSdCardReady=1. Then call LogFileOpen(). &lt;/P&gt;&lt;P&gt;uint8_t LogFileOpen() {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int error_code=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MQX_FILE_PTR&amp;nbsp;&amp;nbsp;&amp;nbsp; fd_ptrWrite ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fd_ptrWrite = fopen("a:myfile2.txt", "w+"); &lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;fopen() opens successfully.&amp;nbsp; It works. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Because SDCard_Init runs at lower priority and the SDCard is always inserted. So the task really runs only once. for initialization of SD card. So I call the SDCard_Init() as a function in the Main task, instead of running as a task.&lt;/P&gt;&lt;P&gt;Then call to LogFileOpen() fails to open the file.&lt;/P&gt;&lt;P&gt;Main_Task{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SDCard_init(); //when called as function, the for (;;) is commented out, so it only runs once.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LogFileOpen(); //fails&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;That is the first question: why SDCard_Init has to be run as a task. Main() is a task, too. Why can not call the SDCard_init()?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Then I copy all the code of the SDCard_init() into Main task as follows:&lt;/P&gt;&lt;P&gt;Main_Task{&lt;/P&gt;&lt;P&gt;//&amp;nbsp;&amp;nbsp; SDCard_init();&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;bool&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;inserted = TRUE, readonly = FALSE, last = FALSE;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;ghComHandle = fopen(BSP_SDCARD_ESDHC_CHANNEL, (void *)(SPI_FLAG_FULL_DUPLEX));&lt;/TD&gt;&lt;TD&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;_io_sdcard_install("sdcard:", (void *)&amp;amp;_bsp_sdcard0_init, ghComHandle);&amp;nbsp; &lt;/P&gt;&lt;P&gt;inserted =1;//!lwgpio_get_value(&amp;amp;sd_detect);&amp;nbsp; always inserted &lt;/P&gt;&lt;P&gt;if (1) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (last != inserted) {&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;last = inserted;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;if (inserted) {&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;gphSDCard = fopen("sdcard:", 0); &lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;_io_part_mgr_install(gphSDCard, partman_name, 0);&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;gphPartition = fopen(partition_name, NULL);&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;_io_ioctl(gphPartition, IO_IOCTL_VAL_PART, NULL);&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;// Install MFS over partition &lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;_io_mfs_install(gphPartition, filesystem_name, 0);&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;ghFileSystem = fopen(filesystem_name, NULL);&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;//LogFileOpen();&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;giSdCardReady=1;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;}&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;else { //never closed&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;}&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;}&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LogFileOpen(); //it works&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I don't understand that why in the Main task, SDCard_init() (as a funtion) can not be called, and LogFileOpen() fails. and if the exact same code of SDCard_init() has to be embedded into the Main Task in order to make LogFileOpen work?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;What I have missed?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you,&lt;/P&gt;&lt;P&gt;David Zhou&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 13 Jun 2016 14:35:39 GMT</pubDate>
    <dc:creator>davidzhou</dc:creator>
    <dc:date>2016-06-13T14:35:39Z</dc:date>
    <item>
      <title>SDCARD task question</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/SDCARD-task-question/m-p/519683#M16366</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;I have a K60 tower board: TWRK60F120MUM.&lt;/P&gt;&lt;P&gt;I have observed an interesting MQX programming topic related to the SDCard task. I hope some expert can point me where is the issue.&lt;/P&gt;&lt;P&gt;I worked out SD card init, open file, and write file based on demo.c of the SDCard task. Summaried here:&lt;/P&gt;&lt;P&gt;I moved FILE pointers as global to retain the handle valves:&lt;/P&gt;&lt;P&gt;The SDCard_Init runs as a task. (as demo.c)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;volatile MQX_FILE_PTR&lt;/TD&gt;&lt;TD&gt;ghComHandle=NULL;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;volatile MQX_FILE_PTR&lt;/TD&gt;&lt;TD&gt;ghFileSystem=NULL;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;volatile MQX_FILE_PTR&lt;/TD&gt;&lt;TD&gt;gphSDCard=NULL, gphPartition=NULL;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;void SDCard_Init(uint32_t temp)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;bool&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;inserted = TRUE, readonly = FALSE, last = FALSE;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;ghComHandle = fopen(BSP_SDCARD_ESDHC_CHANNEL, (void *)(SPI_FLAG_FULL_DUPLEX));&lt;/TD&gt;&lt;TD&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;_io_sdcard_install("sdcard:", (void *)&amp;amp;_bsp_sdcard0_init, ghComHandle);&amp;nbsp; &lt;/P&gt;&lt;P&gt;inserted =1;//!lwgpio_get_value(&amp;amp;sd_detect);&amp;nbsp; always inserted &lt;/P&gt;&lt;P&gt;for (;;) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (last != inserted) {&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;last = inserted;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;if (inserted) {&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;gphSDCard = fopen("sdcard:", 0); &lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;_io_part_mgr_install(gphSDCard, partman_name, 0);&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;gphPartition = fopen(partition_name, NULL);&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;_io_ioctl(gphPartition, IO_IOCTL_VAL_PART, NULL);&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;// Install MFS over partition &lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;_io_mfs_install(gphPartition, filesystem_name, 0);&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;ghFileSystem = fopen(filesystem_name, NULL);&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;//LogFileOpen();&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;giSdCardReady=1;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;}&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;else { //never closed&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;}&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;}&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In the Main Task, wait until giSdCardReady=1. Then call LogFileOpen(). &lt;/P&gt;&lt;P&gt;uint8_t LogFileOpen() {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int error_code=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MQX_FILE_PTR&amp;nbsp;&amp;nbsp;&amp;nbsp; fd_ptrWrite ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fd_ptrWrite = fopen("a:myfile2.txt", "w+"); &lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;fopen() opens successfully.&amp;nbsp; It works. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Because SDCard_Init runs at lower priority and the SDCard is always inserted. So the task really runs only once. for initialization of SD card. So I call the SDCard_Init() as a function in the Main task, instead of running as a task.&lt;/P&gt;&lt;P&gt;Then call to LogFileOpen() fails to open the file.&lt;/P&gt;&lt;P&gt;Main_Task{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SDCard_init(); //when called as function, the for (;;) is commented out, so it only runs once.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LogFileOpen(); //fails&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;That is the first question: why SDCard_Init has to be run as a task. Main() is a task, too. Why can not call the SDCard_init()?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Then I copy all the code of the SDCard_init() into Main task as follows:&lt;/P&gt;&lt;P&gt;Main_Task{&lt;/P&gt;&lt;P&gt;//&amp;nbsp;&amp;nbsp; SDCard_init();&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;bool&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;inserted = TRUE, readonly = FALSE, last = FALSE;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;ghComHandle = fopen(BSP_SDCARD_ESDHC_CHANNEL, (void *)(SPI_FLAG_FULL_DUPLEX));&lt;/TD&gt;&lt;TD&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;_io_sdcard_install("sdcard:", (void *)&amp;amp;_bsp_sdcard0_init, ghComHandle);&amp;nbsp; &lt;/P&gt;&lt;P&gt;inserted =1;//!lwgpio_get_value(&amp;amp;sd_detect);&amp;nbsp; always inserted &lt;/P&gt;&lt;P&gt;if (1) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (last != inserted) {&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;last = inserted;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;if (inserted) {&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;gphSDCard = fopen("sdcard:", 0); &lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;_io_part_mgr_install(gphSDCard, partman_name, 0);&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;gphPartition = fopen(partition_name, NULL);&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;_io_ioctl(gphPartition, IO_IOCTL_VAL_PART, NULL);&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;// Install MFS over partition &lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;_io_mfs_install(gphPartition, filesystem_name, 0);&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;ghFileSystem = fopen(filesystem_name, NULL);&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;//LogFileOpen();&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;giSdCardReady=1;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;}&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;else { //never closed&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;}&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;}&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LogFileOpen(); //it works&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I don't understand that why in the Main task, SDCard_init() (as a funtion) can not be called, and LogFileOpen() fails. and if the exact same code of SDCard_init() has to be embedded into the Main Task in order to make LogFileOpen work?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;What I have missed?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you,&lt;/P&gt;&lt;P&gt;David Zhou&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 13 Jun 2016 14:35:39 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/SDCARD-task-question/m-p/519683#M16366</guid>
      <dc:creator>davidzhou</dc:creator>
      <dc:date>2016-06-13T14:35:39Z</dc:date>
    </item>
    <item>
      <title>Re: SDCARD task question</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/SDCARD-task-question/m-p/519684#M16367</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;&lt;/P&gt;&lt;P&gt;Could you please create a simple project for this?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;Daniel&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 07:53:17 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/SDCARD-task-question/m-p/519684#M16367</guid>
      <dc:creator>danielchen</dc:creator>
      <dc:date>2016-06-16T07:53:17Z</dc:date>
    </item>
    <item>
      <title>Re: SDCARD task question</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/SDCARD-task-question/m-p/519685#M16368</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Daniel ,&lt;/P&gt;&lt;P&gt;Give me some time. I will create a sample project when I have time.&amp;nbsp; &lt;/P&gt;&lt;P&gt;Thank you,&lt;/P&gt;&lt;P&gt;David Zhou&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 13:38:23 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/SDCARD-task-question/m-p/519685#M16368</guid>
      <dc:creator>davidzhou</dc:creator>
      <dc:date>2016-06-16T13:38:23Z</dc:date>
    </item>
  </channel>
</rss>

