This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F280025: HW CRC programming or code

Part Number: TMS320F280025
Other Parts Discussed in Thread: C2000WARE, SFRA

Hi

I would like to know what to use HW CRC to checking the content of flash is crashed or not? The checking is executed periodically during runtime. I don't know how to store a CRC golden value to a part of flash which is reserved not for application.

I have reviewed example of code and link cmd file under "C:\ti\c2000\C2000Ware_3_04_00_00\libraries\dsp\VCU\c28\examples\crc\2838x_vcrc_crc_32". Unfortunately, I still don't know how to code the application and modify the content of the link file.

For your information, the feature need to demonstrate to safety agency and hence it is necessary to have to simulate content of flash is crashed.

BR

HK Woo

  • HK Woo,

    As discussed in the call, I assigned this to our CRC expert that can guide you further.  Please expect a reply in a day or two.

    Thanks and regards,
    Vamsi

  • Hi HK Woo,

    The vcrc example you mentioned already has the comparison of linker generated CRC and the VCRC computed CRC. The example showcases it for a single section. But you can expand the same for entire flash as well

    In cmd, if you need CRC for the entire flash, you can group them together as follows:

    GROUP { /* GROUP memory ranges for crc/checksum of entire flash */

    /* BEGIN is used for the "boot to Flash" bootloader mode */
    BEGIN : origin = 0x080000, length = 0x000002

    /* Flash sectors */
    FLASH0 : origin = 0x080002, length = 0x001FFE /* on-chip Flash */
    FLASH1 : origin = 0x082000, length = 0x002000 /* on-chip Flash */
    ..

    } crc(_ccs_flash_checksum, algorithm=CRC32_PRIME)

    The CRC table is available in the section .TI.memcrc instead of .TI.crctab(which is used if crc in sections)

    You can refer to the TMS320C28x Assembly Language Tools User Guide for more details.

    Regards,

    Veena

  • I reviewed the project 2838_vcrc_crc_32 again. I still don't understand a mechanism using by the project at the moment

    1. Per my understand on CRC checking. It is necessary to do CRC calculation block by block until calculation of CRC over entire flash which need to checked is completed and then compare the golden value of CRC.

    However, it is not in the project. It compares the value inside the for loop and increase the values of pass / fail number

        pLinkerCrcTable  = &linkerCrcTable;

        // Step 2: Get the CRC results from the linker CRC table
        for(i = 0; i < pLinkerCrcTable->num_recs; i++){
            // Get the current CRC record
            linkerCrcRecord = pLinkerCrcTable->recs[i];
            // Get the linker generated CRC
            crcResultLnk    = linkerCrcRecord.crc_value;
            if(linkerCrcRecord.crc_alg_ID == CRC32_PRIME){ //0x04C11DB7
                (crcResultLnk == crcResultVcu_1)? pass++ : fail++;
                (crcResultVcu_1 == crcResultC_1)? pass++ : fail++;
            }else if(linkerCrcRecord.crc_alg_ID == CRC32_C){ //0x1EDC6F41
                (crcResultLnk == crcResultVcu_2)? pass++ : fail++;
                (crcResultVcu_2 == crcResultC_2)? pass++ : fail++;
            }else{
                fail++;
            }
        }

    Futhermore, the project define constant

    static const uint16_t testInput[NWORDS] = {
        0x4001, 0x8002, 0xC003, 0x0004, 0x4005, 0x8006, 0xC007, 0x0008,
        0x4009, 0x800A, 0xC00B, 0x000C, 0x400D, 0x800E, 0xC00F, 0x0010,
        0x4011, 0x8012, 0xC013, 0x0014, 0x4015, 0x8016, 0xC017, 0x0018,
        0x4019, 0x801A, 0xC01B, 0x001C, 0x401D, 0x801E, 0xC01F, 0x0020,
        0x4021, 0x8022, 0xC023, 0x0024, 0x4025, 0x8026, 0xC027, 0x0028,
        0x4029, 0x802A, 0xC02B, 0x002C, 0x402D, 0x802E, 0xC02F, 0x0030,
        0x4031, 0x8032, 0xC033, 0x0034, 0x4035, 0x8036, 0xC037, 0x0038,
        0x4039, 0x803A, 0xC03B, 0x003C, 0x403D, 0x803E, 0xC03F, 0x0040,
    };

    I think that it is content stored in flash and it calculate the CRC of testInput

    Please correct me if I am wrong or mechanism using in the project is different from it.

    2. Which part of code read the linker generated CRC value for the constant "testInput"?

    BR

    HK Woo

  • Hi HK Woo,

    I have updated a basic led blinky example to include CRC check using VCRC. This is tested on F2838x, but you can use this as a reference for F28002x. The VCRC IP on these devices are the same.

    //#############################################################################
    //
    // FILE:   led_ex1_blinky.c
    //
    // TITLE:  LED Blinky Example
    //
    //! \addtogroup driver_example_list
    //! <h1> LED Blinky Example </h1>
    //!
    //! This example demonstrates how to blink a LED.
    //!
    //! \b External \b Connections \n
    //!  - None.
    //!
    //! \b Watch \b Variables \n
    //!  - None.
    //!
    //
    //#############################################################################
    //
    //
    // $Copyright: $
    //#############################################################################
    
    //
    // Included Files
    //
    #include "crc_tbl.h"
    #include "vcu2_crc.h"
    
    #include "driverlib.h"
    #include "device.h"
    
    // CRC Table generated from linker command file
    extern MEMRANGE_CRC_TABLE _ccs_flash_checksum;
    
    bool vcrc_check(void);
    //
    // Main
    //
    void main(void)
    {
        //
        // Initialize device clock and peripherals
        //
        Device_init();
    
        if(vcrc_check() == false)
        {
            ESTOP0;
        }
        //
        // Initialize GPIO and configure the GPIO pin as a push-pull output
        //
        Device_initGPIO();
        GPIO_setPadConfig(DEVICE_GPIO_PIN_LED1, GPIO_PIN_TYPE_STD);
        GPIO_setDirectionMode(DEVICE_GPIO_PIN_LED1, GPIO_DIR_MODE_OUT);
    
        //
        // Initialize PIE and clear PIE registers. Disables CPU interrupts.
        //
        Interrupt_initModule();
    
        //
        // Initialize the PIE vector table with pointers to the shell Interrupt
        // Service Routines (ISR).
        //
        Interrupt_initVectorTable();
    
        //
        // Enable Global Interrupt (INTM) and realtime interrupt (DBGM)
        //
        EINT;
        ERTM;
    
        //
        // Loop Forever
        //
        for(;;)
        {
            //
            // Turn on LED
            //
            GPIO_writePin(DEVICE_GPIO_PIN_LED1, 0);
    
            //
            // Delay for a bit.
            //
            DEVICE_DELAY_US(500000);
    
            //
            // Turn off LED
            //
            GPIO_writePin(DEVICE_GPIO_PIN_LED1, 1);
    
            //
            // Delay for a bit.
            //
            DEVICE_DELAY_US(500000);
        }
    }
    
    bool vcrc_check()
    {
        int                 i;
        CRC_Obj             CRC;
        CRC_Handle          handleCRC;
        MEMRANGE_CRC_RECORD linkerCrcRecord;
        MEMRANGE_CRC_TABLE  *pLinkerCrcTable;
    
        // Pointer to the linker generated CRC table
        pLinkerCrcTable = &_ccs_flash_checksum;
    
        // Initialize the CRC object
        CRC.seedValue    = 0;
        CRC.parity       = CRC_parity_even;
        CRC.crcResult    = 0;
    
        // Initialize the handle
        handleCRC = &CRC;
    
        // Choose the run function based on Algorithm used
        switch(pLinkerCrcTable->crc_alg_ID)
        {
            case CRC32_PRIME :
                /* Poly = 0x04c11db7 */
                CRC.init = (void (*)(void *))CRC_init32Bit;
                CRC.run  = (void (*)(void *))CRC_run32BitPoly1;
                break;
    
            case CRC32_C:
                /* Poly = 0x1edc6f41 */
                CRC.init = (void (*)(void *))CRC_init32Bit;
                CRC.run  = (void (*)(void *))CRC_run32BitPoly2;
                break;
    
            case CRC24_FLEXRAY :
                /* Poly = 0x005d6dcb */
                CRC.init = (void (*)(void *))CRC_init24Bit;
                CRC.run  = (void (*)(void *))CRC_run24Bit;
                break;
    
            case CRC16_ALT :
                /* Poly = 0x00008005 */
                CRC.init = (void (*)(void *))CRC_init16Bit;
                CRC.run  = (void (*)(void *))CRC_run16BitPoly1;
                break;
    
            case CRC16_802_15_4 :
                /* Poly = 0x00001021 */
                CRC.init = (void (*)(void *))CRC_init16Bit;
                CRC.run = (void (*)(void *))CRC_run16BitPoly2;
                break;
    
            case CRC8_PRIME :
                /* Poly = 0x00000007 */
                CRC.init = (void (*)(void *))CRC_init8Bit;
                CRC.run = (void (*)(void *))CRC_run8Bit;
                break;
        }
    
        CRC.init(handleCRC);
    
        // Get the CRC results from the linker CRC table
        for(i = 0; i < pLinkerCrcTable->num_recs; i++)
        {
            // Get the current CRC record
            linkerCrcRecord = pLinkerCrcTable->recs[i];
    
            // Compute CRC for the current memory range
            CRC.nMsgBytes  = linkerCrcRecord.size * 2;
            CRC.pMsgBuffer = (void *)linkerCrcRecord.addr;
            CRC.seedValue = CRC.crcResult;
            CRC.run(handleCRC);
        }
    
        if(CRC.crcResult == pLinkerCrcTable->crc_value)
            return(true);
        else
            return(false);
    }
    //
    // End of File
    //
    
    https://e2e.ti.com/cfs-file/__key/communityserver-discussions-components-files/171/4010.2838x_5F00_FLASH_5F00_lnk_5F00_cpu1.cmd

    Please try using this and let us know if you face any issues. I have added comments in the code which I believe would answer your questions.

    I have added supported for all the CRC algorithms supported by linker. You can make changes as necessary.

    Regards,

    Veena

  • Veena

    Thanks for your example, it is more clear to me. I will try it and let you know that result.

    BR

    HK Woo

  • Veena

    Got an error message during compiling the code. >> Compilation failure
    subdir_rules.mk:9: recipe for target 'led_ex1_blinky.obj' failed
    "../led_ex1_blinky.c", line 63: error #20: identifier "MEMRANGE_CRC_TABLE" is undefined
    1 error detected in the compilation of "../led_ex1_blinky.c".
    gmake: *** [led_ex1_blinky.obj] Error 1
    gmake: Target 'all' not remade because of errors.

    Have added a path "C:\ti\c2000\C2000Ware_3_03_00_00\libraries\dsp\VCU\c28\include\vcu2" in CCS project property

    CCS build -> C2000 compiler -> include options

    MEMORY
    {
    
       BOOT_RSVD		: origin = 0x00000002, length = 0x00000126
       RAMM0           	: origin = 0x00000128, length = 0x000002D8
       RAMM1            : origin = 0x00000400, length = 0x000003F8     /* on-chip RAM block M1 */
    // RAMM1_RSVD       : origin = 0x000007F8, length = 0x00000008 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
    
    /* RAMLS4           : origin = 0x0000A000, length = 0x00000800
       RAMLS5           : origin = 0x0000A800, length = 0x00000800
       RAMLS6           : origin = 0x0000B000, length = 0x00000800
       RAMLS7           : origin = 0x0000B800, length = 0x00000800*/
    
       /* Combining all the LS RAMs */
       RAMLS4567        : origin = 0x0000A000, length = 0x00002000
       RAMGS0           : origin = 0x0000C000, length = 0x000007F8
    // RAMGS0_RSVD      : origin = 0x0000C7F8, length = 0x00000008 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
    
    
    //  FLASHBANK1       : origin = 0x00080000, length = 0x0000FFF0
    //  FLASH_BANK1_RSVD : origin = 0x0008FFF0, length = 0x00000010 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
       BOOTROM          : origin = 0x003F0000, length = 0x00008000
       BOOTROM_EXT      : origin = 0x003F8000, length = 0x00007FC0
       RESET            : origin = 0x003FFFC0, length = 0x00000002
       /* Flash sectors */
       /* BANK 0 */
       GROUP
       {
    	   BEGIN           	: origin = 0x080000, length = 0x000002
    	   FLASH_BANK0_SEC0  : origin = 0x080002, length = 0x000FFE	/* on-chip Flash */
    	   FLASH_BANK0_SEC1  : origin = 0x081000, length = 0x001000	/* on-chip Flash */
    	   FLASH_BANK0_SEC2  : origin = 0x082000, length = 0x001000	/* on-chip Flash */
    	   FLASH_BANK0_SEC3  : origin = 0x083000, length = 0x001000	/* on-chip Flash */
    	   FLASH_BANK0_SEC4  : origin = 0x084000, length = 0x001000	/* on-chip Flash */
    	   FLASH_BANK0_SEC5  : origin = 0x085000, length = 0x001000	/* on-chip Flash */
    	   FLASH_BANK0_SEC6  : origin = 0x086000, length = 0x001000	/* on-chip Flash */
    	   FLASH_BANK0_SEC7  : origin = 0x087000, length = 0x001000	/* on-chip Flash */
    	   FLASH_BANK0_SEC8  : origin = 0x088000, length = 0x001000	/* on-chip Flash */
    	   FLASH_BANK0_SEC9  : origin = 0x089000, length = 0x001000	/* on-chip Flash */
    	   FLASH_BANK0_SEC10 : origin = 0x08A000, length = 0x001000	/* on-chip Flash */
    	   FLASH_BANK0_SEC11 : origin = 0x08B000, length = 0x001000	/* on-chip Flash */
    	   FLASH_BANK0_SEC12 : origin = 0x08C000, length = 0x001000	/* on-chip Flash */
    	   FLASH_BANK0_SEC13 : origin = 0x08D000, length = 0x001000	/* on-chip Flash */
    	   FLASH_BANK0_SEC14 : origin = 0x08E000, length = 0x001000	/* on-chip Flash */
    	   //FLASH_BANK0_SEC15 : origin = 0x08F000, length = 0x000FF0	/* on-chip Flash */
    	   FLASH_BANK0_SEC15 : origin = 0x08F000, length = 0x000F98	/* on-chip Flash */
    	}crc(_ccs_flash_checksum, algorithm=CRC32_PRIME)
    	FLASH_BANK0_SEC15_CRC: origin = 0x08FF98, length = 0x60
    // FLASH_BANK0_SEC15_RSVD     : origin = 0x08FFF0, length = 0x000010  /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
    
    }
    
    
    SECTIONS
    {
       codestart        : > BEGIN, ALIGN(8)
       .text            : >> FLASH_BANK0_SEC2 | FLASH_BANK0_SEC3 | FLASH_BANK0_SEC4,   ALIGN(8)
       .cinit           : > FLASH_BANK0_SEC1,  ALIGN(8)
       .switch          : > FLASH_BANK0_SEC1,  ALIGN(8)
       .reset           : > RESET,                  TYPE = DSECT /* not used, */
    
       .stack           : > RAMM1
    
       .init_array      : > FLASH_BANK0_SEC1,  ALIGN(8)
       .bss             : > RAMLS4567
       .bss:output      : > RAMLS4567
       .bss:cio         : > RAMGS0
       .const           : > FLASH_BANK0_SEC1,  ALIGN(8)
       .data            : > RAMLS4567
       .sysmem          : > RAMLS4567
    
        ramgs0 : > RAMGS0
    
        /*  Allocate IQ math areas: */
       IQmath           : > RAMLS4567
       IQmathTables     : > RAMLS4567
    
      .TI.ramfunc      : LOAD = FLASH_BANK0_SEC1,
                      RUN = RAMGS0,
                      LOAD_START(RamfuncsLoadStart),
                      LOAD_SIZE(RamfuncsLoadSize),
                      LOAD_END(RamfuncsLoadEnd),
                      RUN_START(RamfuncsRunStart),
                      RUN_SIZE(RamfuncsRunSize),
                      RUN_END(RamfuncsRunEnd),
                      ALIGN(8)
      .TI.memcrc : >FLASH_BANK0_SEC15_CRC
    }
    /*
    //===========================================================================
    // End of file.
    //===========================================================================
    */
    

    I added below to my codes to the project

    typedef struct memrange_crc_record {
        uintptr_t           addr;        /* Starting address */
    #if defined(__LARGE_CODE_MODEL__) || defined(__LARGE_DATA_MODEL__)
        uint32_t            size;        /* size of data in 8-bit addressable units */
    #else
        uint16_t            size;        /* size of data in 8-bit addressable units */
    #endif
    } MEMRANGE_CRC_RECORD;
    typedef struct memrange_crc_table {
        uint16_t            rec_size;    /* 8-bit addressable units */
        uint16_t            num_recs;    /* how many records are in the table */
        uint16_t            crc_alg_ID;  /* CRC algorithm ID */
        uint32_t            crc_value;   /* result of crc */
        MEMRANGE_CRC_RECORD recs[1];
    } MEMRANGE_CRC_TABLE;

    and change "extern MEMRANGE_CRC_TABLE _ccs_flash_checksum;" to "MEMRANGE_CRC_TABLE _ccs_flash_checksum;" and
    the a new error as below

    "../28002x_generic_flash_lnk.cmd", line 28: error #10024-D: expecting memory range specifier instead of "{"
    "../28002x_generic_flash_lnk.cmd", line 27: error #10079-D: origin not specified for memory range GROUP
    "../28002x_generic_flash_lnk.cmd", line 27: error #10080-D: length not specified for memory range GROUP
    "../28002x_generic_flash_lnk.cmd", line 47: error #10008-D: cannot find file "crc"
    "../28002x_generic_flash_lnk.cmd", line 47: error #10021-D: expecting filename, option, MEMORY, or SECTIONS instead of "("
    "../28002x_generic_flash_lnk.cmd", line 47: error #10043-D: expecting "";"" instead of ")"
    "../28002x_generic_flash_lnk.cmd", line 51: error #10043-D: expecting "";"" instead of "}"
    "../28002x_generic_flash_lnk.cmd", line 87: warning #10097: memory range not found: FLASH_BANK0_SEC15_CRC on page 0
    "../28002x_generic_flash_lnk.cmd", line 87: error #10099-D: program will not fit into available memory, or the section contains a call site that requires a trampoline that can't be generated for this section. run placement with alignment/blocking fails for section ".TI.memcrc" size 0page 0
    "../28002x_generic_flash_lnk.cmd", line 47: error #10104: undefined symbol "CRC32_PRIME" used in expression
    error #10010: errors encountered during linking; "led_ex1_blinky.out" not built

    Please advise a solution

    Thanks

  • Hi,

    Which version of CCS compiler are you using? MEMRANGE_CRC_TABLE is defined in the compiler header. 

    The feature "Generate CRCs over memory ranges" was added in CCS compiler 21.6.

    Prior to that linker only supports CRC computation on a specific section.

    Is your requirement to compute CRC for entire flash or only for specific sections?

    Regards,

    Veena

  • Also note that I have excluded few bytes of Flash memory from CRC calculation.

    	GROUP {      /* GROUP memory ranges for crc/checksum of entire flash */
    
    	   /* BEGIN is used for the "boot to Flash" bootloader mode   */
    	   BEGIN            : origin = 0x080000, length = 0x000002
    
    	   /* Flash sectors */
    	   FLASH0           : origin = 0x080002, length = 0x001FFE  /* on-chip Flash */
    	   FLASH1           : origin = 0x082000, length = 0x002000  /* on-chip Flash */
    	   FLASH2           : origin = 0x084000, length = 0x002000  /* on-chip Flash */
    	   FLASH3           : origin = 0x086000, length = 0x002000  /* on-chip Flash */
    	   FLASH4           : origin = 0x088000, length = 0x008000  /* on-chip Flash */
    	   FLASH5           : origin = 0x090000, length = 0x008000  /* on-chip Flash */
    	   FLASH6           : origin = 0x098000, length = 0x008000  /* on-chip Flash */
    	   FLASH7           : origin = 0x0A0000, length = 0x008000  /* on-chip Flash */
    	   FLASH8           : origin = 0x0A8000, length = 0x008000  /* on-chip Flash */
    	   FLASH9           : origin = 0x0B0000, length = 0x008000  /* on-chip Flash */
    	   FLASH10          : origin = 0x0B8000, length = 0x002000  /* on-chip Flash */
    	   FLASH11          : origin = 0x0BA000, length = 0x002000  /* on-chip Flash */
    	   FLASH12          : origin = 0x0BC000, length = 0x002000  /* on-chip Flash */
    	   FLASH13          : origin = 0x0BE000, length = 0x001F90  /* on-chip Flash */
    
    	}  crc(_ccs_flash_checksum, algorithm=CRC32_PRIME)
    
    
       // Flash region for storing the CRC table
       FLASH13_CRC          : origin = 0x0BFF90, length = 0x60  /* on-chip Flash for storing CRC table */

    I have used this small section storing CRC table generated by linker

    .TI.memcrc : >FLASH13_CRC

    Regards,

    Veena

  • Please find screen capture for your information

    I need to specific section. I have modified a link cmd as below.

      MEMORY SECTION

       GROUP
       {
           BEGIN               : origin = 0x080000, length = 0x000002
           FLASH_BANK0_SEC0  : origin = 0x080002, length = 0x000FFE    /* on-chip Flash */
           FLASH_BANK0_SEC1  : origin = 0x081000, length = 0x001000    /* on-chip Flash */
           FLASH_BANK0_SEC2  : origin = 0x082000, length = 0x001000    /* on-chip Flash */
           FLASH_BANK0_SEC3  : origin = 0x083000, length = 0x001000    /* on-chip Flash */
           FLASH_BANK0_SEC4  : origin = 0x084000, length = 0x001000    /* on-chip Flash */
           FLASH_BANK0_SEC5  : origin = 0x085000, length = 0x001000    /* on-chip Flash */
           FLASH_BANK0_SEC6  : origin = 0x086000, length = 0x001000    /* on-chip Flash */
           FLASH_BANK0_SEC7  : origin = 0x087000, length = 0x001000    /* on-chip Flash */
           FLASH_BANK0_SEC8  : origin = 0x088000, length = 0x001000    /* on-chip Flash */
           FLASH_BANK0_SEC9  : origin = 0x089000, length = 0x001000    /* on-chip Flash */
           FLASH_BANK0_SEC10 : origin = 0x08A000, length = 0x001000    /* on-chip Flash */
           FLASH_BANK0_SEC11 : origin = 0x08B000, length = 0x001000    /* on-chip Flash */
           FLASH_BANK0_SEC12 : origin = 0x08C000, length = 0x001000    /* on-chip Flash */
           FLASH_BANK0_SEC13 : origin = 0x08D000, length = 0x001000    /* on-chip Flash */
           FLASH_BANK0_SEC14 : origin = 0x08E000, length = 0x001000    /* on-chip Flash */
           //FLASH_BANK0_SEC15 : origin = 0x08F000, length = 0x000FF0    /* on-chip Flash */
           FLASH_BANK0_SEC15 : origin = 0x08F000, length = 0x000F98    /* on-chip Flash */
        }crc(_ccs_flash_checksum, algorithm=CRC32_PRIME)
        FLASH_BANK0_SEC15_CRC: origin = 0x08FF98, length = 0x60

    Add .TI.memcrc : >FLASH_BANK0_SEC15_CRC in SECTIONS.

    It is same approach as your code

  • Hi,

    CCS compiler version 20.2 does not support the feature "Generate CRCs over memory ranges". This is available in v21.6.

    v20.2 supports CRC computation for sections.

    Is your requirement to compute CRC for the entire flash or for specific code sections?

    Regards,

    Veena

  • This is the release notes of CGT v21.6:

    software-dl.ti.com/.../README.html

  • Hi Veena

    I need to compute a specific range of flash but it is almost entire flash range.

    You can find that my link cmd file. I grouped 0x080000 to 0x08FF98 and reserved 0x08FF98 to 0x08FFF8 for crc_table.

    I need to check CRC from 0x080000 to 0x08FF98

    How to downlod V21.6? I use CCS to check any update, but it said no update find.

    BR

    HK Woo

  • CCS update should ideally show the new compilers.

    If you don't find it, you can directly install it from here : https://www.ti.com/tool/download/C2000-CGT-21

    Regards,

    Veena

  • Veena

    Please find below message during compiling with 21.6

    Invoking: C2000 Linker
    "C:/ti/ccs1011/ccs/tools/compiler/ti-cgt-c2000_21.6.0.LTS/bin/cl2000" -v28 -ml -mt --float_support=fpu32 --idiv_support=idiv0 --tmu_support=tmu0 -Ooff --define=DEBUG --define=_FLASH --diag_suppress=10063 --diag_warning=225 --diag_wrap=off --display_error_number --gen_func_subsections=on --abi=eabi -z -m"led_ex1_blinky.map" --heap_size=0x100 --stack_size=0x200 --warn_sections -i"C:/ti/ccs1011/ccs/tools/compiler/ti-cgt-c2000_21.6.0.LTS/lib" -i"C:/ti/ccs1011/ccs/tools/compiler/ti-cgt-c2000_21.6.0.LTS/include" -i"C:/ti/c2000/C2000Ware_3_03_00_00/libraries/dsp/VCU/c28/include/vcu2" --reread_libs --diag_wrap=off --display_error_number --xml_link_info="led_ex1_blinky_linkInfo.xml" --entry_point=code_start --rom_model -o "led_ex1_blinky.out" "./led_ex1_blinky.obj" "./device/device.obj" "./device/f28002x_codestartbranch.obj" "../28002x_generic_flash_lnk.cmd" "C:/ti/c2000/C2000Ware_3_03_00_00/driverlib/f28002x/driverlib/ccs/Debug/driverlib.lib"  -llibc.a
    <Linking>
     
     undefined         first referenced    
      symbol               in file         
     ---------         ----------------    
     CRC_init16Bit     ./led_ex1_blinky.obj
     CRC_init24Bit     ./led_ex1_blinky.obj
     CRC_init32Bit     ./led_ex1_blinky.obj
     CRC_init8Bit      ./led_ex1_blinky.obj
     CRC_run16BitPoly1 ./led_ex1_blinky.obj
     CRC_run16BitPoly2 ./led_ex1_blinky.obj
     CRC_run24Bit      ./led_ex1_blinky.obj
     CRC_run32BitPoly1 ./led_ex1_blinky.obj
     CRC_run32BitPoly2 ./led_ex1_blinky.obj
     CRC_run8Bit       ./led_ex1_blinky.obj
     
    error #10234-D: unresolved symbols remain
    error #10010: errors encountered during linking; "led_ex1_blinky.out" not built
     
    >> Compilation failure
    makefile:146: recipe for target 'led_ex1_blinky.out' failed
    gmake[1]: *** [led_ex1_blinky.out] Error 1
    makefile:142: recipe for target 'all' failed
    gmake: *** [all] Error 2

    **** Build Finished ****

  • Veena,

    I compared a project 2838x_vcrc_crc_32 and found that there is a file c28x_vcrc_library_fpu64.lib and then add it to

    Property -> CCS build -> C2000 linker -> File Search path with C:\ti\c2000\C2000Ware_3_03_00_00\libraries\dsp\VCU\c28\lib\c28x_vcrc_library_fpu64.lib.

    Errors are fixed. Please advise is it correct?

  • Yes, that is right. You need to include the VCRC library to use these functions.

    Regards,

    Veena

  • Veena

    Thanks for your confirmation. It seems that the function returned  flash CRC (CRC.crcResult) is section by section. I just want to confirmation it. Section by Section is OK to me. I just want to confirm it and hence prepare a document for  safety application about the function.

    BR

    HK Woo

  • Hi HK Woo,

    Let us use the word memory blocks to avoid confusing it with the compiler generated sections.

    In the example, I have grouped multiple memory blocks to compute CRC by linker. In the application, I am parsing through the linker generated CRC record, to identify different memory blocks, its start address and size. I did this to make it generic. If you know the start address and the total size, you can use that for VCRC calculation directly, without reading it from CRC Table.

    For example:

       GROUP
       {
           BEGIN               : origin = 0x080000, length = 0x000002
           FLASH_BANK0_SEC0  : origin = 0x080002, length = 0x000FFE    /* on-chip Flash */
           FLASH_BANK0_SEC1  : origin = 0x081000, length = 0x001000    /* on-chip Flash */
         } crc(...)

    You can compute CRC using a single VCRC run function call, with start address as  0x080000 and nMsgBytes (in bytes) s 0x4000. Note that the parameter nMsgBytes is uint16_t, so care should be taken not to give higher values.

    Regards,

    Veena

  • Hi Veena

    I got several of problems as I put the code to my real project.

    1. Link cmd file.

    a. I modified my link cmd file based on example link cmd. Error is generated during compile my code (without any modification on code, just link cmd file).

    >> Compilation failure
    makefile:173: recipe for target 'Mercury_Buck.out' failed
    "../device/28002x_generic_flash_lnk.cmd", line 88: warning #10068-D: no matching section
    error #10471-D: Ignoring empty output section "dclfuncs" in memory range FLASH_BANK0_SEC8_9_10; objects in CRC range must be non-empty.
    error #10010: errors encountered during linking; "Mercury_Buck.out" not built
    gmake[1]: *** [Mercury_Buck.out] Error 1
    makefile:169: recipe for target 'all' failed
    gmake: *** [all] Error 2

    b. I commented "dclfuncs". No error generated.

        GROUP
        {
            isrcodefuncs
            //dclfuncs
        }    LOAD = FLASH_BANK0_SEC8_9_10,
             RUN =  RAMLS4567,
             LOAD_START(isrcodefuncsLoadStart),
             LOAD_SIZE(isrcodefuncsLoadSize),
             LOAD_END(isrcodefuncsLoadEnd),
             RUN_START(isrcodefuncsRunStart),
             RUN_SIZE(isrcodefuncsRunSize),
             RUN_END(isrcodefuncsRunEnd),
             ALIGN(4)

    Please advise about it.

    2. Then I move forward to add VCRC code which works fine in example (dclfuncs is still comment)

    a. Find errors as below

    >> Compilation failure
    makefile:173: recipe for target 'Mercury_Buck.out' failed
    error #16041-D: File "C:\Users\hkwoo\AppData\Local\Temp\{2A74BDBB-700F-46F4-B2E2-EC013312BDE2}" passes/returns double types in memory while previous files pass them in {3}
    error #16041-D: File "./buck_main.obj" passes/returns double types in memory while previous files pass them in {3}
    error #16041-D: File "./buck_user.obj" passes/returns double types in memory while previous files pass them in {3}
    error #16041-D: File "./libraries/DCL/DCL_error.obj" passes/returns double types in memory while previous files pass them in {3}
    error #16041-D: File "./libraries/sfra/sfra_gui_scicomms_driverlib.obj" passes/returns double types in memory while previous files pass them in {3}
    error #16041-D: File "../fsk_corr_detect_lib_eabi.lib<fsk_corr_bitrate_run.obj>" passes/returns double types in memory while previous files pass them in {3}
    error #16041-D: File "../fsk_corr_detect_lib_eabi.lib<fsk_corr_init.obj>" passes/returns double types in memory while previous files pass them in {3}
    error #16041-D: File "../fsk_corr_detect_lib_eabi.lib<fsk_packetization.obj>" passes/returns double types in memory while previous files pass them in {3}
    "../device/28002x_generic_flash_lnk.cmd", line 88: warning #10068-D: no matching section
    error #10010: errors encountered during linking; "Mercury_Buck.out" not built
    gmake[1]: *** [Mercury_Buck.out] Error 1
    gmake: *** [all] Error 2
    makefile:169: recipe for target 'all' failed

    **** Build Finished ****

    As I comment below codes, errors are not found

    //    CRC.init(handleCRC);

        // Get the CRC results from the linker CRC table
    //    for(i = 0; i < pLinkerCrcTable->num_recs; i++)
    //    {
    //        // Get the current CRC record
    //        linkerCrcRecord = pLinkerCrcTable->recs[i];
    //
    //        // Compute CRC for the current memory range
    //        CRC.nMsgBytes  = linkerCrcRecord.size * 2;
    //        CRC.pMsgBuffer = (void *)linkerCrcRecord.addr;
    //        CRC.seedValue = CRC.crcResult;
    //        CRC.run(handleCRC);
    //    }

    Any comment?

    BR

    HK Woo

  • 1. I am guessing it could be because the application does not have a section named dclfuncs. Or its not being used, hence compiler creates an empty section named dclfuncs.

    2.This error is strange. For some reason, including VCRC library is causing some compatibility issues with others. Can you confirm that all the libraries and the application are built with EABI format? Also, can you send the console output for CCS build with CRC code and without CRC code

    Regards,

    Veena

  • Hi Veena

    1. Could we have webex meeting? We can fixed it on-line

    2. Please find console output without VCRC code as below


    **** Clean-only build of configuration RELEASE for project Mercury_Buck ****

    "C:\\ti\\ccs1011\\ccs\\utils\\bin\\gmake" -k -j 8 clean -O
     
    DEL /F  "Mercury_Buck.hex"  "Mercury_Buck.out"
    DEL /F "buck.lst" "buck_hal.lst" "buck_main.lst" "buck_user.lst" "device/device.lst" "device/f28002x_codestartbranch.lst" "libraries/DCL/DCL_error.lst" "libraries/sfra/sfra_gui_scicomms_driverlib.lst"
    DEL /F "buck.obj" "buck_hal.obj" "buck_main.obj" "buck_user.obj" "device\device.obj" "device\f28002x_codestartbranch.obj" "libraries\DCL\DCL_error.obj" "libraries\sfra\sfra_gui_scicomms_driverlib.obj"
    DEL /F "buck.d" "buck_hal.d" "buck_main.d" "buck_user.d" "device\device.d" "libraries\DCL\DCL_error.d" "libraries\sfra\sfra_gui_scicomms_driverlib.d"
    DEL /F "buck.asm" "buck_hal.asm" "buck_main.asm" "buck_user.asm" "device/device.asm" "device/f28002x_codestartbranch.asm" "libraries/DCL/DCL_error.asm" "libraries/sfra/sfra_gui_scicomms_driverlib.asm"
    DEL /F "device\f28002x_codestartbranch.d"
    RMDIR /S/Q  "syscfg\"
    Could Not Find C:\Users\hkwoo\workspace_v10\Mercury_Buck\RELEASE\device\device/device.lst
    The system cannot find the path specified.
    Could Not Find C:\Users\hkwoo\workspace_v10\Mercury_Buck\RELEASE\device\device/device.asm
    The system cannot find the path specified.
    Could Not Find C:\Users\hkwoo\workspace_v10\Mercury_Buck\RELEASE\device\f28002x_codestartbranch.d
    Finished clean
     

    **** Build Finished ****

    **** Build of configuration RELEASE for project Mercury_Buck ****

    "C:\\ti\\ccs1011\\ccs\\utils\\bin\\gmake" -k -j 8 all -O
     
    Building file: "../device/f28002x_codestartbranch.asm"
    Invoking: C2000 Compiler
    "C:/ti/ccs1011/ccs/tools/compiler/ti-cgt-c2000_21.6.0.LTS/bin/cl2000" -v28 -ml -mt --float_support=fpu32 --idiv_support=idiv0 --tmu_support=tmu0 -O4 --opt_for_speed=5 --fp_mode=relaxed --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/device_support/f28002x/headers/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/libraries/diagnostic/f28002x/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/libraries/diagnostic/f28002x/examples/test_application/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/libraries/dsp/VCU/c28/include/vcu2" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/libraries/math/IQmath/c28/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/driverlib/f28002x/driverlib/inc" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/driverlib/f28002x/driverlib" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/device_support/f28002x/common/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/device" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/libraries/sfra" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/libraries/DCL" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/libraries/SFO" --include_path="C:/ti/ccs1011/ccs/tools/compiler/ti-cgt-c2000_21.6.0.LTS/include" --advice:performance=all --define=_TI_EABI_ --define=_DEBUG --define=F28x_DEVICE --define=CPU1 --define=LARGE_MODEL --define=_FLASH --define=BUCK_CONTROL_RUNNING_ON_CPU -g --float_operations_allowed=32 --diag_suppress=10063 --diag_suppress=173 --diag_warning=225 --diag_wrap=off --display_error_number --quiet --gen_func_subsections=on --abi=eabi --cla_signed_compare_workaround=on -k --asm_listing --preproc_with_compile --preproc_dependency="device/f28002x_codestartbranch.d_raw" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/RELEASE/syscfg" --obj_directory="device"  "../device/f28002x_codestartbranch.asm"
    Finished building: "../device/f28002x_codestartbranch.asm"
     
    Building file: "../device/device.c"
    Invoking: C2000 Compiler
    "C:/ti/ccs1011/ccs/tools/compiler/ti-cgt-c2000_21.6.0.LTS/bin/cl2000" -v28 -ml -mt --float_support=fpu32 --idiv_support=idiv0 --tmu_support=tmu0 -O4 --opt_for_speed=5 --fp_mode=relaxed --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/device_support/f28002x/headers/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/libraries/diagnostic/f28002x/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/libraries/diagnostic/f28002x/examples/test_application/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/libraries/dsp/VCU/c28/include/vcu2" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/libraries/math/IQmath/c28/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/driverlib/f28002x/driverlib/inc" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/driverlib/f28002x/driverlib" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/device_support/f28002x/common/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/device" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/libraries/sfra" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/libraries/DCL" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/libraries/SFO" --include_path="C:/ti/ccs1011/ccs/tools/compiler/ti-cgt-c2000_21.6.0.LTS/include" --advice:performance=all --define=_TI_EABI_ --define=_DEBUG --define=F28x_DEVICE --define=CPU1 --define=LARGE_MODEL --define=_FLASH --define=BUCK_CONTROL_RUNNING_ON_CPU -g --float_operations_allowed=32 --diag_suppress=10063 --diag_suppress=173 --diag_warning=225 --diag_wrap=off --display_error_number --quiet --gen_func_subsections=on --abi=eabi --cla_signed_compare_workaround=on -k --asm_listing --preproc_with_compile --preproc_dependency="device/device.d_raw" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/RELEASE/syscfg" --obj_directory="device"  "../device/device.c"
    Finished building: "../device/device.c"
     
    Building file: "../libraries/DCL/DCL_error.c"
    Invoking: C2000 Compiler
    "C:/ti/ccs1011/ccs/tools/compiler/ti-cgt-c2000_21.6.0.LTS/bin/cl2000" -v28 -ml -mt --float_support=fpu32 --idiv_support=idiv0 --tmu_support=tmu0 -O4 --opt_for_speed=5 --fp_mode=relaxed --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/device_support/f28002x/headers/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/libraries/diagnostic/f28002x/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/libraries/diagnostic/f28002x/examples/test_application/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/libraries/dsp/VCU/c28/include/vcu2" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/libraries/math/IQmath/c28/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/driverlib/f28002x/driverlib/inc" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/driverlib/f28002x/driverlib" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/device_support/f28002x/common/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/device" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/libraries/sfra" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/libraries/DCL" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/libraries/SFO" --include_path="C:/ti/ccs1011/ccs/tools/compiler/ti-cgt-c2000_21.6.0.LTS/include" --advice:performance=all --define=_TI_EABI_ --define=_DEBUG --define=F28x_DEVICE --define=CPU1 --define=LARGE_MODEL --define=_FLASH --define=BUCK_CONTROL_RUNNING_ON_CPU -g --float_operations_allowed=32 --diag_suppress=10063 --diag_suppress=173 --diag_warning=225 --diag_wrap=off --display_error_number --quiet --gen_func_subsections=on --abi=eabi --cla_signed_compare_workaround=on -k --asm_listing --preproc_with_compile --preproc_dependency="libraries/DCL/DCL_error.d_raw" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/RELEASE/syscfg" --obj_directory="libraries/DCL"  "../libraries/DCL/DCL_error.c"
    Finished building: "../libraries/DCL/DCL_error.c"
     
    Building file: "../buck_hal.c"
    Invoking: C2000 Compiler
    "C:/ti/ccs1011/ccs/tools/compiler/ti-cgt-c2000_21.6.0.LTS/bin/cl2000" -v28 -ml -mt --float_support=fpu32 --idiv_support=idiv0 --tmu_support=tmu0 -O4 --opt_for_speed=5 --fp_mode=relaxed --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/device_support/f28002x/headers/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/libraries/diagnostic/f28002x/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/libraries/diagnostic/f28002x/examples/test_application/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/libraries/dsp/VCU/c28/include/vcu2" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/libraries/math/IQmath/c28/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/driverlib/f28002x/driverlib/inc" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/driverlib/f28002x/driverlib" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/device_support/f28002x/common/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/device" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/libraries/sfra" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/libraries/DCL" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/libraries/SFO" --include_path="C:/ti/ccs1011/ccs/tools/compiler/ti-cgt-c2000_21.6.0.LTS/include" --advice:performance=all --define=_TI_EABI_ --define=_DEBUG --define=F28x_DEVICE --define=CPU1 --define=LARGE_MODEL --define=_FLASH --define=BUCK_CONTROL_RUNNING_ON_CPU -g --float_operations_allowed=32 --diag_suppress=10063 --diag_suppress=173 --diag_warning=225 --diag_wrap=off --display_error_number --quiet --gen_func_subsections=on --abi=eabi --cla_signed_compare_workaround=on -k --asm_listing --preproc_with_compile --preproc_dependency="buck_hal.d_raw" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/RELEASE/syscfg"  "../buck_hal.c"
    Finished building: "../buck_hal.c"
     
    Building file: "../buck_user.c"
    Invoking: C2000 Compiler
    "C:/ti/ccs1011/ccs/tools/compiler/ti-cgt-c2000_21.6.0.LTS/bin/cl2000" -v28 -ml -mt --float_support=fpu32 --idiv_support=idiv0 --tmu_support=tmu0 -O4 --opt_for_speed=5 --fp_mode=relaxed --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/device_support/f28002x/headers/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/libraries/diagnostic/f28002x/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/libraries/diagnostic/f28002x/examples/test_application/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/libraries/dsp/VCU/c28/include/vcu2" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/libraries/math/IQmath/c28/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/driverlib/f28002x/driverlib/inc" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/driverlib/f28002x/driverlib" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/device_support/f28002x/common/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/device" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/libraries/sfra" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/libraries/DCL" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/libraries/SFO" --include_path="C:/ti/ccs1011/ccs/tools/compiler/ti-cgt-c2000_21.6.0.LTS/include" --advice:performance=all --define=_TI_EABI_ --define=_DEBUG --define=F28x_DEVICE --define=CPU1 --define=LARGE_MODEL --define=_FLASH --define=BUCK_CONTROL_RUNNING_ON_CPU -g --float_operations_allowed=32 --diag_suppress=10063 --diag_suppress=173 --diag_warning=225 --diag_wrap=off --display_error_number --quiet --gen_func_subsections=on --abi=eabi --cla_signed_compare_workaround=on -k --asm_listing --preproc_with_compile --preproc_dependency="buck_user.d_raw" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/RELEASE/syscfg"  "../buck_user.c"
    Finished building: "../buck_user.c"
     
    Building file: "../buck.c"
    Invoking: C2000 Compiler
    "C:/ti/ccs1011/ccs/tools/compiler/ti-cgt-c2000_21.6.0.LTS/bin/cl2000" -v28 -ml -mt --float_support=fpu32 --idiv_support=idiv0 --tmu_support=tmu0 -O4 --opt_for_speed=5 --fp_mode=relaxed --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/device_support/f28002x/headers/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/libraries/diagnostic/f28002x/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/libraries/diagnostic/f28002x/examples/test_application/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/libraries/dsp/VCU/c28/include/vcu2" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/libraries/math/IQmath/c28/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/driverlib/f28002x/driverlib/inc" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/driverlib/f28002x/driverlib" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/device_support/f28002x/common/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/device" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/libraries/sfra" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/libraries/DCL" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/libraries/SFO" --include_path="C:/ti/ccs1011/ccs/tools/compiler/ti-cgt-c2000_21.6.0.LTS/include" --advice:performance=all --define=_TI_EABI_ --define=_DEBUG --define=F28x_DEVICE --define=CPU1 --define=LARGE_MODEL --define=_FLASH --define=BUCK_CONTROL_RUNNING_ON_CPU -g --float_operations_allowed=32 --diag_suppress=10063 --diag_suppress=173 --diag_warning=225 --diag_wrap=off --display_error_number --quiet --gen_func_subsections=on --abi=eabi --cla_signed_compare_workaround=on -k --asm_listing --preproc_with_compile --preproc_dependency="buck.d_raw" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/RELEASE/syscfg"  "../buck.c"
    Finished building: "../buck.c"
     
    Building file: "../buck_main.c"
    Invoking: C2000 Compiler
    "C:/ti/ccs1011/ccs/tools/compiler/ti-cgt-c2000_21.6.0.LTS/bin/cl2000" -v28 -ml -mt --float_support=fpu32 --idiv_support=idiv0 --tmu_support=tmu0 -O4 --opt_for_speed=5 --fp_mode=relaxed --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/device_support/f28002x/headers/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/libraries/diagnostic/f28002x/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/libraries/diagnostic/f28002x/examples/test_application/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/libraries/dsp/VCU/c28/include/vcu2" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/libraries/math/IQmath/c28/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/driverlib/f28002x/driverlib/inc" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/driverlib/f28002x/driverlib" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/device_support/f28002x/common/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/device" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/libraries/sfra" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/libraries/DCL" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/libraries/SFO" --include_path="C:/ti/ccs1011/ccs/tools/compiler/ti-cgt-c2000_21.6.0.LTS/include" --advice:performance=all --define=_TI_EABI_ --define=_DEBUG --define=F28x_DEVICE --define=CPU1 --define=LARGE_MODEL --define=_FLASH --define=BUCK_CONTROL_RUNNING_ON_CPU -g --float_operations_allowed=32 --diag_suppress=10063 --diag_suppress=173 --diag_warning=225 --diag_wrap=off --display_error_number --quiet --gen_func_subsections=on --abi=eabi --cla_signed_compare_workaround=on -k --asm_listing --preproc_with_compile --preproc_dependency="buck_main.d_raw" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/RELEASE/syscfg"  "../buck_main.c"
    Finished building: "../buck_main.c"
     
    Building file: "../libraries/sfra/sfra_gui_scicomms_driverlib.c"
    Invoking: C2000 Compiler
    "C:/ti/ccs1011/ccs/tools/compiler/ti-cgt-c2000_21.6.0.LTS/bin/cl2000" -v28 -ml -mt --float_support=fpu32 --idiv_support=idiv0 --tmu_support=tmu0 -O4 --opt_for_speed=5 --fp_mode=relaxed --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/device_support/f28002x/headers/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/libraries/diagnostic/f28002x/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/libraries/diagnostic/f28002x/examples/test_application/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/libraries/dsp/VCU/c28/include/vcu2" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/libraries/math/IQmath/c28/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/driverlib/f28002x/driverlib/inc" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/driverlib/f28002x/driverlib" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00/device_support/f28002x/common/include" --include_path="C:/ti/c2000/C2000Ware_3_03_00_00" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/device" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/libraries/sfra" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/libraries/DCL" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/libraries/SFO" --include_path="C:/ti/ccs1011/ccs/tools/compiler/ti-cgt-c2000_21.6.0.LTS/include" --advice:performance=all --define=_TI_EABI_ --define=_DEBUG --define=F28x_DEVICE --define=CPU1 --define=LARGE_MODEL --define=_FLASH --define=BUCK_CONTROL_RUNNING_ON_CPU -g --float_operations_allowed=32 --diag_suppress=10063 --diag_suppress=173 --diag_warning=225 --diag_wrap=off --display_error_number --quiet --gen_func_subsections=on --abi=eabi --cla_signed_compare_workaround=on -k --asm_listing --preproc_with_compile --preproc_dependency="libraries/sfra/sfra_gui_scicomms_driverlib.d_raw" --include_path="C:/Users/hkwoo/workspace_v10/Mercury_Buck/RELEASE/syscfg" --obj_directory="libraries/sfra"  "../libraries/sfra/sfra_gui_scicomms_driverlib.c"
    Finished building: "../libraries/sfra/sfra_gui_scicomms_driverlib.c"
     
    Building target: "Mercury_Buck.out"
    Invoking: C2000 Linker
    "C:/ti/ccs1011/ccs/tools/compiler/ti-cgt-c2000_21.6.0.LTS/bin/cl2000" -v28 -ml -mt --float_support=fpu32 --idiv_support=idiv0 --tmu_support=tmu0 -O4 --opt_for_speed=5 --fp_mode=relaxed --advice:performance=all --define=_TI_EABI_ --define=_DEBUG --define=F28x_DEVICE --define=CPU1 --define=LARGE_MODEL --define=_FLASH --define=BUCK_CONTROL_RUNNING_ON_CPU -g --float_operations_allowed=32 --diag_suppress=10063 --diag_suppress=173 --diag_warning=225 --diag_wrap=off --display_error_number --quiet --gen_func_subsections=on --abi=eabi --cla_signed_compare_workaround=on -k --asm_listing -z -m"Mercury_Buck.map" --heap_size=0x100 --stack_size=0x200 --warn_sections -i"C:/ti/c2000/C2000Ware_3_03_00_00/libraries/dsp/VCU/c28/include/vcu2" -i"C:/ti/ccs1011/ccs/tools/compiler/ti-cgt-c2000_21.6.0.LTS/lib" -i"C:/Users/hkwoo/workspace_v10/Mercury_Buck/libraries/sfra" -i"C:/Users/hkwoo/workspace_v10/Mercury_Buck/libraries/FPUfastRTS" -i"C:/Users/hkwoo/workspace_v10/Mercury_Buck/device/driverlib" -i"C:/Users/hkwoo/workspace_v10/Mercury_Buck/libraries/SFO" -i"C:/ti/ccs1011/ccs/tools/compiler/ti-cgt-c2000_21.6.0.LTS/include" --reread_libs --diag_wrap=off --display_error_number --xml_link_info="Mercury_Buck_linkInfo.xml" --entry_point=code_start --rom_model -o "Mercury_Buck.out" "./buck.obj" "./buck_hal.obj" "./buck_main.obj" "./buck_user.obj" "./device/device.obj" "./device/f28002x_codestartbranch.obj" "./libraries/DCL/DCL_error.obj" "./libraries/sfra/sfra_gui_scicomms_driverlib.obj" "C:/ti/c2000/C2000Ware_3_03_00_00/libraries/calibration/hrpwm/f28002x/lib/SFO_v8_fpu_lib_build_c28_driverlib.lib" "C:/ti/c2000/C2000Ware_3_03_00_00/libraries/diagnostic/f28002x/lib/f28002x_diagnostic_stl_debug.lib" "../fsk_corr_detect_lib_eabi.lib" "../device/28002x_generic_flash_lnk.cmd" "../device/driverlib/driverlib.lib" "../libraries/FPUfastRTS/rts2800_fpu32_fast_supplement_eabi.lib" "../libraries/SFO/SFO_v8_fpu_lib_build_c28_driverlib_eabi.lib" "../libraries/sfra/sfra_f32_tmu_eabi.lib"  -l"C:/ti/c2000/C2000Ware_3_03_00_00/libraries/dsp/VCU/c28/lib/c28x_vcrc_library_fpu64.lib" -ldriverlib.lib -lsfra_f32_tmu_eabi.lib -lrts2800_fpu32_fast_supplement_eabi.lib -lrts2800_fpu32_eabi.lib -lSFO_v8_fpu_lib_build_c28_driverlib_eabi.lib -llibc.a
    "../device/28002x_generic_flash_lnk.cmd", line 88: warning #10068-D: no matching section
    Finished building target: "Mercury_Buck.out"
     
    copy C:\Users\hkwoo\workspace_v10\Mercury_Buck\RELEASE\syscfg\buck\F28004x\Kit.json C:\Users\hkwoo\workspace_v10\Mercury_Buck\RELEASE\..\Kit.json
    The system cannot find the path specified.
    makefile:201: recipe for target 'post-build' failed
    gmake[2]: [post-build] Error 1 (ignored)
     

    **** Build Finished ****

  • Let me loop in the compiler experts.

    Regards,

    Veena

  • Hi Veena

    It is good idea to have TI compiler team to help it. Besides of it, I would like to write our own code in parallel. It is a backup plan because I can't waiting for long time.

    I would like to have Webex meeting between you and my team as soon as possible how to do it happen it.

    Actually, it should be very simple, however I am stuck at how to get a checksum of firmware and mechanism of the CRC calculation.

    Please comment about my proposal.

    BR

    HK Woo

  • Sure, I can setup a WebEx meeting, let me know a convenient time.

    Since this issue is more from compiler side, let us see what they respond.

    Regards,

    Veena

  • Veena

    Where are you located?

  • I accepted your request

  • I have sent you private message

  • Hi Hung Kai Woo,

    I see you mentioned c28x_vcrc_library_fpu64.lib. In case of F28002x, you should use c28x_vcrc_library_fpu32.lib.

    The f2838x supports fpu64 whereas f28002x only supports fpu32.

    Regards,

    Veena

  • Based on the offline discussion, the issue has been resolved. I am closing the thread.

  • Hi Veena,

    Im trying to generate linker crc for a range of flash for the same part number and I found this forum very useful. I just have one question adding to this if you can verify what is the VCU support option selected under the processor option in the properties? Is it vcrc or vcu2?

    Regards,

    Harsha Dsouza

  • The device supports VCRC. You can find this information in device datasheet.

    Make sure you are selecting vcrc as --vcu_support option.

    Regards,

    Veena