FreeRTOS task execution issue

I work on ST SPC56EC MCU in this I used in built free rtos api.in this I create 10 task. But when I execute my code 4 task are run. other task are not run

First of all be sure about task creation was successful.

Your question is very general, you should give us some specific details to examine problem well.

Best regards.

Please share your code snippets to help us help you better.

Thanks.

Yes task is create successfully. It run one or twice time than it’s does not execute.

/***********************************************************************************

 *

 * Copyright © 2016-2019 STMicroelectronics - All Rights Reserved

 *

 * This software is licensed under SLA0098 terms that can be found in the

 * DM00779817_1_0.pdf file in the licenses directory of this software product.

 *

 * THIS SOFTWARE IS DISTRIBUTED "AS IS," AND ALL WARRANTIES ARE DISCLAIMED,

 * INCLUDING MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.

 *

 ************************************************************************************/

/* Inclusion of the main header files of all the imported components in the

   order specified in the application wizard. The file is generated

   automatically.*/

#include "components.h"

#include "fnet.h"

#include "FreeRTOS.h"

#include "task.h"

#include "spi_nvram.h"

#include "spi_nor.h"

#include "i2c_lld.h"

//#include "i2c_hw.c"

//#include "Nor.c"

#include <stdio.h>

#include "string.h"

#include <errno.h>

unsigned int delay = 10000;

uint8_t message_task1[]= "Task1...\r\n";

uint8_t message_task2[]= "Task2...\r\n";

static fnet_uint8_t         stack_heap[30720];

        struct fnet_init_params     init_params;

        fnet_uint8_t                macAdd[6];

        fnet_netif_desc_t           ethInter;

        fnet_ip4_addr_t             ip,netmask;

void *sbrk(size_t incr) {

    extern uint8_t __heap_base__;

    extern uint8_t __heap_end__;

    static uint8_t *p = &__heap_base__;

    static uint8_t *newp;

    newp = p + incr;

    if (newp > &__heap_end__) {

        errno = ENOMEM;

        return (void *)-1;

    }

    return p = newp;

}

TaskHandle_t Port1TaskId=0;

TaskHandle_t Port2TaskId=0;

TaskHandle_t Port3TaskId=0;

TaskHandle_t Port4TaskId=0;

TaskHandle_t Port5TaskId=0;

TaskHandle_t Port6TaskId=0;

TaskHandle_t Port7TaskId=0;

TaskHandle_t Port8TaskId=0;

TaskHandle_t Port9TaskId=0;

TaskHandle_t Port10TaskId=0;

TaskHandle_t checkTaskId=0;

TaskHandle_t Tx232TaskId=0;

TaskHandle_t I2CTaskId=0;

typedef struct

{

    uint8_t REG00_Minimal_System_Voltage;

    uint16_t REG01_Charge_Voltage_Limit;

    uint16_t REG03_Charge_Current_Limit;

    uint8_t  REG05_Input_Voltage_Limit;

    uint16_t REG06_Input_Current_Limit;

    uint8_t REG08_Precharge_Control;

    uint8_t REG09_Termination_Control;

    uint8_t REG0A_Recharge_Control;

    uint16_t REG0B_VOTG_regulation;

    uint8_t REG0D_IOTG_regulation;

    uint8_t REG0E_Timer_Control;

    uint8_t REG0F_Charger_Control_0;

    uint8_t REG10_Charger_Control_1;

    uint8_t REG11_Charger_Control_2;

    uint8_t REG12_Charger_Control_3;

    uint8_t REG13_Charger_Control_4;

    uint8_t REG14_Charger_Control_5;

    uint8_t REG15_MPPT_Control;

    uint8_t REG16_Temperature_Control;

    uint8_t REG17_NTC_Control_0;

    uint8_t REG18_NTC_Control_1;

    uint16_t REG19_ICO_Current_Limit;

    uint8_t REG1B_Charger_Status_0;

    uint8_t REG1C_Charger_Status_1;

    uint8_t REG1D_Charger_Status_2;

    uint8_t REG1E_Charger_Status_3;

    uint8_t REG1F_Charger_Status_4;

    uint8_t REG20_FAULT_Status_0;

    uint8_t REG21_FAULT_Status_1;

    uint8_t REG22_Charger_Flag_0;

    uint8_t REG23_Charger_Flag_1;

    uint8_t REG24_Charger_Flag_2;

    uint8_t REG25_Charger_Flag_3;

    uint8_t REG26_FAULT_Flag_0;

    uint8_t REG27_FAULT_Flag_1;

    uint8_t REG28_Charger_Mask_0;

    uint8_t REG29_Charger_Mask_1;

    uint8_t REG2A_Charger_Mask_2;

    uint8_t REG2B_Charger_Mask_3;

    uint8_t REG2C_FAULT_Mask_0;

    uint8_t REG2D_FAULT_Mask_1;

    uint8_t REG2E_ADC_Control;

    uint8_t REG2F_ADC_Function_Disable_0;

    uint8_t REG30_ADC_Function_Disable_1;

    uint16_t REG31_IBUS_ADC;

    uint16_t REG33_IBAT_ADC;

    uint16_t REG35_VBUS_ADC;

    uint16_t REG37_VAC1_ADC;

    uint16_t REG39_VAC2_ADC;

    uint16_t REG3B_VBAT_ADC;

    uint16_t REG3D_VSYS_ADC;

    uint16_t REG3F_TS_ADC;

    uint16_t REG41_TDIE_ADC;

    uint16_t REG43_DP_ADC;

    uint16_t REG45_DM_ADC;

    uint8_t REG47_DPDM_Driver;

}BAT_Register;

BAT_Register bat_register;

volatile uint64_t PreviousTick=0,CurrentTick;

volatile uint8_t P1TX,P1RX,P2TX,P2RX,P3TX,P3RX,P4TX,P4RX,P10TX,P10RX,networkup;

volatile uint8_t  P5TX,P5RX,P6TX,P6RX,P7TX,P7RX,P8TX,P8RX,P9TX,P9RX,NOROK,nvramok;

uint8_t rxbuff[20],rxcount=0,rdbyte=0;

volatile uint8_t Port1flag=0,P1OK=0,P2OK=0,P3OK=0,P4OK=0,P5OK=0,P6OK=0,P7OK=0,P8OK=0,P9OK=0,P10OK=0;

void InitPort(void);

extern const SPIConfig spi_config_nvram;

extern const SPIConfig spi_config_nor;

extern const I2CHWConfig i2c_hw_config_I2C;

extern DATE_STRUCT date;

uint8_t manufactureID=0;

uint8_t ChargICPresent=0;

uint8_t I2CRxBuffBATCHG[75];

uint8_t P9TxData[]="PORT9 IS BEING TESTED";

volatile uint8_t TransmitBit=0;

uint8_t ReceiveMessage(SerialDriver *serPort,uint8_t *buff,uint16_t len)

{

    uint8_t junkBuff[30];

    volatile uint64_t startTime=0,tmpTime;

    volatile uint8_t length=0,data_avail=0,*tmpBuff;

    uint32_t totMs,rs485Id;

    uint16_t sizeofbuff = 20,readBt=0;

    tmpBuff=buff;

    startTime = xTaskGetTickCount();

    sd_lld_read(serPort,buff,len);

    //for ( ; ; )

    while(serPort->rx_busy == SPC5_LIN_RX_BUSY)

    {

        //readBt=sdReadTimeout(serPort,buff,10,TIME_IMMEDIATE);//sdAsynchronousRead

        //readBt = sd_lld_read(serPort,buff,sizeofbuff);

        readBt = (serPort->rx_TotalLen - serPort->rx_len) - length;

        if(readBt>0)

        {

            data_avail=1;

            length+=readBt;

            if (length>=len)

                        {

                            serPort->linflexlp->UARTCR.B.RXEN = 0;

                            serPort->linflexlp->LINIER.B.DRIE = 0; /* Interrupts disabled. */

                            if (serPort->linflexlp->UARTCR.B.TXEN == 0UL) {

                                serPort->linflexlp->LINIER.R &= ~((uint16_t)(SPC5_LIN_INTERRUPTS));

                            }

                            SPC5_LIN_RX_DONE(serPort);

                            return length;

//          if(length>=30)

//              return 0;                            //Ignore-Very Critical Situation (Buff with Max Size-150)

        }

            buff=buff+readBt;

            startTime = xTaskGetTickCount();

        }

        else

        {

            if(data_avail)

            {

                if(xTaskGetTickCount() - startTime  >5) //25            //If Next Char is not Avail till 50ms

                {

                    serPort->linflexlp->UARTCR.B.RXEN = 0;

                    serPort->linflexlp->LINIER.B.DRIE = 0; /* Interrupts disabled. */

                    if (serPort->linflexlp->UARTCR.B.TXEN == 0UL) {

                        serPort->linflexlp->LINIER.R &= ~((uint16_t)(SPC5_LIN_INTERRUPTS));

                }

                  SPC5_LIN_RX_DONE(serPort);

                    return length;

                }

            }

            else

            {

                tmpTime=xTaskGetTickCount();

                if(xTaskGetTickCount()-tmpTime >500)//If Not a Valid Reply up to 2

                {

                    serPort->linflexlp->UARTCR.B.RXEN = 0;

                    serPort->linflexlp->LINIER.B.DRIE = 0; /* Interrupts disabled. */

                    if (serPort->linflexlp->UARTCR.B.TXEN == 0UL) {

                        serPort->linflexlp->LINIER.R &= ~((uint16_t)(SPC5_LIN_INTERRUPTS));

                }

                    SPC5_LIN_RX_DONE(serPort);

                    return 0;

            //osalThreadDelayMilliseconds(1);

            //chThdSleep(MS2ST(2));

        }

    }

}

}

}

uint8_t ReceiveMessageCont(SerialDriver *serPort,uint8_t *buff, uint16_t len)

{

    uint8_t junkBuff[30];

    volatile uint64_t startTime=0,tmpTime;

    volatile uint8_t readBt=0,length=0,data_avail=0,*tmpBuff;

    uint32_t totMs,rs485Id;

    tmpBuff=buff;

    startTime = xTaskGetTickCount();

    sd_lld_read(serPort,buff,len);

    //  for ( ; ; )

    while(serPort->rx_busy == SPC5_LIN_RX_BUSY)

    {

        //readBt=sdReadTimeout(serPort,buff,10,TIME_IMMEDIATE);

        //      readBt = sd_lld_read(serPort,buff,20);

        readBt = (serPort->rx_TotalLen - serPort->rx_len) - length;

        if(readBt>0)

        {

            data_avail=1;

            length+=readBt;

            //          if(length>=30)

            //              return 0;                            //Ignore-Very Critical Situation (Buff with Max Size-150)

            if (length>=len)

            {

                serPort->linflexlp->UARTCR.B.RXEN = 0;

                serPort->linflexlp->LINIER.B.DRIE = 0; /* Interrupts disabled. */

                if (serPort->linflexlp->UARTCR.B.TXEN == 0UL) {

                    serPort->linflexlp->LINIER.R &= ~((uint16_t)(SPC5_LIN_INTERRUPTS));

                }

                SPC5_LIN_RX_DONE(serPort);

                return length;

            }

            buff=buff+readBt;

            startTime =  xTaskGetTickCount();

        }

        else

        {

            if(data_avail)

            {

                if(xTaskGetTickCount() - startTime >5)  //25            //If Next Char is not Avail till 50ms

                {

                    serPort->linflexlp->UARTCR.B.RXEN = 0;

                    serPort->linflexlp->LINIER.B.DRIE = 0; /* Interrupts disabled. */

                    if (serPort->linflexlp->UARTCR.B.TXEN == 0UL) {

                        serPort->linflexlp->LINIER.R &= ~((uint16_t)(SPC5_LIN_INTERRUPTS));

                    }

                    SPC5_LIN_RX_DONE(serPort);

                    return length;

                }

            }

            //chThdSleep(MS2ST(1));

            //          osalThreadDelayMilliseconds(1);

        }

//      osalThreadDelayMilliseconds(1);

        //chThdSleep(MS2ST(2));

    }

}

