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.

AM3357: Importing DCAN from Starterware

Part Number: AM3357
Other Parts Discussed in Thread: SYSBIOS

Hello,

I've got one question about using CSL with Starterware(DAL) in projects based on PSDK.

Our new code is based mostly on CSL but for AM335x there is no implementation for DCAN.

Our legacy code use DCAN from old version of Starterware. When I've add DAL to .cfg  then linker return a lot of multiple definition errors like this:

/home/workspace/ti/psdk_rtos_am335x_5_02_00_10/pdk_am335x_1_0_13/packages/ti/csl/lib/am335x/a8/release/ti.csl.aa8fg(i2c.oa8fg): In function `I2CMasterBusy':
i2c.c:(.text.I2CMasterBusy+0x0): multiple definition of `I2CMasterBusy'
/home/workspace/ti/psdk_rtos_am335x_5_02_00_10/pdk_am335x_1_0_13/packages/ti/starterware/binary/dal/lib/cmpc30am335x/a8/debug/gcc/libdal.a(i2c.o):/home/workspace/ti/psdk_rtos_am335x_5_02_00_10/pdk_am335x_1_0_13/packages/ti/starterware/dal/i2c.c:752: first defined here


Part of .cfg file:

/* Load the OSAL package */
var osType = "tirtos"
var Osal = xdc.useModule('ti.osal.Settings');
Osal.osType = osType;

var Uart = xdc.loadPackage('ti.drv.uart');
var I2c = xdc.loadPackage('ti.drv.i2c');
var Pruss = xdc.loadPackage('ti.drv.pruss');
var Gpio = xdc.loadPackage('ti.drv.gpio');

var socType = "am335x";
var devType = "ourBoard";

var Csl = xdc.loadPackage('ti.csl');
Csl.Settings.deviceType = socType;


/* Load the Dal package */
var SDal = xdc.loadPackage('ti.starterware.dal');
SDal.Settings.socType = devType;
SDal.Settings.libProfile = "debug";

Is there any configuration option to use built-in DCAN module from DAL without making modification in PSDK files?

Best Regards

