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.

Problem when adding DSP/BIOS to existing project



Hi,  there is an existing C/C++ project, it could be complied and builed  by lauching a bat file(eg. build_cpu1.bat) in the Windows CMD.

Now I am trying to add DSP/BIOS features such as LOG/RTDX  to this existing project according to http://focus.ti.com/lit/ug/spru423h/spru423h.pdf, for example,

====CReceiver.cpp===

#include <tcf_file>cfg.h

..

LOG_print(&trace, "hello");

==================

 

However, when I am trying to build the project by launching the bat file (eg. build_cpu1.bat) in CCSv4, setting the build property's build command as :.\build_cpu1.bat

it tells,

 line 51: fatal error: could not open source file "<tcf_file>cfg.h"

 

How shall I correctly configure the build environment? Is there any reference here?

 

Br,

Applecat

 

  • I don't believe SPRU423 means to say literally use the filename "<tcf_file>cfg.h" in the #include statement.

    I believe you need to replace the string of charaters between the quotes "<tcf_file>" with something meaningful from your project.

  • yes, "<tcf_file>cfg.h" should be replaced with <project_name>cfg.h, but the problem still exists, how should I configure the build property to add DSP/BIOS to the existing project?

  • Hi, is there anyone online to provide some suggestion?

     

    Applecat

  • Applecat,

    In CCSv4, when you were creating your BIOSv5 project, you had to select "Use DSP/BIOS v5.xx" in the New Project wizard.  SPRU423 lists this step on page 32 (step 1f).

    If you haven't selected that radio button during project creation, then CCSv4 currently doesn't have a way to "enable" BIOSv5 support for an existing regular project.  So you will have to recreate the project and not forget to select "Use DSP/BIOS v5.xx".

    - Baltasar

  • Hi, Baltasar,

         Thank you for your reply! I am now creating a project with the 'User DSP/BIOS v5.x.x' selected,

     

     

    I have added

    #include "LNT1_0_PHY_RX_21_11_Simcfg.h"

    in one of my C++ source file; and a line of code,

            LOG_printf(&trace, "hello world!");

     

    I am confused, how should I configure the project's build property  to build the project successfully?

    This project uses a build.bat to build the project code, build_bat will use pcmsmake dsp.mak to build the project.

    I am waiting online ^_^

    Br,

    AppleCat

     

  • AppleCat,

    Sorry, I missed the hint that you're using a batch file to manually build the project.  In this case, selecting that radio button would not have any effect on your build.

    You have created a "managed-build' project, which means that CCS would automatically generate the makefile to build your project.  Selecting the "Use DSP/BIOS v5.xx" radio button, when creating your project, initializes its tool-chain to properly generate the makefile for your project during the build.  But this only applies to building your project from the CCS Eclipse environment.

    Since you're building your project manually, using a script file, you're bypassing CCS's "managed-build" functionality.  None of the settings that you change in the Properties dialog in CCS would have any effect on your manual build.  So, you would have to look at your makefile (dsp.mak) to figure out what is going wrong.  Make sure that it invokes the tconf.exe utility to process your .tcf file before compiling any source files.

    - Baltasar

  • Hi, Baltasar,  great, your answer sweeps my confusions about the 'manage-build' vs 'manually build', thanks.

    I have tried to run

    tconf LNT1.0_PHY_RX_21_11_Sim.tcf

    Error: Can't load ti.bios.tci Error: Couldn't find import file 'ti/bios/bios.tci' ...?

     

    Applecat

     

  • Hi, Baltasar, the error is saying,

    E:\Users\anyjiang\SourceCode\LNT10_PHY_RX_21_11_Sim\.gconf\LNT1.0_PHY_RX_21_11_S
    im>tconf LNT1.0_PHY_RX_21_11_Sim.tcf LNT1cfg_c.c
    js: "C:/Program Files/Texas Instruments/xdctools_3_15_02_62/include/utils.tci",
    line 951: Error: Can't load platform definition 'ti.platforms.evmTCI6488': Error
    : Can't load ti.bios.tci :Error: Can't find import file: 'ti/bios/bios.tci' (not
     found along 'C:\Program Files\Texas Instruments\xdctools_3_15_02_62\packages\ti
    \platforms\evmTCI6488/;C:\Program Files\Texas Instruments\xdctools_3_15_02_62/in
    clude;C:\Program Files\Texas Instruments\xdctools_3_15_02_62/packages')

    tconf is a stranger to me ^_^

    Baltasar, it is midnight in China, I have to leave the office,

    Hope I can contact to you tomorrow. Thanks for help, and best wishes.

     

    Br,

    Applate

  • AppleCat,

    You're seeing this error because the tconf utility is missing its import-path argument - just like other compilers, it uses a "path" argument to look for dependencies during build.

    I would suggest that you try creating a sample "managed-build" project in CCS, and use CCS to build it.  Then, in the Console view, you will see the correct commands that are executed to build a complete BIOSv5 project.  You can also look at the makefiles that are auto-generated by the "managed-build" (you will find these in the build directory, eg. <project>/Debug/).  You can then use this information as a reference, and adjust your own makefile to work properly.

    I've attached a simple BIOSv5 project to this message.  Try building it in CCS (right-click on the project in the C/C++ Projects view, and select "Build project").

    Is there a reason why you must use a manual build process, as opposed to using CCS' "managed-build"?  If yes, then I would also suggest that you consider creating a "standard-make" CCS project, so that you could use CCS to build with your own makefile and build-tool.

    - Baltasar

    hello.zip
  • Hi, Baltasar, I am back in office now, I will try, it is kind of you and thanks for the suggestions.

    AppleCat

  • Hi, Baltasar,

    Attatched are my project's make file,'ul_dsp.mak'  and the 'LNT10_PHY_RX_21_11_Simcfg.cmd' file generated by tconf.

    I am confused how to use the 'LNT10_PHY_RX_21_11_Simcfg.cmd'  file in the 'ul_dsp.mak'.

    At this moment, linke in ul_dsp.mak is    LINK     = $(TI_TOOLS_FOLDER)\lnk6x

    However, from the Hello.zip example, CCS manage-build will choose to 'C:/Program Files/Texas Instruments/ccsv4/tools/compiler/c6000/bin/cl6x'

    Hi, Baltasar, do you have any idea  on how to use the 'LNT10_PHY_RX_21_11_Simcfg.cmd'  in the 'ul_dsp.mak'?

    Applecat

     

    (I am sorry that I have to post the file contents here; it seems i cann't not attached files here)

    ==LNT10_PHY_RX_21_11_Simcfg.cmd==

    /*   Do *not* directly modify this file.  It was    */
    /*   generated by the Configuration Tool; any  */
    /*   changes risk being overwritten.                */

    /* INPUT LNT10_PHY_RX_21_11_Sim.cdb */

    /* MODULE PARAMETERS */
    -u _FXN_F_nop
    GBL_USERINITFXN = _FXN_F_nop;

    -u MEM_NULL
    MEM_SEGZERO = MEM_NULL;
    -u MEM_NULL
    MEM_MALLOCSEG = MEM_NULL;

    -u _CLK_gethtime
    CLK_TIMEFXN = _CLK_gethtime;
    -u HWI_F_dispatch
    CLK_HOOKFXN = HWI_F_dispatch;

    -u _KNL_tick
    PRD_THOOKFXN = _KNL_tick;

    -u IRAM
    RTDX_DATAMEMSEG = IRAM;

    -u IRAM
    HST_DSMBUFSEG = IRAM;

    -u GBL_NULL
    SWI_EHOOKFXN = GBL_NULL;
    -u GBL_NULL
    SWI_IHOOKFXN = GBL_NULL;
    -u SWI_F_exec
    SWI_EXECFXN = SWI_F_exec;
    -u SWI_F_run
    SWI_RUNFXN = SWI_F_run;

    -u MEM_NULL
    TSK_STACKSEG = MEM_NULL;
    -u _FXN_F_nop
    TSK_VCREATEFXN = _FXN_F_nop;
    -u _FXN_F_nop
    TSK_VDELETEFXN = _FXN_F_nop;
    -u _FXN_F_nop
    TSK_VEXITFXN = _FXN_F_nop;

    -u IDL_F_stub
    IDL_CALIBRFXN = IDL_F_stub;

    -u _UTL_doAbort
    SYS_ABORTFXN = _UTL_doAbort;
    -u _UTL_doError
    SYS_ERRORFXN = _UTL_doError;
    -u _UTL_halt
    SYS_EXITFXN = _UTL_halt;
    -u _UTL_doPutc
    SYS_PUTCFXN = _UTL_doPutc;

    -u _FXN_F_nop
    GIO_CREATEFXN = _FXN_F_nop;
    -u _FXN_F_nop
    GIO_DELETEFXN = _FXN_F_nop;
    -u _FXN_F_nop
    GIO_PENDFXN = _FXN_F_nop;
    -u _FXN_F_nop
    GIO_POSTFXN = _FXN_F_nop;

    /* OBJECT ALIASES */
    _CACHE_L1P = CACHE_L1P;
    _CACHE_L1D = CACHE_L1D;
    _DDR = DDR;
    _IRAM = IRAM;
    _PRD_clock = PRD_clock;
    _RTA_fromHost = RTA_fromHost;
    _RTA_toHost = RTA_toHost;
    _HWI_RESET = HWI_RESET;
    _HWI_NMI = HWI_NMI;
    _HWI_RESERVED0 = HWI_RESERVED0;
    _HWI_RESERVED1 = HWI_RESERVED1;
    _HWI_INT4 = HWI_INT4;
    _HWI_INT5 = HWI_INT5;
    _HWI_INT6 = HWI_INT6;
    _HWI_INT7 = HWI_INT7;
    _HWI_INT8 = HWI_INT8;
    _HWI_INT9 = HWI_INT9;
    _HWI_INT10 = HWI_INT10;
    _HWI_INT11 = HWI_INT11;
    _HWI_INT12 = HWI_INT12;
    _HWI_INT13 = HWI_INT13;
    _HWI_INT14 = HWI_INT14;
    _HWI_INT15 = HWI_INT15;
    _EVENT4 = EVENT4;
    _EVENT5 = EVENT5;
    _EVENT6 = EVENT6;
    _EVENT7 = EVENT7;
    _EVENT8 = EVENT8;
    _EVENT9 = EVENT9;
    _EVENT10 = EVENT10;
    _EVENT11 = EVENT11;
    _EVENT12 = EVENT12;
    _EVENT13 = EVENT13;
    _EVENT14 = EVENT14;
    _EVENT15 = EVENT15;
    _EVENT16 = EVENT16;
    _EVENT17 = EVENT17;
    _EVENT18 = EVENT18;
    _EVENT19 = EVENT19;
    _EVENT20 = EVENT20;
    _EVENT21 = EVENT21;
    _EVENT22 = EVENT22;
    _EVENT23 = EVENT23;
    _EVENT24 = EVENT24;
    _EVENT25 = EVENT25;
    _EVENT26 = EVENT26;
    _EVENT27 = EVENT27;
    _EVENT28 = EVENT28;
    _EVENT29 = EVENT29;
    _EVENT30 = EVENT30;
    _EVENT31 = EVENT31;
    _EVENT32 = EVENT32;
    _EVENT33 = EVENT33;
    _EVENT34 = EVENT34;
    _EVENT35 = EVENT35;
    _EVENT36 = EVENT36;
    _EVENT37 = EVENT37;
    _EVENT38 = EVENT38;
    _EVENT39 = EVENT39;
    _EVENT40 = EVENT40;
    _EVENT41 = EVENT41;
    _EVENT42 = EVENT42;
    _EVENT43 = EVENT43;
    _EVENT44 = EVENT44;
    _EVENT45 = EVENT45;
    _EVENT46 = EVENT46;
    _EVENT47 = EVENT47;
    _EVENT48 = EVENT48;
    _EVENT49 = EVENT49;
    _EVENT50 = EVENT50;
    _EVENT51 = EVENT51;
    _EVENT52 = EVENT52;
    _EVENT53 = EVENT53;
    _EVENT54 = EVENT54;
    _EVENT55 = EVENT55;
    _EVENT56 = EVENT56;
    _EVENT57 = EVENT57;
    _EVENT58 = EVENT58;
    _EVENT59 = EVENT59;
    _EVENT60 = EVENT60;
    _EVENT61 = EVENT61;
    _EVENT62 = EVENT62;
    _EVENT63 = EVENT63;
    _EVENT64 = EVENT64;
    _EVENT65 = EVENT65;
    _EVENT66 = EVENT66;
    _EVENT67 = EVENT67;
    _EVENT68 = EVENT68;
    _EVENT69 = EVENT69;
    _EVENT70 = EVENT70;
    _EVENT71 = EVENT71;
    _EVENT72 = EVENT72;
    _EVENT73 = EVENT73;
    _EVENT74 = EVENT74;
    _EVENT75 = EVENT75;
    _EVENT76 = EVENT76;
    _EVENT77 = EVENT77;
    _EVENT78 = EVENT78;
    _EVENT79 = EVENT79;
    _EVENT80 = EVENT80;
    _EVENT81 = EVENT81;
    _EVENT82 = EVENT82;
    _EVENT83 = EVENT83;
    _EVENT84 = EVENT84;
    _EVENT85 = EVENT85;
    _EVENT86 = EVENT86;
    _EVENT87 = EVENT87;
    _EVENT88 = EVENT88;
    _EVENT89 = EVENT89;
    _EVENT90 = EVENT90;
    _EVENT91 = EVENT91;
    _EVENT92 = EVENT92;
    _EVENT93 = EVENT93;
    _EVENT94 = EVENT94;
    _EVENT95 = EVENT95;
    _EVENT96 = EVENT96;
    _EVENT97 = EVENT97;
    _EVENT98 = EVENT98;
    _EVENT99 = EVENT99;
    _EVENT100 = EVENT100;
    _EVENT101 = EVENT101;
    _EVENT102 = EVENT102;
    _EVENT103 = EVENT103;
    _EVENT104 = EVENT104;
    _EVENT105 = EVENT105;
    _EVENT106 = EVENT106;
    _EVENT107 = EVENT107;
    _EVENT108 = EVENT108;
    _EVENT109 = EVENT109;
    _EVENT110 = EVENT110;
    _EVENT111 = EVENT111;
    _EVENT112 = EVENT112;
    _EVENT113 = EVENT113;
    _EVENT114 = EVENT114;
    _EVENT115 = EVENT115;
    _EVENT116 = EVENT116;
    _EVENT117 = EVENT117;
    _EVENT118 = EVENT118;
    _EVENT119 = EVENT119;
    _EVENT120 = EVENT120;
    _EVENT121 = EVENT121;
    _EVENT122 = EVENT122;
    _EVENT123 = EVENT123;
    _EVENT124 = EVENT124;
    _EVENT125 = EVENT125;
    _EVENT126 = EVENT126;
    _EVENT127 = EVENT127;
    _KNL_swi = KNL_swi;
    _TSK_idle = TSK_idle;
    _IDL_cpuLoad = IDL_cpuLoad;
    _LNK_dataPump = LNK_dataPump;
    _RTA_dispatcher = RTA_dispatcher;
    _LOG_system = LOG_system;
    _mytrace = mytrace;
    _IDL_busyObj = IDL_busyObj;

    /* MODULE GBL */

    SECTIONS {
       .vers (COPY): {} /* version information */
    }

    -priority
    --trampolines
    -llnkrtdx.a64P
    -ldrivers.a64P         /* device drivers support */
    -lsioboth.a64P         /* supports both SIO models */
    -lbiosTCI6482.a64P     /* BIOS clock specific library */
    -lbios.a64P            /* DSP/BIOS support */
    -lrtdxsim.lib          /* RTDX support */
    -lrts64plus.lib        /* C and C++ run-time library support */

    _GBL_CACHE = GBL_CACHE;
    _BCACHE_bootInit=_FXN_F_nop;

    /* MODULE MEM */
    -stack 0x400
    MEMORY {
       CACHE_L1P   : origin = 0xe00000,    len = 0x8000
       CACHE_L1D   : origin = 0xf00000,    len = 0x8000
       DDR         : origin = 0x80000000,  len = 0x10000000
       IRAM        : origin = 0x800000,    len = 0x200000
    }
    /* MODULE CLK */
    SECTIONS {
       .clk: {
            *(.clk)
       } > IRAM, RUN_START(CLK_A_TABBEG)
    }
    _CLK_PRD = CLK_PRD;
    _CLK_COUNTSPMS = CLK_COUNTSPMS;
    _CLK_REGS = CLK_REGS;
    _CLK_USETIMER = CLK_USETIMER;
    _CLK_TIMERNUM = CLK_TIMERNUM;
    _CLK_TDDR = CLK_TDDR;

    /* MODULE PRD */
    SECTIONS {
       .prd: RUN_START(PRD_A_TABBEG), RUN_END(PRD_A_TABEND) {
       } > IRAM
    }
    PRD_A_TABLEN = 0;

    /* MODULE RTDX */
    _RTDX_interrupt_mask = 0x0;

    /* MODULE HST */
    _LNK_dspFrameReadyMask = LNK_dspFrameReadyMask;
    _LNK_dspFrameRequestMask = LNK_dspFrameRequestMask;
    _LNK_readDone = LNK_readDone;
    _LNK_readFail = LNK_readFail;
    _LNK_readPend = LNK_readPend;
    _LNK_writeFail = LNK_writeFail;
    _HWI_CFGDISPATCHED = HWI_CFGDISPATCHED;

    /* MODULE SWI */
    SECTIONS {
       .swi: RUN_START(SWI_A_TABBEG), RUN_END(SWI_A_TABEND) {
       } > IRAM
    }
    SWI_A_TABLEN = 1;

    /* MODULE TSK */
    SECTIONS {
       .tsk: {
            *(.tsk)
       } > IRAM
    }

    /* MODULE IDL */
    SECTIONS {
       .idl: {
            *(.idl)
       } > IRAM, RUN_START(IDL_A_TABBEG)
      
       .idlcal: {
            *(.idlcal)
       } > IRAM, RUN_START(IDL_A_CALBEG)
    }


    LOG_A_TABLEN = 2; _LOG_A_TABLEN = 2;

    PIP_A_TABLEN = 2;


    SECTIONS {
            .bss:     {} > IRAM

            .hwi_vec: {
                *(.hwi_vec)
            } align = 0x400, RUN_START(HWI_A_VECS) > IRAM

            .far:     {} > IRAM

            .sysdata: {} > IRAM

            .dsm: {} > IRAM

            frt:    {} > IRAM

            .mem:    {} > IRAM

            .bios:    {} > IRAM

            .cio:     {} > IRAM

            .data:    {} > IRAM

            .gio:     {} > IRAM

            .pinit:   {} > IRAM

            .sys:     {} > IRAM

            .sysregs: {} > IRAM

            .text:    {} > IRAM

            .cinit:    {} > IRAM

            .switch:    {} > IRAM

            .gblinit:    {} > IRAM

            .sysinit:    {} > IRAM

            .trcdata:    {} > IRAM

            .hwi: {}  > IRAM

            .rtdx_text: {}  > IRAM

            .TSK_idle$stk: {
                *(.TSK_idle$stk)
            } > IRAM

            /* LOG_system buffer */
            .LOG_system$buf: align = 0x100 {} > IRAM

            /* mytrace buffer */
            .mytrace$buf: align = 0x100 {} > IRAM

            .rtdx_data: align = 0x40 { . += 0x80; *(.rtdx_data) }   > IRAM

            GROUP {
             .const: align = 0x8 {}
             .printf (COPY): {}
            } > IRAM

            .args: align=4 fill=0 {
                *(.args)
                . += 0x4;
            } > IRAM

           /* RTA_fromHost buffer */
           .hst1: align = 0x40 { . += 0x80; *(.hst1) }  > IRAM

           /* RTA_toHost buffer */
           .hst0: align = 0x40 { . += 0x80; *(.hst0) }  > IRAM

            .trace: fill = 0x0  align = 0x4 {
               _SYS_PUTCBEG = .;
               . += 0x200;
               _SYS_PUTCEND = . - 1;
            } > IRAM

            .hst: RUN_START(HST_A_TABBEG), RUN_START(_HST_A_TABBEG), RUN_END(HST_A_TABEND), RUN_END(_HST_A_TABEND) {
            } > IRAM

            .log: RUN_START(LOG_A_TABBEG), RUN_START(_LOG_A_TABBEG), RUN_END(LOG_A_TABEND), RUN_END(_LOG_A_TABEND) {
            } > IRAM

            .pip: RUN_START(PIP_A_TABBEG), RUN_START(_PIP_A_TABBEG), RUN_END(PIP_A_TABEND), RUN_END(_PIP_A_TABEND) {
            } > IRAM

            .sts: RUN_START(STS_A_TABBEG), RUN_START(_STS_A_TABBEG), RUN_END(STS_A_TABEND), RUN_END(_STS_A_TABEND) {
            } > IRAM

            .stack: align = 0x8 {
                GBL_stackbeg = .;
                *(.stack)
                GBL_stackend = GBL_stackbeg + 0x400 - 1;
                _HWI_STKBOTTOM = GBL_stackbeg + 0x400 - 8;
                _HWI_STKTOP = GBL_stackbeg;
            } > IRAM

    }

     

    ==ul_dsp.mak==

    #
    # ......
    #

     

     

    ifdef HW_PLATFORM_SIM
        $(CC) -ppo $(DEF_FARADAY_CORE) $(COMMON_INCLUDE) $(LINKER_LCF_NAME_WPATH).lcf
        $(MV) $(LINKER_LCF_NAME_WPATH).pp $(LINKER_LCF_NAME_WPATH)_temp.lcf
    ifdef SW_EMPTY_BUILD
        $(ECHO) $(OBJECTS_FOLDER)\$(SW_CONFIG_NAME).obj       >  $(OBJECTS_COLLECTION_FILE_WPATH)
        $(ECHO) $(OBJECTS_FOLDER)\$(STARTUP_CONFIG_NAME).obj  >> $(OBJECTS_COLLECTION_FILE_WPATH)
        $(ECHO) Linking objects
        $(LINK) $(OBJECTS_COLLECTION_FILE_WPATH) -w -q -a -c -x $(LIBRARIES_COLLECTION_FILE_WPATH) $(LINKER_LCF_NAME_WPATH)_temp.lcf -m $(TARGET_MAP_FILE_WPATH) -o $(TARGET_OUT_FILE_WPATH)
    else
        $(ECHO) Linking objects
        $(LINK) $(OBJECTS_FOLDER)\*.obj -w -q -a -c -x  $(LIBRARIES_COLLECTION_FILE_WPATH) $(LINKER_LCF_NAME_WPATH)_temp.lcf -m $(TARGET_MAP_FILE_WPATH) -o $(TARGET_OUT_FILE_WPATH)
    endif
        $(RM) $(LINKER_LCF_NAME_WPATH)_temp.lcf
    endif

     

     

     

  • Hi, is there anyone online to give some suggestions?

    Applecat

  • Applecat,

    CCS invokes the linker indirectly through "clXXX.exe -z".  You should be able to use the linker (lnkXXX.exe) directly.  Just supply to it all the arguments that CCS uses with clXXX.exe, but omit the arguments that precede the "-z" flag (omit the "-z" flag itself as well).

    - Baltasar

  • Hi, Baltasar,

    Thank you firstly for the tips.

    My project has its own .lcf file, however, the tconf.exe generates another 'LNT10.....cmd'file. It seems both files are used to

    map the sections in memory. I am consufing how should I use both the .lcf file and the .cmd file in the linker command? It seems they` are in collision and  have different memory sections names? This problem bothers me several hours...sign~ Hi, Baltasar, what should I do next? Should I merge these two files together?

    AppleCat

  • Baltasar, it is midnight here, i have to take a sleep for next day's work.

    Merry chirstmas and happy new year!

    Applecat

  • Hi, Baltasar, is it necessary for me to add a main() function in a file as the entry point for the BIOS?

    Br,

    Applecat

  • hi everyone,

    I am trying to build a simulink model using CCS V3.3. Whenever the project is loaded in, it doesn't build as it gives the error 'fatal error: could not open source file *cfg.h', where * is the name of the model in simulink. Plz help me out in removing this error as soon as possible.

    I also read somewhere to create one such file using Debug--->Configuration option. I did so but it creates a complete folder with some .obj files. The problem is how to reference this file in the code. 

    Any sort of help is warmly welcome.  

  • Unfortunately, for me, this is the wrong answer. The project we are working with has many 10s of files that will have to be added to a new project with more than one person working with it. I do hope there are plans to fix this seriou problem soon. I will now have to waste an entire afternoon creating a project and adding in allof the files and hope I don't miss something.

  • Mike,

    FWIW - CCSv4.2, which is coming out soon, has been enhanced to automatically convert a plain CCS project into DSP/BIOSv5-enabled project when any .tcf file is added to (copied into or created in) the project.  See SDSCM00036900 Adding '.tcf' file to a project should enable RTSC nature.

    - Baltasar.