portTASK_FUNCTION(Port1Task , pvParameters )

{

    ( void ) pvParameters;

    P1TX=0;

    uint64_t CurrentTime=0;

    uint8_t txdata[]="PORT1  IS BEING TESTED ",lpvar,rxdata[20];

    CurrentTime=xTaskGetTickCount();

    for ( ; ; )

    {

        {

            //palsetPad(PORT_A,LIN5EN);

            pal_lld_setpad(PORT_A,LIN5EN);

            memset(rxdata,0,20);

            //for(lpvar=0;lpvar<10;lpvar++)

            {

                sd_lld_write(&SD6,&txdata[0],strlen(txdata));

                //              sdWrite(&SD6,txdata,strlen(txdata));

                //              while(SD6.oqueue.q_counter !=16)

                //                  chThdSleep(MS2ST(1));

                //              while(SD6.linflexp->UARTCR.B.TXEN)

                //                  chThdSleep(MS2ST(1));

                P1TX++;

            }

            //chThdSleep(MS2ST(2));

            //palClearPad(PORT_A,LIN5EN);

            //osalThreadDelayMilliseconds(2);

            pal_lld_clearpad(PORT_A,LIN5EN);

            //chThdSleep(MS2ST(20));

            osalThreadDelayMilliseconds(5);

            ReceiveMessage(&SD6, &rxdata[0],30);

            if(strncmp(rxdata,"PORT1 OK",8)==0)

                P1RX++;

            else

            {

                memset(rxdata,0,20);

            }

            //chThdSleep(MS2ST(5));

            osalThreadDelayMilliseconds(100);

        }

    }

}

portTASK_FUNCTION(Port2Task , pvParameters )

{

    ( void ) pvParameters;

    uint8_t rxdata[50],txdata[]="PORT1 OK";

    for ( ; ; )

    {

        memset(rxdata,0,50);

        pal_lld_clearpad(PORT_A,LIN4EN);

        //palClearPad(PORT_A,LIN4EN);

        //osalThreadDelayMilliseconds(20);

        ReceiveMessageCont(&SD5,&rxdata[0],30);

        if(strncmp(rxdata,"PORT1  IS BEING TESTED ",23)==0)

        {

            pal_lld_setpad(PORT_A,LIN4EN);

            //palSetPad(PORT_A,LIN4EN);

            P2RX++;

            sd_lld_write(&SD5,&txdata[0],strlen(txdata));

            //          sdWrite(&SD5,txdata,strlen(txdata));

            //          while(SD5.oqueue.q_counter !=16);

            //          while(SD5.linflexp->UARTCR.B.TXEN);

            P2TX++;

            pal_lld_clearpad(PORT_A,LIN4EN);

            //palClearPad(PORT_A,LIN4EN);

        }

        osalThreadDelayMilliseconds(100);

    }

}

portTASK_FUNCTION(Port3Task , pvParameters )

{

    ( void ) pvParameters;

    P3TX=0;

    uint64_t CurrentTime=0;

    uint8_t txdata[]="PORT3  IS BEING TESTED ",lpvar,rxdata[20];

    CurrentTime=xTaskGetTickCount();

    for ( ; ; )

    {

        {

            pal_lld_setpad(PORT_F,LIN1EN);

            memset(rxdata,0,20);

            //for(lpvar=0;lpvar<10;lpvar++)

            {

                sd_lld_write(&SD2,&txdata[0],strlen(txdata));

                //              sdWrite(&SD2,txdata,strlen(txdata));

                //              while(SD2.oqueue.q_counter !=16)

                //                  chThdSleep(MS2ST(1));

                //              while(SD2.linflexp->UARTCR.B.TXEN)

                //                  chThdSleep(MS2ST(1));

                P3TX++;

            }

            //chThdSleep(MS2ST(2));

            //osalThreadDelayMilliseconds(2);

            pal_lld_clearpad(PORT_F,LIN1EN);

            //osalThreadDelayMilliseconds(2);

            //chThdSleep(MS2ST(20));

            ReceiveMessage(&SD2, &rxdata[0],30);

            if(strncmp(rxdata,"PORT3 OK",8)==0)

                P3RX++;

            else

            {

                memset(rxdata,0,20);

            }

            osalThreadDelayMilliseconds(100);

            //chThdSleep(MS2ST(5));

        }

    }

}

portTASK_FUNCTION(Port4Task , pvParameters )

{

    ( void ) pvParameters;

    uint8_t rxdata[50],txdata[]="PORT3 OK";

    pal_lld_clearpad(PORT_B,LIN6EN);

    for ( ; ; )

    {

        {

            memset(rxdata,0,50);

            //osalThreadDelayMilliseconds(20);

            ReceiveMessageCont(&SD7,&rxdata[0],30);

            if(strcmp(rxdata,"PORT3  IS BEING TESTED ")==0)

            {

                //palSetPad(PORT_B,LIN6EN);

                pal_lld_setpad(PORT_C,LIN6EN);

                P4RX++;

                sd_lld_write(&SD7,&txdata[0],strlen(txdata));

                //              sdWrite(&SD7,txdata,strlen(txdata));

                //              while(SD7.oqueue.q_counter !=16);

                //              while(SD7.linflexp->UARTCR.B.TXEN);

                P4TX++;

                //palClearPad(PORT_B,LIN6EN);

                pal_lld_clearpad(PORT_C,LIN6EN);

            }

            osalThreadDelayMilliseconds(100);

        }

    }

}

portTASK_FUNCTION(Port5Task , pvParameters )

{

    ( void ) pvParameters;

    P5TX=0;

    uint64_t CurrentTime=0;

    uint8_t txdata[]="PORT5  IS BEING TESTED ",lpvar,rxdata[20];

    volatile uint16_t len=0;

    CurrentTime=xTaskGetTickCount();

    for ( ; ; )

    {

        {

            pal_lld_setpad(PORT_C,LIN7EN);

            memset(rxdata,0,20);

            //for(lpvar=0;lpvar<10;lpvar++)

            {

                sd_lld_write(&SD8,&txdata[0],strlen(txdata));

                //              sdWrite(&SD8,txdata,strlen(txdata));

                //              while(SD8.oqueue.q_counter !=16)

                //              chThdSleep(MS2ST(1));

                //              while(SD8.linflexp->UARTCR.B.TXEN)

                //              chThdSleep(MS2ST(1));

                P5TX++;

            }

            //chThdSleep(MS2ST(2));

            //osalThreadDelayMilliseconds(2);

            pal_lld_clearpad(PORT_C,LIN7EN);

            //osalThreadDelayMilliseconds(2);

            //chThdSleep(MS2ST(20));

            //osalThreadDelayMilliseconds(20);

            ReceiveMessage(&SD8, &rxdata[0],30);

            if(strncmp(rxdata,"PORT5 OK",8)==0)

                P5RX++;

            else

            {

                memset(rxdata,0,20);

            }

            osalThreadDelayMilliseconds(100);

            //chThdSleep(MS2ST(5));

        }

    }

}

portTASK_FUNCTION(Port6Task , pvParameters )

{

    ( void ) pvParameters;

    uint8_t rxdata[50],txdata[]="PORT5 OK";

    for ( ; ; )

    {

        {

            memset(rxdata,0,50);

            pal_lld_clearpad(PORT_A,LIN3EN);

            //osalThreadDelayMilliseconds(20);

            ReceiveMessage(&SD4,&rxdata[0],30);

            if(strncmp(rxdata,"PORT5  IS BEING TESTED ",23)==0)

            {

                pal_lld_setpad(PORT_A,LIN3EN);

                P6RX++;

                sd_lld_write(&SD4,&txdata[0],strlen(txdata));

                //              sdWrite(&SD4,txdata,strlen(txdata));

                //              while(SD4.oqueue.q_counter !=16);

                //              while(SD4.linflexp->UARTCR.B.TXEN);

                P6TX++;

            }

            osalThreadDelayMilliseconds(100);

        }

    }

}

portTASK_FUNCTION(Tx232Task , pvParameters )

{

    ( void ) pvParameters;

    uint8_t P7TxData[]="PORT7 IS BEING TESTED";

    uint8_t P8TxData[]="PORT8 IS BEING TESTED";

    uint8_t P9TxData[]="PORT9 IS BEING TESTED";

    uint8_t P10TxData[]="PORT10 IS BEING TESTED";

    uint8_t P7RxData[30],P8RxData[30],P9RxData[30],P10RxData[30];

    for ( ; ; )

    {

        //      sdWrite(&SD1,P7TxData,strlen(P7TxData));

        //      while(SD1.oqueue.q_counter !=16)

        //      chThdSleep(MS2ST(1));

        //      while(SD1.linflexp->UARTCR.B.TXEN)

        //      chThdSleep(MS2ST(1));

        //      P7TX++;

        //      chThdSleep(MS2ST(20));

        sd_lld_write(&SD10,&P7TxData[0],strlen(P7TxData));

        //              sdWrite(&SD10,P7TxData,strlen(P7TxData));

        //              while(SD10.oqueue.q_counter !=16)

        //              chThdSleep(MS2ST(1));

        //              while(SD10.linflexp->UARTCR.B.TXEN)

        //              chThdSleep(MS2ST(1));

        P7TX++;

        //osalThreadDelayMilliseconds(20);

        //chThdSleep(MS2ST(20));

        sd_lld_write(&SD3,&P8TxData[0],strlen(P8TxData));

        //      sdWrite(&SD3,P8TxData,strlen(P8TxData));

        //      while(SD3.oqueue.q_counter !=16)

        //      chThdSleep(MS2ST(1));

        //      while(SD3.linflexp->UARTCR.B.TXEN)

        //      chThdSleep(MS2ST(1));

        P8TX++;

        //osalThreadDelayMilliseconds(20);

        //chThdSleep(MS2ST(20));

        sd_lld_write(&SD9,P9TxData,strlen(P9TxData));

        //      sdWrite(&SD9,P9TxData,strlen(P9TxData));

        //      while(SD9.oqueue.q_counter !=16)

        //      chThdSleep(MS2ST(1));

        //      while(SD9.linflexp->UARTCR.B.TXEN)

        //chThdSleep(MS2ST(1));

        P9TX++;

        //osalThreadDelayMilliseconds(20);

        //chThdSleep(MS2ST(20));

        //      sdWrite(&SD9,P10TxData,strlen(P10TxData));

        //      while(SD9.oqueue.q_counter !=16)

        //      chThdSleep(MS2ST(1));

        //      while(SD9.linflexp->UARTCR.B.TXEN)

        //      chThdSleep(MS2ST(1));

        //      P10TX++;

        //chThdSleep(MS2ST(50));

        osalThreadDelayMilliseconds(500);

    }

}

portTASK_FUNCTION(Port7Task , pvParameters )

{

    ( void ) pvParameters;

    uint8_t rxdata[30];

    for ( ; ; )

    {

//      memset(rxdata,0,30);

//      ReceiveMessageCont(&SD1,&rxdata[0],30);

//              if(strncmp(rxdata,"PORT7 IS BEING TESTED",21)==0)

//              {

//                  P7RX++;

//              }

//              else

//                {

//                  memset(rxdata,0,30);

//                }

        memset(rxdata,0,30);

        ReceiveMessageCont(&SD10,&rxdata[0],30);

        if(strncmp(rxdata,"PORT7 IS BEING TESTED",21)==0)

        {

            P7RX++;

        }

        else

        {

            memset(rxdata,0,30);

        }

        osalThreadDelayMilliseconds(100);

        //chThdSleep(MS2ST(2));

    }

}