Paweł Wójcicki

  • Hi,

    I am not sure what you intended to do. It seems that you want to create a CCS project with Processor SDK RTOS, meanwhile, you want some legacy DAL library inside the project.

    Note there is no DCAN driver example in Processor SDK RTOS. But there is a CCS project called DCAN_LoopbackExample_evmAM335x_armTestProject under pdk_am335x_1_0_15\packages\ti\starterware\examples\dcan\loopback\rtos. You should be able to create the CCS project using pdkprojectcreate script and see what inside the am335x_app_dcan_evmam335x.cfg file. Then build it and test out.

    Regards, Eric 

  • Hello Eric,

    I've maintaining already existed project that using PSDK (mostly for using industry protocols). Industry protocols was implemented by strongly basing on PRU-ICSS examples that are available on TI site. Used code from TI site is based on CSL drivers. Now we need to run this project with our legacy code for CAN communication that is based on Starterware.

    When I add:

    /* Load the Dal package */
    var SDal = xdc.loadPackage('ti.starterware.dal');
    SDal.Settings.socType = devType;
    SDal.Settings.libProfile = "debug";

    to config file than I've got a lot of multiple definition error.

    My question is: Is there a option to coexist CSL and Starterware in PSDK based project? Of course without modification PSDK but only config file, etc.

    Whole config file:

    var Defaults = xdc.useModule('xdc.runtime.Defaults');
    var Diags = xdc.useModule('xdc.runtime.Diags');
    var Error = xdc.useModule('xdc.runtime.Error');
    var Log = xdc.useModule('xdc.runtime.Log');
    var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
    var Main = xdc.useModule('xdc.runtime.Main');
    var Memory = xdc.useModule('xdc.runtime.Memory')
    var SysStd = xdc.useModule('xdc.runtime.SysStd');
    var SysMin = xdc.useModule('xdc.runtime.SysMin');
    var System = xdc.useModule('xdc.runtime.System');
    var Text = xdc.useModule('xdc.runtime.Text');

    var BIOS = xdc.useModule('ti.sysbios.BIOS');
    var Clock = xdc.useModule('ti.sysbios.knl.Clock');
    var Swi = xdc.useModule('ti.sysbios.knl.Swi');
    var Task = xdc.useModule('ti.sysbios.knl.Task');
    var Semaphore = xdc.useModule('ti.sysbios.knl.Semaphore');
    var Program = xdc.useModule("xdc.cfg.Program");

    var Hwi = xdc.useModule('ti.sysbios.hal.Hwi');
    var Mailbox = xdc.useModule('ti.sysbios.knl.Mailbox');

    var Global = xdc.useModule('ti.ndk.config.Global');
    var Ip = xdc.useModule('ti.ndk.config.Ip');
    var Udp = xdc.useModule('ti.ndk.config.Udp');
    var Tcp = xdc.useModule('ti.ndk.config.Tcp');
    var Load = xdc.useModule('ti.sysbios.utils.Load');

    var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
    //var Timestamp = xdc.useModule('xdc.runtime.Timestamp'); //Enable if Timestamp_get32 is used in application
    //var GateAll = xdc.useModule('ti.sysbios.gates.GateAll');

    /*Program.sectMap[".cio"] = new Program.SectionSpec();
    Program.sectMap[".cio"].loadSegment = "EXT_RAM";*/

    var Edma = xdc.loadPackage ("ti.sdo.edma3.drv.sample");
    var drv = xdc.loadPackage ("ti.sdo.edma3.drv");
    var rm = xdc.loadPackage ("ti.sdo.edma3.rm");

    var Cache = xdc.useModule('ti.sysbios.family.arm.a8.Cache');

    var Mmu = xdc.useModule('ti.sysbios.family.arm.a8.Mmu');
    Mmu.enableMMU = true;

    /* Enable the cache */
    Cache.enableCache = true;

    /* Load the OSAL package */
    var osType = "tirtos"
    var Osal = xdc.useModule('ti.osal.Settings');
    Osal.osType = osType;

    var Uart = xdc.loadPackage('ti.drv.uart');
    var I2c = xdc.loadPackage('ti.drv.i2c');
    var Pruss = xdc.loadPackage('ti.drv.pruss');
    var Gpio = xdc.loadPackage('ti.drv.gpio');

    var socType = "am335x";
    var devType = "ourBoard";

    var Csl = xdc.loadPackage('ti.csl');
    Csl.Settings.deviceType = socType;


    /* Load the Dal package */
    var SDal = xdc.loadPackage('ti.starterware.dal');
    SDal.Settings.socType = devType;
    SDal.Settings.libProfile = "debug";

    var Icss_Emac = xdc.loadPackage('ti.drv.icss_emac');
    var Nimu_Icss = xdc.loadPackage('ti.transport.ndk.nimu_icss');

    /* Load the spi package */
    var Spi = xdc.loadPackage('ti.drv.spi');
    Spi.Settings.socType = socType;

    /* Load the board package */
    var Board = xdc.loadPackage('ti.board');
    Board.Settings.boardName = "cmpc30AM335x";

    /*
    * Program.argSize sets the size of the .args section.
    * The examples dont use command line args so argSize is set to 0.
    */
    Program.argSize = 0x0;

    /*
    * Uncomment this line to globally disable Asserts.
    * All modules inherit the default from the 'Defaults' module. You
    * can override these defaults on a per-module basis using Module.common$.
    * Disabling Asserts will save code space and improve runtime performance.
    Defaults.common$.diags_ASSERT = Diags.ALWAYS_OFF;
    */

    /*
    * Uncomment this line to keep module names from being loaded on the target.
    * The module name strings are placed in the .const section. Setting this
    * parameter to false will save space in the .const section. Error and
    * Assert messages will contain an "unknown module" prefix instead
    * of the actual module name.
    Defaults.common$.namedModule = false;
    */

    /*
    * Minimize exit handler array in System. The System module includes
    * an array of functions that are registered with System_atexit() to be
    * called by System_exit().
    */
    System.maxAtexitHandlers = 4;

    /*
    * Uncomment this line to disable the Error print function.
    * We lose error information when this is disabled since the errors are
    * not printed. Disabling the raiseHook will save some code space if
    * your app is not using System_printf() since the Error_print() function
    * calls System_printf().
    Error.raiseHook = null;
    */

    /*
    * Uncomment this line to keep Error, Assert, and Log strings from being
    * loaded on the target. These strings are placed in the .const section.
    * Setting this parameter to false will save space in the .const section.
    * Error, Assert and Log message will print raw ids and args instead of
    * a formatted message.
    Text.isLoaded = false;
    */

    /*
    * Uncomment this line to disable the output of characters by SysMin
    * when the program exits. SysMin writes characters to a circular buffer.
    * This buffer can be viewed using the SysMin Output view in ROV.
    SysMin.flushAtExit = false;
    */

    /* Circular buffer size for System_printf() */
    SysMin.bufSize = 0x200;

    /*
    * The BIOS module will create the default heap for the system.
    * Specify the size of this default heap.
    */
    BIOS.heapSize = 25165824; /* 524288; */
    BIOS.libType = BIOS.LibType_Custom;
    BIOS.assertsEnabled = true;
    BIOS.logsEnabled = true;
    BIOS.cpuFreq.lo = 600000000;
    BIOS.rtsGateType = BIOS.GateHwi;

    Memory.defaultHeapSize = 25164800;
    BIOS.runtimeCreatesEnabled = true;

    Hwi.dispatcherSwiSupport = true;
    Hwi.dispatcherTaskSupport = true;
    Hwi.dispatcherAutoNestingSupport = true;
    Hwi.initStackFlag = false;
    Hwi.checkStackFlag = false;

    SysMin.bufSize = 0x0;
    System.SupportProxy = SysStd;
    Defaults.common$.diags_INTERNAL = Diags.ALWAYS_ON;
    Defaults.common$.diags_ASSERT = Diags.ALWAYS_ON;
    Main.common$.diags_INFO = Diags.ALWAYS_ON;
    Clock.tickPeriod = 1000;

    /* System stack size (used by ISRs and Swis) */
    Program.stack = 0x20000;

    Task.defaultStackSize = 0x2000;
    Task.idleTaskStackSize = 0x4000;

    Task.enableIdleTask = true;
    Task.initStackFlag = true;
    Task.checkStackFlag = true;

    Global.networkOpenHook = null;
    Global.networkCloseHook = null;
    Global.stackBeginHook = null;
    Global.stackThreadUser = "&ndk_integrate_stackThread";

    Ip.ResolveIP = false;
    Ip.dhcpClientMode = 1;
    Ip.CallByIP = false;
    Ip.autoIp = false;
    Ip.address = "192.168.1.21";
    Ip.gatewayIpAddr = "192.168.1.1";
    Ip.mask = "255.255.255.0";

    Tcp.transmitBufSize = 8192;
    Tcp.receiveBufSize = 65536;
    Tcp.receiveBufLimit = 65536;
    Tcp.keepProbeTimeout = 6000;
    Tcp.keepProbeInterval = 750;

    Global.ndkTickPeriod = 100;
    Global.kernTaskPriLevel = 11;
    Global.serviceReportHook = null;
    Global.IPv6 = false;

    Ip.ifIdx = 2;
    Global.networkIPAddrHook = null;

    Global.ndkThreadStackSize = 8192;
    Global.pktNumFrameBufs = 384;
    Global.netSchedulerPri = Global.NC_PRIORITY_HIGH;
    Global.debugPrintLevel = Global.DBG_INFO;
    Global.debugAbortLevel = Global.DBG_ERROR;

    /*
    Following lines are added to configure SYSBIOS to use DMTimer4 for internal clock. Clock frequency set to 24 Mhz
    for accuracy
    */
    /*
    var Timer = xdc.useModule('ti.sysbios.timers.dmtimer.Timer');
    Timer.intFreqs[2] = {hi: 0, lo: 24000000}
    Clock.timerId = 2;
    */
    /* BIOS instances for our example */
    var semaphore0Params = new Semaphore.Params();
    semaphore0Params.instance.name = "switchReady";
    semaphore0Params.mode = Semaphore.Mode_BINARY;
    /*
    var Telnet = xdc.useModule('ti.ndk.config.Telnet');
    var telnet0Params = new Telnet.Params();
    telnet0Params.callBackFxn = "&ConsoleOpen";
    var telnet0 = Telnet.create(telnet0Params);
    */

    /*
    Log = xdc.useModule('xdc.runtime.Log');
    Timestamp = xdc.useModule('xdc.runtime.Timestamp');
    var LoggingSetup = xdc.useModule('ti.uia.sysbios.LoggingSetup');
    LoggingSetup.sysbiosLoggerSize = 65536;
    LoggingSetup.sysbiosSwiLogging = true;
    LoggingSetup.sysbiosHwiLogging = true;
    LoggingSetup.sysbiosSemaphoreLogging = true;
    LoggingSetup.loadTaskLogging = false;
    LoggingSetup.loadSwiLogging = false;
    LoggingSetup.loadHwiLogging = false;
    LoggingSetup.enableTaskProfiler = true;
    */

    Program.sectMap["ti.sysbios.family.arm.a8.mmuTableSection"] = new Program.SectionSpec();
    Program.sectMap["ti.sysbios.family.arm.a8.mmuTableSection"].loadSegment = "SRAM_HI";
    Program.sectMap["ti.sysbios.family.arm.a8.mmuTableSection"].type = "NOLOAD";

    Program.sectMap[".c_int00"] = new Program.SectionSpec();
    Program.sectMap[".c_int00"].loadAddress = 0x80000000;
    Program.sectMap[".c_int00"].runAddress = 0x80000000;

    Program.sectMap[".biosheap"] = new Program.SectionSpec();
    Program.sectMap[".biosheap"].runAddress = 0x80800000;
    Program.sectMap[".biosheap"].type = "NOLOAD";


    BIOS.libType = BIOS.LibType_Debug;
    /*BIOS.customCCOpts = "--endian=little -mv7A8 --abi=eabi --neon --float_support=vfpv3 -q -ms --program_level_compile -g";*/
    BIOS.assertsEnabled = true;
    BIOS.logsEnabled = true;

    /***********************************************
    * MMU Configuration *
    ***********************************************/


    var peripheralAttrs = {
    type : Mmu.FirstLevelDesc_SECTION, // SECTION descriptor
    tex: 1,
    bufferable : true, // bufferable
    cacheable : true, // cacheable
    shareable : false, // shareable
    noexecute : false, // not executable
    };

    /* MMU configuration for NOR - bufferable| Cacheable */
    var peripheralBaseAddr = 0x08000000;
    Mmu.setFirstLevelDescMeta(peripheralBaseAddr, peripheralBaseAddr, peripheralAttrs);

    /* MMU configuration for NOR - bufferable| Cacheable */
    var peripheralBaseAddr = 0x08100000;
    Mmu.setFirstLevelDescMeta(peripheralBaseAddr, peripheralBaseAddr, peripheralAttrs);

    /* MMU configuration for NOR - bufferable| Cacheable */
    var peripheralBaseAddr = 0x08200000;
    Mmu.setFirstLevelDescMeta(peripheralBaseAddr, peripheralBaseAddr, peripheralAttrs);


    /* Force peripheral section to be NON cacheable strongly-ordered memory */
    var peripheralAttrs = {
    type : Mmu.FirstLevelDesc_SECTION, // SECTION descriptor
    tex: 0,
    bufferable : false, // bufferable
    cacheable : false, // cacheable
    shareable : false, // shareable
    noexecute : false, // not executable
    };

    /* MMU configuration for PWM - Non bufferable| Non Cacheable */
    var peripheralBaseAddr = 0x48300000;
    Mmu.setFirstLevelDescMeta(peripheralBaseAddr, peripheralBaseAddr, peripheralAttrs);

    /* MMU configuration for INTCPS,MPUSS - Non Bufferable| Non Cacheable */
    var peripheralBaseAddr = 0x48200000;
    Mmu.setFirstLevelDescMeta(peripheralBaseAddr, peripheralBaseAddr, peripheralAttrs);

    /* MMU configuration for I2C2,McSPI1,UART3,UART4,UART5, GPIO2,GPIO3,MMC1 - Non bufferable| Non Cacheable */
    var peripheralBaseAddr = 0x48100000;
    Mmu.setFirstLevelDescMeta(peripheralBaseAddr, peripheralBaseAddr, peripheralAttrs);

    /* MMU configuration for UART1,UART2,I2C1,McSPI0,McASP0 CFG,McASP1 CFG,DMTIMER,GPIO1 -Non bufferable| Non Cacheable */
    var peripheralBaseAddr = 0x48000000;
    Mmu.setFirstLevelDescMeta(peripheralBaseAddr, peripheralBaseAddr, peripheralAttrs);

    /* MMU configuration for UART1,UART2,I2C1,McSPI0,McASP0 CFG,McASP1 CFG,DMTIMER,GPIO1 -Non bufferable| Non Cacheable */
    var peripheralBaseAddr = 0x48030000;
    Mmu.setFirstLevelDescMeta(peripheralBaseAddr, peripheralBaseAddr, peripheralAttrs);

    /* MMU configuration for Clock Module, PRM, GPIO0, UART0, I2C0, - Non bufferable| Non Cacheable */
    var peripheralBaseAddr = 0x44E00000;
    Mmu.setFirstLevelDescMeta(peripheralBaseAddr, peripheralBaseAddr, peripheralAttrs);


    var peripheralAttrs = {
    type : Mmu.FirstLevelDesc_SECTION, // SECTION descriptor
    tex: 1,
    bufferable : true, // bufferable
    cacheable : false, // cacheable
    shareable : true, // shareable
    noexecute : false, // not executable
    };

    /* MMU configuration for //PRUSS1 -Bufferable| Non Cacheable | Shareable */
    var peripheralBaseAddr = 0x4A300000; // Should it be bufferable??
    Mmu.setFirstLevelDescMeta(peripheralBaseAddr, peripheralBaseAddr, peripheralAttrs);


    var peripheralAttrs = {
    type : Mmu.FirstLevelDesc_SECTION, // SECTION descriptor
    tex: 0,
    bufferable : false, // bufferable
    cacheable : false, // cacheable
    shareable : false, // shareable
    noexecute : false, // not executable
    };

    /* MMU configuration for EDMA3 - Non bufferable| Non Cacheable */
    var peripheralBaseAddr = 0x49000000;
    Mmu.setFirstLevelDescMeta(peripheralBaseAddr, peripheralBaseAddr, peripheralAttrs);

    /* MMU configuration for L4 FAST CFG- Non bufferable| Non Cacheable */
    var peripheralBaseAddr = 0x4A000000;
    Mmu.setFirstLevelDescMeta(peripheralBaseAddr, peripheralBaseAddr, peripheralAttrs);

    /* MMU configuration for CPSW - Non bufferable| Non Cacheable */
    var peripheralBaseAddr = 0x4A100000;
    Mmu.setFirstLevelDescMeta(peripheralBaseAddr, peripheralBaseAddr, peripheralAttrs);

    var peripheralBaseAddr = 0x49a00000;
    Mmu.setFirstLevelDescMeta(peripheralBaseAddr, peripheralBaseAddr, peripheralAttrs);

    var peripheralBaseAddr = 0x49900000;
    Mmu.setFirstLevelDescMeta(peripheralBaseAddr, peripheralBaseAddr, peripheralAttrs);

    var peripheralBaseAddr = 0x49800000;
    Mmu.setFirstLevelDescMeta(peripheralBaseAddr, peripheralBaseAddr, peripheralAttrs);

    var peripheralBaseAddr = 0x40300000;
    Mmu.setFirstLevelDescMeta(peripheralBaseAddr, peripheralBaseAddr, peripheralAttrs);

    Program.linkTemplate = "linker_template.xdt";

    /* SemiHosting turn ON/OFF switch */
    utils.load("../semihosting.cfg");

  • Hi,

    My question is: Is there a option to coexist CSL and Starterware in PSDK based project? Of course without modification PSDK but only config file, etc. ====>Sorry, the Processor SDK RTOS was the latest development and the Sitara starterware folder contains legacy software and maintained there for reference only. In the DCAN_LoopbackExample_evmAM335x_armTestProject under pdk_am335x_1_0_15\packages\ti\starterware\examples\dcan\loopback\rtos, the cfg file also has an entry:

    /* Load the Dal package */
    var SDal = xdc.loadPackage('ti.starterware.dal');
    SDal.Settings.socType = devType;
    SDal.Settings.libProfile = "release";

    But it doesn't have the CSL library so there was no conflict. 

    Also, I tried the DCAN example I mentioned above, there is no issue I built. Then I intentionally added CSL library to the CCS project, I still don' have any issue.

     Added below:

    /*use CSL package*/
    var socType = "am335x";
    var Csl = xdc.loadPackage('ti.csl');
    Csl.Settings.deviceType = socType;

    Build:


    **** Build of configuration Debug for project DCAN_LoopbackExample_evmAM335x_armTestProject ****

    "C:\\ti\\ccs_8_3_0\\ccsv8\\utils\\bin\\gmake" -k -j 8 all -O

    Building file: "C:/ti/pdk_am335x_1_0_14/packages/ti/starterware/examples/dcan/loopback/rtos/am335x_app_dcan_evmam335x.cfg"
    Invoking: XDCtools
    "C:/ti/ccs_8_3_0/xdctools_3_51_01_18_core/xs" --xdcpath="C:/ti/bios_6_75_02_00/packages;C:/ti/pdk_am335x_1_0_14/packages;C:/ti/edma3_lld_2_12_05_30D/packages;C:/ti/ndk_3_40_01_01/packages;C:/ti/uia_2_30_01_02/packages;" xdc.tools.configuro -o configPkg -t gnu.targets.arm.A8F -p ti.platforms.evmAM3359 -r debug -c "C:/ti/ccs_8_3_0/ccsv8/tools/compiler/gcc-arm-none-eabi-7-2017-q4-major-win32" "C:/ti/pdk_am335x_1_0_14/packages/ti/starterware/examples/dcan/loopback/rtos/am335x_app_dcan_evmam335x.cfg"
    configuring am335x_app_dcan_evmam335x.xa8fg from package/cfg/am335x_app_dcan_evmam335x_pa8fg.cfg ...
    generating custom ti.sysbios library makefile ...
    Linking with library ti.starterware.board:../binary/board/lib/am335x-evm/a8/release/gcc/libboard.a
    Linking with library ti.starterware.soc:../binary/soc/lib/am335x-evm/a8/release/gcc/libsoc.a
    Linking with library ti.starterware.utils:../binary/utils/lib/am335x-evm/a8/release/gcc/libutils.a
    Linking with library ti.starterware.dal:../binary/dal/lib/am335x-evm/a8/release/gcc/libdal.a
    Linking with library ti.osal:./lib/tirtos/a8/release/ti.osal.aa8fg
    Linking with library ti.csl:./lib/am335x/a8/release/ti.csl.aa8fg
    Starting build of library sources ...
    making C:/ti/pdk_am335x_1_0_14/packages/ti/starterware/examples/dcan/loopback/rtos/src/sysbios/sysbios.aa8fg ...
    Build of libraries done.
    cla8fg package/cfg/am335x_app_dcan_evmam335x_pa8fg.c ...
    Finished building: "C:/ti/pdk_am335x_1_0_14/packages/ti/starterware/examples/dcan/loopback/rtos/am335x_app_dcan_evmam335x.cfg"

    Building target: "DCAN_LoopbackExample_evmAM335x_armTestProject.out"
    Invoking: GNU Linker
    "C:/ti/ccs_8_3_0/ccsv8/tools/compiler/gcc-arm-none-eabi-7-2017-q4-major-win32/bin/arm-none-eabi-gcc.exe" -mtune=cortex-a8 -marm -Dam3359 -DUSE_BIOS -DSOC_AM335X -DevmAM335x -DRTOS_BUILD -DAM335X_FAMILY_BUILD -Og -g -gdwarf-3 -gstrict-dwarf -Wall -MMD -MP -mfloat-abi=hard -Wl,-Map,"DCAN_LoopbackExample_evmAM335x_armTestProject.map" -nostartfiles -static -Wl,--gc-sections -L"C:/ti/bios_6_75_02_00/packages/gnu/targets/arm/libs/install-native/arm-none-eabi/lib/hard" -L"/packages/gnu/targets/arm/libs/install-native/arm-none-eabi/lib/fpu" -Wl,--defsym,STACKSIZE=0x1C000 -Wl,--defsym,HEAPSIZE=0x400 --specs=nano.specs -o"DCAN_LoopbackExample_evmAM335x_armTestProject.out" "./dcan_app.o" "./dma_utils.o" "./edma_utils.o" "./loopback_app_main.o" -Wl,-T"configPkg/linker.cmd" -Wl,--start-group -lgcc -lrdimon -lm -lnosys -lc -Wl,--end-group
    Finished building target: "DCAN_LoopbackExample_evmAM335x_armTestProject.out"

    C:/ti/pdk_am335x_1_0_14/packages/pdkAppImageCreate.bat C:/ti/pdk_am335x_1_0_14/packages C:/ti/ccs_8_3_0/ccsv8/tools/compiler/gcc-arm-none-eabi-7-2017-q4-major-win32 C:/ti/pdk_am335x_1_0_14/packages/MyExampleProjects/DCAN_LoopbackExample_evmAM335x_armTestProject/Debug DCAN_LoopbackExample_evmAM335x_armTestProject AM335x arm

    **** Build Finished ****

    In your case, when your new application contains both current PRSDK RTOS and legacy starterware, you have more RTOS libraries and DAL loaded and come with duplicated function definitions when linking, there is no way to resolve that. You need to recompile one library to remove the duplication.

    Regards, Eric

  • Thanks for check my case.

    Propably I'll end up with manually joined dcan.c from starterware to project.

    Best Regards

    Paweł