portTASK_FUNCTION(Port8Task , pvParameters )

{

    ( void ) pvParameters;

    uint8_t rxdata[30];

    for ( ; ; )

    {

        memset(rxdata,0,30);

        ReceiveMessageCont(&SD3,&rxdata[0],30);

        if(strncmp(rxdata,"PORT8 IS BEING TESTED",21)==0)

        {

            P8RX++;

        }

        else

        {

            memset(rxdata,0,30);

        }

        osalThreadDelayMilliseconds(100);

        //chThdSleep(MS2ST(2));

    }

}

portTASK_FUNCTION(Port9Task , pvParameters )

{

    ( void ) pvParameters;

    volatile uint8_t rxdata[30];

    for ( ; ; )

    {

        memset(rxdata,0,30);

        volatile uint16_t datalen = ReceiveMessageCont(&SD9,&rxdata[0], 30);

        if(strncmp(rxdata,"PORT9 IS BEING TESTED", 21)==0)

        {

            P9RX++;

        }

        else

        {

            memset(rxdata,0,30);

        }

        osalThreadDelayMilliseconds(500);

        //chThdSleep(MS2ST(2));

    }

}

portTASK_FUNCTION(Port10Task , pvParameters )

{

    ( void ) pvParameters;

    uint8_t rxdata[30];

    for ( ; ; )

    {

        memset(rxdata,0,30);

        //ReceiveMessageCont(&SD10,&rxdata[0]);

        ReceiveMessageCont(&SD1,&rxdata[0],30);

        if(rxdata[0]==0x52 && rxdata[7]==0x52)

        {

            date.YEAR=bcdToDec(rxdata[1])+2000;

            date.MONTH=bcdToDec(rxdata[2]);

            date.DAY=bcdToDec(rxdata[3]);

            date.HOUR=bcdToDec(rxdata[4]);

            date.MINUTE=bcdToDec(rxdata[5]);

            date.SECOND=bcdToDec(rxdata[6]);

            WriteSPINVRAMRTC(&SPID2);

        }

        //      if(strcmp(rxdata,"PORT10 IS BEING TESTED")==0)

        //      {

        //          P10RX++;

        //      }

        else

        {

            memset(rxdata,0,30);

        }

        osalThreadDelayMilliseconds(100);

    }

}

portTASK_FUNCTION(checkTask , pvParameters )

{

    uint8_t Tdata[600];

    ( void ) pvParameters;

    for ( ; ; )

    {

        if(Port1TaskId == 0)

        {

            xTaskCreate(Port1Task, (const char * const) "PORT1_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Port1TaskId);

        }

        if(Port2TaskId == 0)

        {

            xTaskCreate(Port2Task, (const char * const) "PORT2_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Port2TaskId);

        }

        if(Port3TaskId == 0)

        {

            xTaskCreate(Port3Task, (const char * const) "PORT3_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Port3TaskId);

        }

        if(Port4TaskId == 0)

        {

            xTaskCreate(Port4Task, (const char * const) "PORT4_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Port4TaskId);

        }

        if(Port5TaskId == 0)

        {

            xTaskCreate(Port5Task, (const char * const) "PORT5_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Port5TaskId);

        }

        if(Port1TaskId == 0)

        {

            xTaskCreate(Port6Task, (const char * const) "PORT6_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Port6TaskId);

        }

        if(Port7TaskId == 0)

        {

            xTaskCreate(Port7Task, (const char * const) "PORT7_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Port7TaskId);

        }

        if(Port8TaskId == 0)

        {

            xTaskCreate(Port8Task, (const char * const) "PORT8_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Port8TaskId);

        }

        if(Port9TaskId == 0)

        {

            xTaskCreate(Port9Task, (const char * const) "PORT9_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Port9TaskId);

        }

        if(Port10TaskId == 0)

        {

            xTaskCreate(Port10Task, (const char * const) "PORT10_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Port10TaskId);

        }

        if(Tx232TaskId == 0)

        {

            xTaskCreate(Tx232Task, (const char * const) "Tx232_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Tx232TaskId);

        }

        pal_lld_togglepad(PORT_F,STATUS_LED);

        Nvram_test();

        ReadSPINVRAMRTC(&SPID2);

        DetectSPINOR(&SPID8,1);

        P7OK=0;

        if(P7TX && P7RX)

        {

            if(P7TX>P7RX)

            {

                if((P7TX-P7RX)<3)

                    P7OK=1;

            }

            else

            {

                if((P7RX-P7TX)<3)

                    P7OK=1;

            }

        }

        P8OK=0;

        if(P8TX && P8RX)

        {

            if(P8TX>P8RX)

            {

                if((P8TX-P8RX)<3)

                    P8OK=1;

            }

            else

            {

                if((P8RX-P8TX)<3)

                    P8OK=1;

            }

        }

        P9OK=0;

        if(P9TX && P9RX)

        {

            if(P9TX>P9RX)

            {

                if((P9TX-P9RX)<3)

                    P9OK=1;

            }

            else

            {

                if((P9RX-P9TX)<3)

                    P9OK=1;

            }

        }

        P1OK=0;

        if(P1TX && P1RX)

        {

            if(P1TX>P1RX)

            {

                if((P1TX-P1RX)<3)

                    P1OK=1;

            }

            else

            {

                if((P1RX-P1TX)<3)

                    P1OK=1;

            }

        }

        P2OK=0;

        if(P2TX && P2RX)

        {

            if(P2TX>P2RX)

            {

                if((P2TX-P2RX)<3)

                    P2OK=1;

            }

            else

            {

                if((P2RX-P2TX)<3)

                    P2OK=1;

            }

        }

        P3OK=0;

        if(P3TX && P3RX)

        {

            if(P3TX>P3RX)

            {

                if((P3TX-P3RX)<3)

                    P3OK=1;

            }

            else

            {

                if((P3RX-P3TX)<3)

                    P3OK=1;

            }

        }

        P4OK=0;

        if(P4TX && P4RX)

        {

            if(P4TX>P4RX)

            {

                if((P4TX-P4RX)<3)

                    P4OK=1;

            }

            else

            {

                if((P4RX-P4TX)<3)

                    P4OK=1;

            }

        }

        P5OK=0;

        if(P5TX && P5RX)

        {

            if(P5TX>P5RX)

            {

                if((P5TX-P5RX)<3)

                    P5OK=1;

            }

            else

            {

                if((P5RX-P5TX)<3)

                    P5OK=1;

            }

        }

        P6OK=0;

        if(P6TX && P6RX)

        {

            if(P6TX>P6RX)

            {

                if((P6TX-P6RX)<3)

                    P6OK=1;

            }

            else

            {

                if((P6RX-P6TX)<3)

                    P6OK=1;

            }

        }

        memset(&Tdata[0],0,600);

        sprintf((char *)&Tdata[0],"NOR %s\nNVRAM %s\nPORT1 %s P1TX:%2d P1RX:%2d\nPORT2 %s P2TX:%2d P2RX:%2d\nPORT3 %s P3TX:%2d P3RX:%2d\nPORT4 %s P4TX:%2d P4RX:%2d\nPORT5 %s P5TX:%2d P5RX:%2d\nPORT6 %s P6TX:%2d P6RX:%2d\nPORT7 %s P7TX:%2d P7RX:%2d\nPORT8 %s P8TX:%2d P8RX:%2d\nPORT9 %s P9TX:%2d P9RX:%2d\nDATE:%2d/%2d/%4d\nTIME:%2d:%2d:%2d\nCharger %s\n\n\n",NOROK==1?"OK":"NOT OK",nvramok==1?"OK":"NOT OK",P1OK==1?"OK":"NOT OK",P1TX,P1RX,P2OK==1?"OK":"NOT OK",P2TX,P2RX,P3OK==1?"OK":"NOT OK",P3TX,P3RX,P4OK==1?"OK":"NOT OK",P4TX,P4RX,P5OK==1?"OK":"NOT OK",P5TX,P5RX,P6OK==1?"OK":"NOT OK",P6TX,P6RX,P7OK==1?"OK":"NOT OK",P7TX,P7RX,P8OK==1?"OK":"NOT OK",P8TX,P8RX,P9OK==1?"OK":"NOT OK",P9TX,P9RX,(date.DAY),(date.MONTH),(date.YEAR),(date.HOUR),(date.MINUTE),(date.SECOND),ChargICPresent==0?"is Not Present":"is Present");

        sd_lld_write(&SD1,&Tdata[0],(uint16_t)strlen(Tdata));

        //              sdWrite(&SD10,Tdata,strlen(Tdata));

        //              while(SD10.oqueue.q_counter !=16)

        //              chThdSleep(MS2ST(1));

        //              while(SD10.linflexp->UARTCR.B.TXEN)

        //              chThdSleep(MS2ST(1));

        //                  sdWrite(&SD1,Tdata,strlen(Tdata));

        //                  while(SD1.oqueue.q_counter !=16)

        //                  chThdSleep(MS2ST(1));

        //                  while(SD1.linflexp->UARTCR.B.TXEN)

        //                  chThdSleep(MS2ST(1));

        P1TX=P1RX=P2TX=P2RX=P3TX=P3RX=P4TX=P4RX=P5TX=P5RX=P6TX=P6RX=P7TX=P7RX=P8TX=P8RX=P9TX=P9RX=P10TX=P10RX=NOROK=nvramok=ChargICPresent=0;

        //CurrentTick=xTaskGetTickCount();

        osalThreadDelayMilliseconds(5000);

    }

}

portTASK_FUNCTION(I2CTask , pvParameters )

{

    ( void ) pvParameters;

    uint8_t ret;

    for ( ; ; )

    {

        ret = i2c_lld_read(&I2CD1,0xd6,0x48,(uint8_t*)&manufactureID,1);

         //if(i2c_lld_read(0xD6,0x48,(uint8_t*)&manufactureID,1) == I2C_NO_ERROR)

//      i2c_hw[I2CD1.ops->id].result

        //if(((I2C_HW_Driver)(I2CD1.ops->priv))->result == I2C_NO_ERROR)

//      if(ret == 0x1)

    {

            ChargICPresent = 1;

            if(i2c_lld_read(&I2CD1,0xd6,0x00,(uint8_t*)&I2CRxBuffBATCHG[0],0x48) == I2C_NO_ERROR)

            {

                bat_register.REG00_Minimal_System_Voltage = I2CRxBuffBATCHG[0];

                bat_register.REG01_Charge_Voltage_Limit = (I2CRxBuffBATCHG[1]<<8)|I2CRxBuffBATCHG[2];

                bat_register.REG03_Charge_Current_Limit = (I2CRxBuffBATCHG[3]<<8)|I2CRxBuffBATCHG[4];

                bat_register.REG05_Input_Voltage_Limit =  I2CRxBuffBATCHG[5];

                bat_register.REG06_Input_Current_Limit =  (I2CRxBuffBATCHG[6]<<8)|I2CRxBuffBATCHG[7];

                bat_register.REG08_Precharge_Control  = I2CRxBuffBATCHG[8];

                bat_register.REG09_Termination_Control  = I2CRxBuffBATCHG[9];

                bat_register.REG0A_Recharge_Control=  I2CRxBuffBATCHG[10];

                bat_register.REG0B_VOTG_regulation=  (I2CRxBuffBATCHG[11]<<8)|I2CRxBuffBATCHG[12];

                bat_register.REG0D_IOTG_regulation=  I2CRxBuffBATCHG[13];

                bat_register.REG0E_Timer_Control=  I2CRxBuffBATCHG[14];

                bat_register.REG0F_Charger_Control_0=  I2CRxBuffBATCHG[15];

                bat_register.REG10_Charger_Control_1=  I2CRxBuffBATCHG[16];

                bat_register.REG11_Charger_Control_2=  I2CRxBuffBATCHG[17];

                bat_register.REG12_Charger_Control_3=  I2CRxBuffBATCHG[18];

                bat_register.REG13_Charger_Control_4=  I2CRxBuffBATCHG[19];

                bat_register.REG14_Charger_Control_5=  I2CRxBuffBATCHG[20];

                bat_register.REG15_MPPT_Control=  I2CRxBuffBATCHG[21];

                bat_register.REG16_Temperature_Control=  I2CRxBuffBATCHG[22];

                bat_register.REG17_NTC_Control_0=  I2CRxBuffBATCHG[23];

                bat_register.REG18_NTC_Control_1=  I2CRxBuffBATCHG[24];

                bat_register.REG19_ICO_Current_Limit=  (I2CRxBuffBATCHG[25]<<8)|I2CRxBuffBATCHG[26];

                bat_register.REG1B_Charger_Status_0=  I2CRxBuffBATCHG[27];

                bat_register.REG1C_Charger_Status_1=  I2CRxBuffBATCHG[28];

                bat_register.REG1D_Charger_Status_2=  I2CRxBuffBATCHG[29];

                bat_register.REG1E_Charger_Status_3=  I2CRxBuffBATCHG[30];

                bat_register.REG1F_Charger_Status_4=  I2CRxBuffBATCHG[31];

                bat_register.REG20_FAULT_Status_0=  I2CRxBuffBATCHG[32];

                bat_register.REG21_FAULT_Status_1=  I2CRxBuffBATCHG[33];

                bat_register.REG22_Charger_Flag_0=  I2CRxBuffBATCHG[34];

                bat_register.REG23_Charger_Flag_1=  I2CRxBuffBATCHG[35];

                bat_register.REG24_Charger_Flag_2=  I2CRxBuffBATCHG[36];

                bat_register.REG25_Charger_Flag_3=  I2CRxBuffBATCHG[37];

                bat_register.REG26_FAULT_Flag_0=  I2CRxBuffBATCHG[38];

                bat_register.REG27_FAULT_Flag_1=  I2CRxBuffBATCHG[39];

                bat_register.REG28_Charger_Mask_0=  I2CRxBuffBATCHG[40];

                bat_register.REG29_Charger_Mask_1=  I2CRxBuffBATCHG[41];

                bat_register.REG2A_Charger_Mask_2=  I2CRxBuffBATCHG[42];

                bat_register.REG2B_Charger_Mask_3=  I2CRxBuffBATCHG[43];

                bat_register.REG2C_FAULT_Mask_0=  I2CRxBuffBATCHG[44];

                bat_register.REG2D_FAULT_Mask_1=  I2CRxBuffBATCHG[45];

                bat_register.REG2E_ADC_Control=  I2CRxBuffBATCHG[46];

                bat_register.REG2F_ADC_Function_Disable_0=  I2CRxBuffBATCHG[47];

                bat_register.REG30_ADC_Function_Disable_1=  I2CRxBuffBATCHG[48];

                bat_register.REG31_IBUS_ADC=  (I2CRxBuffBATCHG[49]<<8)|I2CRxBuffBATCHG[50];

                bat_register.REG33_IBAT_ADC=  (I2CRxBuffBATCHG[51]<<8)|I2CRxBuffBATCHG[52];

                bat_register.REG35_VBUS_ADC=  (I2CRxBuffBATCHG[53]<<8)|I2CRxBuffBATCHG[54];

                bat_register.REG37_VAC1_ADC=  (I2CRxBuffBATCHG[55]<<8)|I2CRxBuffBATCHG[56];

                bat_register.REG39_VAC2_ADC=  (I2CRxBuffBATCHG[57]<<8)|I2CRxBuffBATCHG[58];

                bat_register.REG3B_VBAT_ADC=  (I2CRxBuffBATCHG[59]<<8)|I2CRxBuffBATCHG[60];

                bat_register.REG3D_VSYS_ADC=  (I2CRxBuffBATCHG[61]<<8)|I2CRxBuffBATCHG[62];

                bat_register.REG3F_TS_ADC=  (I2CRxBuffBATCHG[63]<<8)|I2CRxBuffBATCHG[64];

                bat_register.REG41_TDIE_ADC=  (I2CRxBuffBATCHG[65]<<8)|I2CRxBuffBATCHG[66];

                bat_register.REG43_DP_ADC=  (I2CRxBuffBATCHG[67]<<8)|I2CRxBuffBATCHG[68];

                bat_register.REG45_DM_ADC=  (I2CRxBuffBATCHG[69]<<8)|I2CRxBuffBATCHG[70];

                bat_register.REG47_DPDM_Driver=  (I2CRxBuffBATCHG[71]<<8);

            }

            else

            {

                ChargICPresent = 0;

            }

        }

//      else

//      {

//          ChargICPresent = 0;

//      }

        osalThreadDelayMilliseconds(500);

        //chThdSleep(MS2ST(500));

    }

}

void InitPort(void)

{

    sd_lld_start(&SD1,NULL);

    sd_lld_start(&SD2,NULL);

    sd_lld_start(&SD3,NULL);

    sd_lld_start(&SD4,NULL);

    sd_lld_start(&SD5,NULL);

    sd_lld_start(&SD6,NULL);

    sd_lld_start(&SD7,NULL);

    sd_lld_start(&SD8,NULL);

    sd_lld_start(&SD9,NULL);

    sd_lld_start(&SD10,NULL);

    spi_lld_start(&SPID2,&spi_config_nvram);

    spi_lld_start(&SPID8,&spi_config_nor);

    i2c_lld_init();

    //i2c_lld_start(24);

    i2c_lld_start(&I2CD1,&i2c_hw_config_I2C);

}

IRQ_HANDLER(vector245) {

  IRQ_PROLOGUE();

  fnet_cpu_isr();

  //spc5xx_serve_rxi_interrupt(&SD1);

  IRQ_EPILOGUE();

}

IRQ_HANDLER(vector131) {

  IRQ_PROLOGUE();

  fnet_cpu_isr();

  //spc5xx_serve_rxi_interrupt(&SD1);

  IRQ_EPILOGUE();

}

void eth_int(void)

{

//  static fnet_uint8_t         stack_heap[30720];

//      struct fnet_init_params     init_params;

//      fnet_uint8_t                macAdd[6];

//      fnet_netif_desc_t           ethInter;

//      fnet_ip4_addr_t             ip,netmask;

        fnet_cpu_irq_enable(0);

            init_params.netheap_ptr = stack_heap;

            init_params.netheap_size = sizeof(stack_heap);

            if (fnet_init(&init_params) != FNET_ERR)

            {

                macAdd[0]=0x10;

                macAdd[1]=0x20;

                macAdd[2]=0x30;

                macAdd[3]=0x40;

                macAdd[4]=0x50;

                macAdd[5]=0x60;

                if(fnet_netif_init(FNET_CPU_ETH0_IF, macAdd, 6) != FNET_ERR)

                {

                    fnet_printf("TCP/IP stack initialization is done.\n");

                    ethInter= fnet_netif_get_by_name("eth0");

                    if(ethInter != FNET_NULL)

                    {

                        ip=FNET_IP4_ADDR_INIT(192,168,0,9);

                        netmask=FNET_IP4_ADDR_INIT(255,255,255,0);

                        fnet_netif_set_ip4_addr(ethInter, ip, netmask);

                    networkup=1;

                // xTaskCreate(tcp_task, "TCP_HANDLER_Task", 700, NULL, tskIDLE_PRIORITY, NULL);

                    }

                }

                else

                    {

                        fnet_printf("Error:TCP/IP stack initialization is failed.\n");

                        networkup=0;

                    }

            }

}

/* Demo tasks */

//portTASK_FUNCTION( vTaskOne, pvParameters )

//{

//  ( void ) pvParameters;

//  TickType_t xLastWakeTime = xTaskGetTickCount();

//  for ( ;; ) {

//    sd_lld_write(&SD9,message_task1,(uint16_t)(sizeof(message_task1)/sizeof(message_task1[0])));

//    taskENTER_CRITICAL();

//    pal_lld_togglepad(PORT_E, STATUS_LED);

//    taskEXIT_CRITICAL();

//    vTaskDelayUntil( &xLastWakeTime, 200 );

//  }

//}

//

///* Demo tasks */

//portTASK_FUNCTION( vTaskTwo, pvParameters )

//{

//  ( void ) pvParameters;

//  TickType_t xLastWakeTime = xTaskGetTickCount();

//  for ( ;; ) {

//    sd_lld_write(&SD9,message_task2,(uint16_t)(sizeof(message_task2)/sizeof(message_task2[0])));

//    vTaskDelayUntil( &xLastWakeTime, 200 );

//    taskENTER_CRITICAL();

//    pal_lld_togglepad(PORT_E, STATUS_LED);

//    taskEXIT_CRITICAL();

//  }

//}

/*

 * Application entry point.

 */

int main(void) {

    /* Initialization of all the imported components in the order specified in

     the application wizard. The function is generated automatically.*/

    componentsInit();

    /* Enable Interrupts */

    irqIsrEnable();

    InitPort();

    pal_lld_clearpad(PORT_I,E_RESET);

    while(--delay>100);

    pal_lld_setpad(PORT_I,E_RESET);

    SPCSetPeripheralClockMode(92, SPC5_ME_PCTL_RUN(1) | SPC5_ME_PCTL_LP(2));

//  eth_int();

    pal_lld_setpad(PORT_H,NOR_CS2);

    xTaskCreate(Port1Task, (const char * const) "PORT1_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Port1TaskId);

    xTaskCreate(Port2Task, (const char * const) "PORT2_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Port2TaskId);

    xTaskCreate(Port3Task,  (const char * const)"PORT3_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Port3TaskId);

    xTaskCreate(Port4Task, (const char * const) "PORT4_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY,&Port4TaskId);

    xTaskCreate(Port5Task,  (const char * const)"PORT5_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Port5TaskId);

    xTaskCreate(Port6Task,  (const char * const)"PORT6_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Port6TaskId);

    xTaskCreate(Port7Task, (const char * const) "PORT7_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Port7TaskId);

    xTaskCreate(Port8Task,  (const char * const)"PORT8_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Port8TaskId);

    xTaskCreate(Port9Task,  (const char * const)"PORT9_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Port9TaskId);

    xTaskCreate(Port10Task,  (const char * const)"PORT10_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Port10TaskId);

    xTaskCreate(Tx232Task,  (const char * const)"Tx232Task_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Tx232TaskId);

    xTaskCreate(I2CTask, (const char * const) "I2CTask_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY,&I2CTaskId);

    xTaskCreate(checkTask, (const char * const) "checkTask_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &checkTaskId);

    //  sd_lld_start(&SD9, NULL);

    //

    //  /* Creating first task to blink LED0 */

    //  xTaskCreate( vTaskOne,

    //               (const char * const)"task #1",

    //               configMINIMAL_STACK_SIZE,

    //               NULL,

    //               tskIDLE_PRIORITY + 1,

    //               NULL );

    //

    //  /* Creating second task to blink LED1 */

    //  xTaskCreate( vTaskTwo,

    //               (const char * const)"task #2",

    //               configMINIMAL_STACK_SIZE,

    //               NULL,

    //               tskIDLE_PRIORITY + 1,

    //               NULL );

    /* Start the FreeRTOS scheduler */

    vTaskStartScheduler();

    for(;;){
/***********************************************************************************

 *

 * Copyright © 2016-2019 STMicroelectronics - All Rights Reserved

 *

 * This software is licensed under SLA0098 terms that can be found in the

 * DM00779817_1_0.pdf file in the licenses directory of this software product.

 *

 * THIS SOFTWARE IS DISTRIBUTED "AS IS," AND ALL WARRANTIES ARE DISCLAIMED,

 * INCLUDING MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.

 *

 ************************************************************************************/

/* Inclusion of the main header files of all the imported components in the

   order specified in the application wizard. The file is generated

   automatically.*/

#include "components.h"

#include "fnet.h"

#include "FreeRTOS.h"

#include "task.h"

#include "spi_nvram.h"

#include "spi_nor.h"

#include "i2c_lld.h"

//#include "i2c_hw.c"

//#include "Nor.c"

#include <stdio.h>

#include "string.h"

#include <errno.h>

unsigned int delay = 10000;

uint8_t message_task1[]= "Task1...\r\n";

uint8_t message_task2[]= "Task2...\r\n";

static fnet_uint8_t         stack_heap[30720];

        struct fnet_init_params     init_params;

        fnet_uint8_t                macAdd[6];

        fnet_netif_desc_t           ethInter;

        fnet_ip4_addr_t             ip,netmask;

void *sbrk(size_t incr) {

    extern uint8_t __heap_base__;

    extern uint8_t __heap_end__;

    static uint8_t *p = &__heap_base__;

    static uint8_t *newp;

    newp = p + incr;

    if (newp > &__heap_end__) {

        errno = ENOMEM;

        return (void *)-1;

    }

    return p = newp;

}

TaskHandle_t Port1TaskId=0;

TaskHandle_t Port2TaskId=0;

TaskHandle_t Port3TaskId=0;

TaskHandle_t Port4TaskId=0;

TaskHandle_t Port5TaskId=0;

TaskHandle_t Port6TaskId=0;

TaskHandle_t Port7TaskId=0;

TaskHandle_t Port8TaskId=0;

TaskHandle_t Port9TaskId=0;

TaskHandle_t Port10TaskId=0;

TaskHandle_t checkTaskId=0;

TaskHandle_t Tx232TaskId=0;

TaskHandle_t I2CTaskId=0;

typedef struct

{

    uint8_t REG00_Minimal_System_Voltage;

    uint16_t REG01_Charge_Voltage_Limit;

    uint16_t REG03_Charge_Current_Limit;

    uint8_t  REG05_Input_Voltage_Limit;

    uint16_t REG06_Input_Current_Limit;

    uint8_t REG08_Precharge_Control;

    uint8_t REG09_Termination_Control;

    uint8_t REG0A_Recharge_Control;

    uint16_t REG0B_VOTG_regulation;

    uint8_t REG0D_IOTG_regulation;

    uint8_t REG0E_Timer_Control;

    uint8_t REG0F_Charger_Control_0;

    uint8_t REG10_Charger_Control_1;

    uint8_t REG11_Charger_Control_2;

    uint8_t REG12_Charger_Control_3;

    uint8_t REG13_Charger_Control_4;

    uint8_t REG14_Charger_Control_5;

    uint8_t REG15_MPPT_Control;

    uint8_t REG16_Temperature_Control;

    uint8_t REG17_NTC_Control_0;

    uint8_t REG18_NTC_Control_1;

    uint16_t REG19_ICO_Current_Limit;

    uint8_t REG1B_Charger_Status_0;

    uint8_t REG1C_Charger_Status_1;

    uint8_t REG1D_Charger_Status_2;

    uint8_t REG1E_Charger_Status_3;

    uint8_t REG1F_Charger_Status_4;

    uint8_t REG20_FAULT_Status_0;

    uint8_t REG21_FAULT_Status_1;

    uint8_t REG22_Charger_Flag_0;

    uint8_t REG23_Charger_Flag_1;

    uint8_t REG24_Charger_Flag_2;

    uint8_t REG25_Charger_Flag_3;

    uint8_t REG26_FAULT_Flag_0;

    uint8_t REG27_FAULT_Flag_1;

    uint8_t REG28_Charger_Mask_0;

    uint8_t REG29_Charger_Mask_1;

    uint8_t REG2A_Charger_Mask_2;

    uint8_t REG2B_Charger_Mask_3;

    uint8_t REG2C_FAULT_Mask_0;

    uint8_t REG2D_FAULT_Mask_1;

    uint8_t REG2E_ADC_Control;

    uint8_t REG2F_ADC_Function_Disable_0;

    uint8_t REG30_ADC_Function_Disable_1;

    uint16_t REG31_IBUS_ADC;

    uint16_t REG33_IBAT_ADC;

    uint16_t REG35_VBUS_ADC;

    uint16_t REG37_VAC1_ADC;

    uint16_t REG39_VAC2_ADC;

    uint16_t REG3B_VBAT_ADC;

    uint16_t REG3D_VSYS_ADC;

    uint16_t REG3F_TS_ADC;

    uint16_t REG41_TDIE_ADC;

    uint16_t REG43_DP_ADC;

    uint16_t REG45_DM_ADC;

    uint8_t REG47_DPDM_Driver;

}BAT_Register;

BAT_Register bat_register;

volatile uint64_t PreviousTick=0,CurrentTick;

volatile uint8_t P1TX,P1RX,P2TX,P2RX,P3TX,P3RX,P4TX,P4RX,P10TX,P10RX,networkup;

volatile uint8_t  P5TX,P5RX,P6TX,P6RX,P7TX,P7RX,P8TX,P8RX,P9TX,P9RX,NOROK,nvramok;

uint8_t rxbuff[20],rxcount=0,rdbyte=0;

volatile uint8_t Port1flag=0,P1OK=0,P2OK=0,P3OK=0,P4OK=0,P5OK=0,P6OK=0,P7OK=0,P8OK=0,P9OK=0,P10OK=0;

void InitPort(void);

extern const SPIConfig spi_config_nvram;

extern const SPIConfig spi_config_nor;

extern const I2CHWConfig i2c_hw_config_I2C;

extern DATE_STRUCT date;

uint8_t manufactureID=0;

uint8_t ChargICPresent=0;

uint8_t I2CRxBuffBATCHG[75];

uint8_t P9TxData[]="PORT9 IS BEING TESTED";

volatile uint8_t TransmitBit=0;

uint8_t ReceiveMessage(SerialDriver *serPort,uint8_t *buff,uint16_t len)

{

    uint8_t junkBuff[30];

    volatile uint64_t startTime=0,tmpTime;

    volatile uint8_t length=0,data_avail=0,*tmpBuff;

    uint32_t totMs,rs485Id;

    uint16_t sizeofbuff = 20,readBt=0;

    tmpBuff=buff;

    startTime = xTaskGetTickCount();

    sd_lld_read(serPort,buff,len);

    //for ( ; ; )

    while(serPort->rx_busy == SPC5_LIN_RX_BUSY)

    {

        //readBt=sdReadTimeout(serPort,buff,10,TIME_IMMEDIATE);//sdAsynchronousRead

        //readBt = sd_lld_read(serPort,buff,sizeofbuff);

        readBt = (serPort->rx_TotalLen - serPort->rx_len) - length;

        if(readBt>0)

        {

            data_avail=1;

            length+=readBt;

            if (length>=len)

                        {

                            serPort->linflexlp->UARTCR.B.RXEN = 0;

                            serPort->linflexlp->LINIER.B.DRIE = 0; /* Interrupts disabled. */

                            if (serPort->linflexlp->UARTCR.B.TXEN == 0UL) {

                                serPort->linflexlp->LINIER.R &= ~((uint16_t)(SPC5_LIN_INTERRUPTS));

                            }

                            SPC5_LIN_RX_DONE(serPort);

                            return length;

//          if(length>=30)

//              return 0;                            //Ignore-Very Critical Situation (Buff with Max Size-150)

        }

            buff=buff+readBt;

            startTime = xTaskGetTickCount();

        }

        else

        {

            if(data_avail)

            {

                if(xTaskGetTickCount() - startTime  >5) //25            //If Next Char is not Avail till 50ms

                {

                    serPort->linflexlp->UARTCR.B.RXEN = 0;

                    serPort->linflexlp->LINIER.B.DRIE = 0; /* Interrupts disabled. */

                    if (serPort->linflexlp->UARTCR.B.TXEN == 0UL) {

                        serPort->linflexlp->LINIER.R &= ~((uint16_t)(SPC5_LIN_INTERRUPTS));

                }

                  SPC5_LIN_RX_DONE(serPort);

                    return length;

                }

            }

            else

            {

                tmpTime=xTaskGetTickCount();

                if(xTaskGetTickCount()-tmpTime >500)//If Not a Valid Reply up to 2

                {

                    serPort->linflexlp->UARTCR.B.RXEN = 0;

                    serPort->linflexlp->LINIER.B.DRIE = 0; /* Interrupts disabled. */

                    if (serPort->linflexlp->UARTCR.B.TXEN == 0UL) {

                        serPort->linflexlp->LINIER.R &= ~((uint16_t)(SPC5_LIN_INTERRUPTS));

                }

                    SPC5_LIN_RX_DONE(serPort);

                    return 0;

            //osalThreadDelayMilliseconds(1);

            //chThdSleep(MS2ST(2));

        }

    }

}

}

}

uint8_t ReceiveMessageCont(SerialDriver *serPort,uint8_t *buff, uint16_t len)

{

    uint8_t junkBuff[30];

    volatile uint64_t startTime=0,tmpTime;

    volatile uint8_t readBt=0,length=0,data_avail=0,*tmpBuff;

    uint32_t totMs,rs485Id;

    tmpBuff=buff;

    startTime = xTaskGetTickCount();

    sd_lld_read(serPort,buff,len);

    //  for ( ; ; )

    while(serPort->rx_busy == SPC5_LIN_RX_BUSY)

    {

        //readBt=sdReadTimeout(serPort,buff,10,TIME_IMMEDIATE);

        //      readBt = sd_lld_read(serPort,buff,20);

        readBt = (serPort->rx_TotalLen - serPort->rx_len) - length;

        if(readBt>0)

        {

            data_avail=1;

            length+=readBt;

            //          if(length>=30)

            //              return 0;                            //Ignore-Very Critical Situation (Buff with Max Size-150)

            if (length>=len)

            {

                serPort->linflexlp->UARTCR.B.RXEN = 0;

                serPort->linflexlp->LINIER.B.DRIE = 0; /* Interrupts disabled. */

                if (serPort->linflexlp->UARTCR.B.TXEN == 0UL) {

                    serPort->linflexlp->LINIER.R &= ~((uint16_t)(SPC5_LIN_INTERRUPTS));

                }

                SPC5_LIN_RX_DONE(serPort);

                return length;

            }

            buff=buff+readBt;

            startTime =  xTaskGetTickCount();

        }

        else

        {

            if(data_avail)

            {

                if(xTaskGetTickCount() - startTime >5)  //25            //If Next Char is not Avail till 50ms

                {

                    serPort->linflexlp->UARTCR.B.RXEN = 0;

                    serPort->linflexlp->LINIER.B.DRIE = 0; /* Interrupts disabled. */

                    if (serPort->linflexlp->UARTCR.B.TXEN == 0UL) {

                        serPort->linflexlp->LINIER.R &= ~((uint16_t)(SPC5_LIN_INTERRUPTS));

                    }

                    SPC5_LIN_RX_DONE(serPort);

                    return length;

                }

            }

            //chThdSleep(MS2ST(1));

            //          osalThreadDelayMilliseconds(1);

        }

//      osalThreadDelayMilliseconds(1);

        //chThdSleep(MS2ST(2));

    }

}

portTASK_FUNCTION(Port1Task , pvParameters )

{

    ( void ) pvParameters;

    P1TX=0;

    uint64_t CurrentTime=0;

    uint8_t txdata[]="PORT1  IS BEING TESTED ",lpvar,rxdata[20];

    CurrentTime=xTaskGetTickCount();

    for ( ; ; )

    {

        {

            //palsetPad(PORT_A,LIN5EN);

            pal_lld_setpad(PORT_A,LIN5EN);

            memset(rxdata,0,20);

            //for(lpvar=0;lpvar<10;lpvar++)

            {

                sd_lld_write(&SD6,&txdata[0],strlen(txdata));

                //              sdWrite(&SD6,txdata,strlen(txdata));

                //              while(SD6.oqueue.q_counter !=16)

                //                  chThdSleep(MS2ST(1));

                //              while(SD6.linflexp->UARTCR.B.TXEN)

                //                  chThdSleep(MS2ST(1));

                P1TX++;

            }

            //chThdSleep(MS2ST(2));

            //palClearPad(PORT_A,LIN5EN);

            //osalThreadDelayMilliseconds(2);

            pal_lld_clearpad(PORT_A,LIN5EN);

            //chThdSleep(MS2ST(20));

            osalThreadDelayMilliseconds(5);

            ReceiveMessage(&SD6, &rxdata[0],30);

            if(strncmp(rxdata,"PORT1 OK",8)==0)

                P1RX++;

            else

            {

                memset(rxdata,0,20);

            }

            //chThdSleep(MS2ST(5));

            osalThreadDelayMilliseconds(100);

        }

    }

}

portTASK_FUNCTION(Port2Task , pvParameters )

{

    ( void ) pvParameters;

    uint8_t rxdata[50],txdata[]="PORT1 OK";

    for ( ; ; )

    {

        memset(rxdata,0,50);

        pal_lld_clearpad(PORT_A,LIN4EN);

        //palClearPad(PORT_A,LIN4EN);

        //osalThreadDelayMilliseconds(20);

        ReceiveMessageCont(&SD5,&rxdata[0],30);

        if(strncmp(rxdata,"PORT1  IS BEING TESTED ",23)==0)

        {

            pal_lld_setpad(PORT_A,LIN4EN);

            //palSetPad(PORT_A,LIN4EN);

            P2RX++;

            sd_lld_write(&SD5,&txdata[0],strlen(txdata));

            //          sdWrite(&SD5,txdata,strlen(txdata));

            //          while(SD5.oqueue.q_counter !=16);

            //          while(SD5.linflexp->UARTCR.B.TXEN);

            P2TX++;

            pal_lld_clearpad(PORT_A,LIN4EN);

            //palClearPad(PORT_A,LIN4EN);

        }

        osalThreadDelayMilliseconds(100);

    }

}

portTASK_FUNCTION(Port3Task , pvParameters )

{

    ( void ) pvParameters;

    P3TX=0;

    uint64_t CurrentTime=0;

    uint8_t txdata[]="PORT3  IS BEING TESTED ",lpvar,rxdata[20];

    CurrentTime=xTaskGetTickCount();

    for ( ; ; )

    {

        {

            pal_lld_setpad(PORT_F,LIN1EN);

            memset(rxdata,0,20);

            //for(lpvar=0;lpvar<10;lpvar++)

            {

                sd_lld_write(&SD2,&txdata[0],strlen(txdata));

                //              sdWrite(&SD2,txdata,strlen(txdata));

                //              while(SD2.oqueue.q_counter !=16)

                //                  chThdSleep(MS2ST(1));

                //              while(SD2.linflexp->UARTCR.B.TXEN)

                //                  chThdSleep(MS2ST(1));

                P3TX++;

            }

            //chThdSleep(MS2ST(2));

            //osalThreadDelayMilliseconds(2);

            pal_lld_clearpad(PORT_F,LIN1EN);

            //osalThreadDelayMilliseconds(2);

            //chThdSleep(MS2ST(20));

            ReceiveMessage(&SD2, &rxdata[0],30);

            if(strncmp(rxdata,"PORT3 OK",8)==0)

                P3RX++;

            else

            {

                memset(rxdata,0,20);

            }

            osalThreadDelayMilliseconds(100);

            //chThdSleep(MS2ST(5));

        }

    }

}

portTASK_FUNCTION(Port4Task , pvParameters )

{

    ( void ) pvParameters;

    uint8_t rxdata[50],txdata[]="PORT3 OK";

    pal_lld_clearpad(PORT_B,LIN6EN);

    for ( ; ; )

    {

        {

            memset(rxdata,0,50);

            //osalThreadDelayMilliseconds(20);

            ReceiveMessageCont(&SD7,&rxdata[0],30);

            if(strcmp(rxdata,"PORT3  IS BEING TESTED ")==0)

            {

                //palSetPad(PORT_B,LIN6EN);

                pal_lld_setpad(PORT_C,LIN6EN);

                P4RX++;

                sd_lld_write(&SD7,&txdata[0],strlen(txdata));

                //              sdWrite(&SD7,txdata,strlen(txdata));

                //              while(SD7.oqueue.q_counter !=16);

                //              while(SD7.linflexp->UARTCR.B.TXEN);

                P4TX++;

                //palClearPad(PORT_B,LIN6EN);

                pal_lld_clearpad(PORT_C,LIN6EN);

            }

            osalThreadDelayMilliseconds(100);

        }

    }

}

portTASK_FUNCTION(Port5Task , pvParameters )

{

    ( void ) pvParameters;

    P5TX=0;

    uint64_t CurrentTime=0;

    uint8_t txdata[]="PORT5  IS BEING TESTED ",lpvar,rxdata[20];

    volatile uint16_t len=0;

    CurrentTime=xTaskGetTickCount();

    for ( ; ; )

    {

        {

            pal_lld_setpad(PORT_C,LIN7EN);

            memset(rxdata,0,20);

            //for(lpvar=0;lpvar<10;lpvar++)

            {

                sd_lld_write(&SD8,&txdata[0],strlen(txdata));

                //              sdWrite(&SD8,txdata,strlen(txdata));

                //              while(SD8.oqueue.q_counter !=16)

                //              chThdSleep(MS2ST(1));

                //              while(SD8.linflexp->UARTCR.B.TXEN)

                //              chThdSleep(MS2ST(1));

                P5TX++;

            }

            //chThdSleep(MS2ST(2));

            //osalThreadDelayMilliseconds(2);

            pal_lld_clearpad(PORT_C,LIN7EN);

            //osalThreadDelayMilliseconds(2);

            //chThdSleep(MS2ST(20));

            //osalThreadDelayMilliseconds(20);

            ReceiveMessage(&SD8, &rxdata[0],30);

            if(strncmp(rxdata,"PORT5 OK",8)==0)

                P5RX++;

            else

            {

                memset(rxdata,0,20);

            }

            osalThreadDelayMilliseconds(100);

            //chThdSleep(MS2ST(5));

        }

    }

}

portTASK_FUNCTION(Port6Task , pvParameters )

{

    ( void ) pvParameters;

    uint8_t rxdata[50],txdata[]="PORT5 OK";

    for ( ; ; )

    {

        {

            memset(rxdata,0,50);

            pal_lld_clearpad(PORT_A,LIN3EN);

            //osalThreadDelayMilliseconds(20);

            ReceiveMessage(&SD4,&rxdata[0],30);

            if(strncmp(rxdata,"PORT5  IS BEING TESTED ",23)==0)

            {

                pal_lld_setpad(PORT_A,LIN3EN);

                P6RX++;

                sd_lld_write(&SD4,&txdata[0],strlen(txdata));

                //              sdWrite(&SD4,txdata,strlen(txdata));

                //              while(SD4.oqueue.q_counter !=16);

                //              while(SD4.linflexp->UARTCR.B.TXEN);

                P6TX++;

            }

            osalThreadDelayMilliseconds(100);

        }

    }

}

portTASK_FUNCTION(Tx232Task , pvParameters )

{

    ( void ) pvParameters;

    uint8_t P7TxData[]="PORT7 IS BEING TESTED";

    uint8_t P8TxData[]="PORT8 IS BEING TESTED";

    uint8_t P9TxData[]="PORT9 IS BEING TESTED";

    uint8_t P10TxData[]="PORT10 IS BEING TESTED";

    uint8_t P7RxData[30],P8RxData[30],P9RxData[30],P10RxData[30];

    for ( ; ; )

    {

        //      sdWrite(&SD1,P7TxData,strlen(P7TxData));

        //      while(SD1.oqueue.q_counter !=16)

        //      chThdSleep(MS2ST(1));

        //      while(SD1.linflexp->UARTCR.B.TXEN)

        //      chThdSleep(MS2ST(1));

        //      P7TX++;

        //      chThdSleep(MS2ST(20));

        sd_lld_write(&SD10,&P7TxData[0],strlen(P7TxData));

        //              sdWrite(&SD10,P7TxData,strlen(P7TxData));

        //              while(SD10.oqueue.q_counter !=16)

        //              chThdSleep(MS2ST(1));

        //              while(SD10.linflexp->UARTCR.B.TXEN)

        //              chThdSleep(MS2ST(1));

        P7TX++;

        //osalThreadDelayMilliseconds(20);

        //chThdSleep(MS2ST(20));

        sd_lld_write(&SD3,&P8TxData[0],strlen(P8TxData));

        //      sdWrite(&SD3,P8TxData,strlen(P8TxData));

        //      while(SD3.oqueue.q_counter !=16)

        //      chThdSleep(MS2ST(1));

        //      while(SD3.linflexp->UARTCR.B.TXEN)

        //      chThdSleep(MS2ST(1));

        P8TX++;

        //osalThreadDelayMilliseconds(20);

        //chThdSleep(MS2ST(20));

        sd_lld_write(&SD9,P9TxData,strlen(P9TxData));

        //      sdWrite(&SD9,P9TxData,strlen(P9TxData));

        //      while(SD9.oqueue.q_counter !=16)

        //      chThdSleep(MS2ST(1));

        //      while(SD9.linflexp->UARTCR.B.TXEN)

        //chThdSleep(MS2ST(1));

        P9TX++;

        //osalThreadDelayMilliseconds(20);

        //chThdSleep(MS2ST(20));

        //      sdWrite(&SD9,P10TxData,strlen(P10TxData));

        //      while(SD9.oqueue.q_counter !=16)

        //      chThdSleep(MS2ST(1));

        //      while(SD9.linflexp->UARTCR.B.TXEN)

        //      chThdSleep(MS2ST(1));

        //      P10TX++;

        //chThdSleep(MS2ST(50));

        osalThreadDelayMilliseconds(500);

    }

}

portTASK_FUNCTION(Port7Task , pvParameters )

{

    ( void ) pvParameters;

    uint8_t rxdata[30];

    for ( ; ; )

    {

//      memset(rxdata,0,30);

//      ReceiveMessageCont(&SD1,&rxdata[0],30);

//              if(strncmp(rxdata,"PORT7 IS BEING TESTED",21)==0)

//              {

//                  P7RX++;

//              }

//              else

//                {

//                  memset(rxdata,0,30);

//                }

        memset(rxdata,0,30);

        ReceiveMessageCont(&SD10,&rxdata[0],30);

        if(strncmp(rxdata,"PORT7 IS BEING TESTED",21)==0)

        {

            P7RX++;

        }

        else

        {

            memset(rxdata,0,30);

        }

        osalThreadDelayMilliseconds(100);

        //chThdSleep(MS2ST(2));

    }

}

portTASK_FUNCTION(Port8Task , pvParameters )

{

    ( void ) pvParameters;

    uint8_t rxdata[30];

    for ( ; ; )

    {

        memset(rxdata,0,30);

        ReceiveMessageCont(&SD3,&rxdata[0],30);

        if(strncmp(rxdata,"PORT8 IS BEING TESTED",21)==0)

        {

            P8RX++;

        }

        else

        {

            memset(rxdata,0,30);

        }

        osalThreadDelayMilliseconds(100);

        //chThdSleep(MS2ST(2));

    }

}

portTASK_FUNCTION(Port9Task , pvParameters )

{

    ( void ) pvParameters;

    volatile uint8_t rxdata[30];

    for ( ; ; )

    {

        memset(rxdata,0,30);

        volatile uint16_t datalen = ReceiveMessageCont(&SD9,&rxdata[0], 30);

        if(strncmp(rxdata,"PORT9 IS BEING TESTED", 21)==0)

        {

            P9RX++;

        }

        else

        {

            memset(rxdata,0,30);

        }

        osalThreadDelayMilliseconds(500);

        //chThdSleep(MS2ST(2));

    }

}

portTASK_FUNCTION(Port10Task , pvParameters )

{

    ( void ) pvParameters;

    uint8_t rxdata[30];

    for ( ; ; )

    {

        memset(rxdata,0,30);

        //ReceiveMessageCont(&SD10,&rxdata[0]);

        ReceiveMessageCont(&SD1,&rxdata[0],30);

        if(rxdata[0]==0x52 && rxdata[7]==0x52)

        {

            date.YEAR=bcdToDec(rxdata[1])+2000;

            date.MONTH=bcdToDec(rxdata[2]);

            date.DAY=bcdToDec(rxdata[3]);

            date.HOUR=bcdToDec(rxdata[4]);

            date.MINUTE=bcdToDec(rxdata[5]);

            date.SECOND=bcdToDec(rxdata[6]);

            WriteSPINVRAMRTC(&SPID2);

        }

        //      if(strcmp(rxdata,"PORT10 IS BEING TESTED")==0)

        //      {

        //          P10RX++;

        //      }

        else

        {

            memset(rxdata,0,30);

        }

        osalThreadDelayMilliseconds(100);

    }

}

portTASK_FUNCTION(checkTask , pvParameters )

{

    uint8_t Tdata[600];

    ( void ) pvParameters;

    for ( ; ; )

    {

        if(Port1TaskId == 0)

        {

            xTaskCreate(Port1Task, (const char * const) "PORT1_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Port1TaskId);

        }

        if(Port2TaskId == 0)

        {

            xTaskCreate(Port2Task, (const char * const) "PORT2_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Port2TaskId);

        }

        if(Port3TaskId == 0)

        {

            xTaskCreate(Port3Task, (const char * const) "PORT3_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Port3TaskId);

        }

        if(Port4TaskId == 0)

        {

            xTaskCreate(Port4Task, (const char * const) "PORT4_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Port4TaskId);

        }

        if(Port5TaskId == 0)

        {

            xTaskCreate(Port5Task, (const char * const) "PORT5_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Port5TaskId);

        }

        if(Port1TaskId == 0)

        {

            xTaskCreate(Port6Task, (const char * const) "PORT6_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Port6TaskId);

        }

        if(Port7TaskId == 0)

        {

            xTaskCreate(Port7Task, (const char * const) "PORT7_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Port7TaskId);

        }

        if(Port8TaskId == 0)

        {

            xTaskCreate(Port8Task, (const char * const) "PORT8_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Port8TaskId);

        }

        if(Port9TaskId == 0)

        {

            xTaskCreate(Port9Task, (const char * const) "PORT9_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Port9TaskId);

        }

        if(Port10TaskId == 0)

        {

            xTaskCreate(Port10Task, (const char * const) "PORT10_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Port10TaskId);

        }

        if(Tx232TaskId == 0)

        {

            xTaskCreate(Tx232Task, (const char * const) "Tx232_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Tx232TaskId);

        }

        pal_lld_togglepad(PORT_F,STATUS_LED);

        Nvram_test();

        ReadSPINVRAMRTC(&SPID2);

        DetectSPINOR(&SPID8,1);

        P7OK=0;

        if(P7TX && P7RX)

        {

            if(P7TX>P7RX)

            {

                if((P7TX-P7RX)<3)

                    P7OK=1;

            }

            else

            {

                if((P7RX-P7TX)<3)

                    P7OK=1;

            }

        }

        P8OK=0;

        if(P8TX && P8RX)

        {

            if(P8TX>P8RX)

            {

                if((P8TX-P8RX)<3)

                    P8OK=1;

            }

            else

            {

                if((P8RX-P8TX)<3)

                    P8OK=1;

            }

        }

        P9OK=0;

        if(P9TX && P9RX)

        {

            if(P9TX>P9RX)

            {

                if((P9TX-P9RX)<3)

                    P9OK=1;

            }

            else

            {

                if((P9RX-P9TX)<3)

                    P9OK=1;

            }

        }

        P1OK=0;

        if(P1TX && P1RX)

        {

            if(P1TX>P1RX)

            {

                if((P1TX-P1RX)<3)

                    P1OK=1;

            }

            else

            {

                if((P1RX-P1TX)<3)

                    P1OK=1;

            }

        }

        P2OK=0;

        if(P2TX && P2RX)

        {

            if(P2TX>P2RX)

            {

                if((P2TX-P2RX)<3)

                    P2OK=1;

            }

            else

            {

                if((P2RX-P2TX)<3)

                    P2OK=1;

            }

        }

        P3OK=0;

        if(P3TX && P3RX)

        {

            if(P3TX>P3RX)

            {

                if((P3TX-P3RX)<3)

                    P3OK=1;

            }

            else

            {

                if((P3RX-P3TX)<3)

                    P3OK=1;

            }

        }

        P4OK=0;

        if(P4TX && P4RX)

        {

            if(P4TX>P4RX)

            {

                if((P4TX-P4RX)<3)

                    P4OK=1;

            }

            else

            {

                if((P4RX-P4TX)<3)

                    P4OK=1;

            }

        }

        P5OK=0;

        if(P5TX && P5RX)

        {

            if(P5TX>P5RX)

            {

                if((P5TX-P5RX)<3)

                    P5OK=1;

            }

            else

            {

                if((P5RX-P5TX)<3)

                    P5OK=1;

            }

        }

        P6OK=0;

        if(P6TX && P6RX)

        {

            if(P6TX>P6RX)

            {

                if((P6TX-P6RX)<3)

                    P6OK=1;

            }

            else

            {

                if((P6RX-P6TX)<3)

                    P6OK=1;

            }

        }

        memset(&Tdata[0],0,600);

        sprintf((char *)&Tdata[0],"NOR %s\nNVRAM %s\nPORT1 %s P1TX:%2d P1RX:%2d\nPORT2 %s P2TX:%2d P2RX:%2d\nPORT3 %s P3TX:%2d P3RX:%2d\nPORT4 %s P4TX:%2d P4RX:%2d\nPORT5 %s P5TX:%2d P5RX:%2d\nPORT6 %s P6TX:%2d P6RX:%2d\nPORT7 %s P7TX:%2d P7RX:%2d\nPORT8 %s P8TX:%2d P8RX:%2d\nPORT9 %s P9TX:%2d P9RX:%2d\nDATE:%2d/%2d/%4d\nTIME:%2d:%2d:%2d\nCharger %s\n\n\n",NOROK==1?"OK":"NOT OK",nvramok==1?"OK":"NOT OK",P1OK==1?"OK":"NOT OK",P1TX,P1RX,P2OK==1?"OK":"NOT OK",P2TX,P2RX,P3OK==1?"OK":"NOT OK",P3TX,P3RX,P4OK==1?"OK":"NOT OK",P4TX,P4RX,P5OK==1?"OK":"NOT OK",P5TX,P5RX,P6OK==1?"OK":"NOT OK",P6TX,P6RX,P7OK==1?"OK":"NOT OK",P7TX,P7RX,P8OK==1?"OK":"NOT OK",P8TX,P8RX,P9OK==1?"OK":"NOT OK",P9TX,P9RX,(date.DAY),(date.MONTH),(date.YEAR),(date.HOUR),(date.MINUTE),(date.SECOND),ChargICPresent==0?"is Not Present":"is Present");

        sd_lld_write(&SD1,&Tdata[0],(uint16_t)strlen(Tdata));

        //              sdWrite(&SD10,Tdata,strlen(Tdata));

        //              while(SD10.oqueue.q_counter !=16)

        //              chThdSleep(MS2ST(1));

        //              while(SD10.linflexp->UARTCR.B.TXEN)

        //              chThdSleep(MS2ST(1));

        //                  sdWrite(&SD1,Tdata,strlen(Tdata));

        //                  while(SD1.oqueue.q_counter !=16)

        //                  chThdSleep(MS2ST(1));

        //                  while(SD1.linflexp->UARTCR.B.TXEN)

        //                  chThdSleep(MS2ST(1));

        P1TX=P1RX=P2TX=P2RX=P3TX=P3RX=P4TX=P4RX=P5TX=P5RX=P6TX=P6RX=P7TX=P7RX=P8TX=P8RX=P9TX=P9RX=P10TX=P10RX=NOROK=nvramok=ChargICPresent=0;

        //CurrentTick=xTaskGetTickCount();

        osalThreadDelayMilliseconds(5000);

    }

}

portTASK_FUNCTION(I2CTask , pvParameters )

{

    ( void ) pvParameters;

    uint8_t ret;

    for ( ; ; )

    {

        ret = i2c_lld_read(&I2CD1,0xd6,0x48,(uint8_t*)&manufactureID,1);

         //if(i2c_lld_read(0xD6,0x48,(uint8_t*)&manufactureID,1) == I2C_NO_ERROR)

//      i2c_hw[I2CD1.ops->id].result

        //if(((I2C_HW_Driver)(I2CD1.ops->priv))->result == I2C_NO_ERROR)

//      if(ret == 0x1)

    {

            ChargICPresent = 1;

            if(i2c_lld_read(&I2CD1,0xd6,0x00,(uint8_t*)&I2CRxBuffBATCHG[0],0x48) == I2C_NO_ERROR)

            {

                bat_register.REG00_Minimal_System_Voltage = I2CRxBuffBATCHG[0];

                bat_register.REG01_Charge_Voltage_Limit = (I2CRxBuffBATCHG[1]<<8)|I2CRxBuffBATCHG[2];

                bat_register.REG03_Charge_Current_Limit = (I2CRxBuffBATCHG[3]<<8)|I2CRxBuffBATCHG[4];

                bat_register.REG05_Input_Voltage_Limit =  I2CRxBuffBATCHG[5];

                bat_register.REG06_Input_Current_Limit =  (I2CRxBuffBATCHG[6]<<8)|I2CRxBuffBATCHG[7];

                bat_register.REG08_Precharge_Control  = I2CRxBuffBATCHG[8];

                bat_register.REG09_Termination_Control  = I2CRxBuffBATCHG[9];

                bat_register.REG0A_Recharge_Control=  I2CRxBuffBATCHG[10];

                bat_register.REG0B_VOTG_regulation=  (I2CRxBuffBATCHG[11]<<8)|I2CRxBuffBATCHG[12];

                bat_register.REG0D_IOTG_regulation=  I2CRxBuffBATCHG[13];

                bat_register.REG0E_Timer_Control=  I2CRxBuffBATCHG[14];

                bat_register.REG0F_Charger_Control_0=  I2CRxBuffBATCHG[15];

                bat_register.REG10_Charger_Control_1=  I2CRxBuffBATCHG[16];

                bat_register.REG11_Charger_Control_2=  I2CRxBuffBATCHG[17];

                bat_register.REG12_Charger_Control_3=  I2CRxBuffBATCHG[18];

                bat_register.REG13_Charger_Control_4=  I2CRxBuffBATCHG[19];

                bat_register.REG14_Charger_Control_5=  I2CRxBuffBATCHG[20];

                bat_register.REG15_MPPT_Control=  I2CRxBuffBATCHG[21];

                bat_register.REG16_Temperature_Control=  I2CRxBuffBATCHG[22];

                bat_register.REG17_NTC_Control_0=  I2CRxBuffBATCHG[23];

                bat_register.REG18_NTC_Control_1=  I2CRxBuffBATCHG[24];

                bat_register.REG19_ICO_Current_Limit=  (I2CRxBuffBATCHG[25]<<8)|I2CRxBuffBATCHG[26];

                bat_register.REG1B_Charger_Status_0=  I2CRxBuffBATCHG[27];

                bat_register.REG1C_Charger_Status_1=  I2CRxBuffBATCHG[28];

                bat_register.REG1D_Charger_Status_2=  I2CRxBuffBATCHG[29];

                bat_register.REG1E_Charger_Status_3=  I2CRxBuffBATCHG[30];

                bat_register.REG1F_Charger_Status_4=  I2CRxBuffBATCHG[31];

                bat_register.REG20_FAULT_Status_0=  I2CRxBuffBATCHG[32];

                bat_register.REG21_FAULT_Status_1=  I2CRxBuffBATCHG[33];

                bat_register.REG22_Charger_Flag_0=  I2CRxBuffBATCHG[34];

                bat_register.REG23_Charger_Flag_1=  I2CRxBuffBATCHG[35];

                bat_register.REG24_Charger_Flag_2=  I2CRxBuffBATCHG[36];

                bat_register.REG25_Charger_Flag_3=  I2CRxBuffBATCHG[37];

                bat_register.REG26_FAULT_Flag_0=  I2CRxBuffBATCHG[38];

                bat_register.REG27_FAULT_Flag_1=  I2CRxBuffBATCHG[39];

                bat_register.REG28_Charger_Mask_0=  I2CRxBuffBATCHG[40];

                bat_register.REG29_Charger_Mask_1=  I2CRxBuffBATCHG[41];

                bat_register.REG2A_Charger_Mask_2=  I2CRxBuffBATCHG[42];

                bat_register.REG2B_Charger_Mask_3=  I2CRxBuffBATCHG[43];

                bat_register.REG2C_FAULT_Mask_0=  I2CRxBuffBATCHG[44];

                bat_register.REG2D_FAULT_Mask_1=  I2CRxBuffBATCHG[45];

                bat_register.REG2E_ADC_Control=  I2CRxBuffBATCHG[46];

                bat_register.REG2F_ADC_Function_Disable_0=  I2CRxBuffBATCHG[47];

                bat_register.REG30_ADC_Function_Disable_1=  I2CRxBuffBATCHG[48];

                bat_register.REG31_IBUS_ADC=  (I2CRxBuffBATCHG[49]<<8)|I2CRxBuffBATCHG[50];

                bat_register.REG33_IBAT_ADC=  (I2CRxBuffBATCHG[51]<<8)|I2CRxBuffBATCHG[52];

                bat_register.REG35_VBUS_ADC=  (I2CRxBuffBATCHG[53]<<8)|I2CRxBuffBATCHG[54];

                bat_register.REG37_VAC1_ADC=  (I2CRxBuffBATCHG[55]<<8)|I2CRxBuffBATCHG[56];

                bat_register.REG39_VAC2_ADC=  (I2CRxBuffBATCHG[57]<<8)|I2CRxBuffBATCHG[58];

                bat_register.REG3B_VBAT_ADC=  (I2CRxBuffBATCHG[59]<<8)|I2CRxBuffBATCHG[60];

                bat_register.REG3D_VSYS_ADC=  (I2CRxBuffBATCHG[61]<<8)|I2CRxBuffBATCHG[62];

                bat_register.REG3F_TS_ADC=  (I2CRxBuffBATCHG[63]<<8)|I2CRxBuffBATCHG[64];

                bat_register.REG41_TDIE_ADC=  (I2CRxBuffBATCHG[65]<<8)|I2CRxBuffBATCHG[66];

                bat_register.REG43_DP_ADC=  (I2CRxBuffBATCHG[67]<<8)|I2CRxBuffBATCHG[68];

                bat_register.REG45_DM_ADC=  (I2CRxBuffBATCHG[69]<<8)|I2CRxBuffBATCHG[70];

                bat_register.REG47_DPDM_Driver=  (I2CRxBuffBATCHG[71]<<8);

            }

            else

            {

                ChargICPresent = 0;

            }

        }

//      else

//      {

//          ChargICPresent = 0;

//      }

        osalThreadDelayMilliseconds(500);

        //chThdSleep(MS2ST(500));

    }

}

void InitPort(void)

{

    sd_lld_start(&SD1,NULL);

    sd_lld_start(&SD2,NULL);

    sd_lld_start(&SD3,NULL);

    sd_lld_start(&SD4,NULL);

    sd_lld_start(&SD5,NULL);

    sd_lld_start(&SD6,NULL);

    sd_lld_start(&SD7,NULL);

    sd_lld_start(&SD8,NULL);

    sd_lld_start(&SD9,NULL);

    sd_lld_start(&SD10,NULL);

    spi_lld_start(&SPID2,&spi_config_nvram);

    spi_lld_start(&SPID8,&spi_config_nor);

    i2c_lld_init();

    //i2c_lld_start(24);

    i2c_lld_start(&I2CD1,&i2c_hw_config_I2C);

}

IRQ_HANDLER(vector245) {

  IRQ_PROLOGUE();

  fnet_cpu_isr();

  //spc5xx_serve_rxi_interrupt(&SD1);

  IRQ_EPILOGUE();

}

IRQ_HANDLER(vector131) {

  IRQ_PROLOGUE();

  fnet_cpu_isr();

  //spc5xx_serve_rxi_interrupt(&SD1);

  IRQ_EPILOGUE();

}

void eth_int(void)

{

//  static fnet_uint8_t         stack_heap[30720];

//      struct fnet_init_params     init_params;

//      fnet_uint8_t                macAdd[6];

//      fnet_netif_desc_t           ethInter;

//      fnet_ip4_addr_t             ip,netmask;

        fnet_cpu_irq_enable(0);

            init_params.netheap_ptr = stack_heap;

            init_params.netheap_size = sizeof(stack_heap);

            if (fnet_init(&init_params) != FNET_ERR)

            {

                macAdd[0]=0x10;

                macAdd[1]=0x20;

                macAdd[2]=0x30;

                macAdd[3]=0x40;

                macAdd[4]=0x50;

                macAdd[5]=0x60;

                if(fnet_netif_init(FNET_CPU_ETH0_IF, macAdd, 6) != FNET_ERR)

                {

                    fnet_printf("TCP/IP stack initialization is done.\n");

                    ethInter= fnet_netif_get_by_name("eth0");

                    if(ethInter != FNET_NULL)

                    {

                        ip=FNET_IP4_ADDR_INIT(192,168,0,9);

                        netmask=FNET_IP4_ADDR_INIT(255,255,255,0);

                        fnet_netif_set_ip4_addr(ethInter, ip, netmask);

                    networkup=1;

                // xTaskCreate(tcp_task, "TCP_HANDLER_Task", 700, NULL, tskIDLE_PRIORITY, NULL);

                    }

                }

                else

                    {

                        fnet_printf("Error:TCP/IP stack initialization is failed.\n");

                        networkup=0;

                    }

            }

}

/* Demo tasks */

//portTASK_FUNCTION( vTaskOne, pvParameters )

//{

//  ( void ) pvParameters;

//  TickType_t xLastWakeTime = xTaskGetTickCount();

//  for ( ;; ) {

//    sd_lld_write(&SD9,message_task1,(uint16_t)(sizeof(message_task1)/sizeof(message_task1[0])));

//    taskENTER_CRITICAL();

//    pal_lld_togglepad(PORT_E, STATUS_LED);

//    taskEXIT_CRITICAL();

//    vTaskDelayUntil( &xLastWakeTime, 200 );

//  }

//}

//

///* Demo tasks */

//portTASK_FUNCTION( vTaskTwo, pvParameters )

//{

//  ( void ) pvParameters;

//  TickType_t xLastWakeTime = xTaskGetTickCount();

//  for ( ;; ) {

//    sd_lld_write(&SD9,message_task2,(uint16_t)(sizeof(message_task2)/sizeof(message_task2[0])));

//    vTaskDelayUntil( &xLastWakeTime, 200 );

//    taskENTER_CRITICAL();

//    pal_lld_togglepad(PORT_E, STATUS_LED);

//    taskEXIT_CRITICAL();

//  }

//}

/*

 * Application entry point.

 */

int main(void) {

    /* Initialization of all the imported components in the order specified in

     the application wizard. The function is generated automatically.*/

    componentsInit();

    /* Enable Interrupts */

    irqIsrEnable();

    InitPort();

    pal_lld_clearpad(PORT_I,E_RESET);

    while(--delay>100);

    pal_lld_setpad(PORT_I,E_RESET);

    SPCSetPeripheralClockMode(92, SPC5_ME_PCTL_RUN(1) | SPC5_ME_PCTL_LP(2));

//  eth_int();

    pal_lld_setpad(PORT_H,NOR_CS2);

    xTaskCreate(Port1Task, (const char * const) "PORT1_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Port1TaskId);

    xTaskCreate(Port2Task, (const char * const) "PORT2_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Port2TaskId);

    xTaskCreate(Port3Task,  (const char * const)"PORT3_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Port3TaskId);

    xTaskCreate(Port4Task, (const char * const) "PORT4_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY,&Port4TaskId);

    xTaskCreate(Port5Task,  (const char * const)"PORT5_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Port5TaskId);

    xTaskCreate(Port6Task,  (const char * const)"PORT6_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Port6TaskId);

    xTaskCreate(Port7Task, (const char * const) "PORT7_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Port7TaskId);

    xTaskCreate(Port8Task,  (const char * const)"PORT8_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Port8TaskId);

    xTaskCreate(Port9Task,  (const char * const)"PORT9_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Port9TaskId);

    xTaskCreate(Port10Task,  (const char * const)"PORT10_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Port10TaskId);

    xTaskCreate(Tx232Task,  (const char * const)"Tx232Task_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &Tx232TaskId);

    xTaskCreate(I2CTask, (const char * const) "I2CTask_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY,&I2CTaskId);

    xTaskCreate(checkTask, (const char * const) "checkTask_HANDLER_Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, &checkTaskId);

    //  sd_lld_start(&SD9, NULL);

    //

    //  /* Creating first task to blink LED0 */

    //  xTaskCreate( vTaskOne,

    //               (const char * const)"task #1",

    //               configMINIMAL_STACK_SIZE,

    //               NULL,

    //               tskIDLE_PRIORITY + 1,

    //               NULL );

    //

    //  /* Creating second task to blink LED1 */

    //  xTaskCreate( vTaskTwo,

    //               (const char * const)"task #2",

    //               configMINIMAL_STACK_SIZE,

    //               NULL,

    //               tskIDLE_PRIORITY + 1,

    //               NULL );

    /* Start the FreeRTOS scheduler */

    vTaskStartScheduler();

    for(;;){

        return 0;

    }

}
        return 0;

    }

}

This is a pretty lengthy code and it will be hard to pin point the issue. I’d suggest to create very simple tasks which just increment a variable and see if those are running successfully. Then you can add features one by one and figure out which one causes the problem.