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.

Combining UDPEcho and UartConsole

Other Parts Discussed in Thread: SYSBIOS

I am using CCS Version: 6.1.0.00104  and a TM4C1294XL evaluation board.  I can download the two programsUDPEcho and UARTConsole and each one by itself work perfectly.   These are the TI examples. The UDP echos and the uart console prints as it should.  I tried putting the console program inside the UDPecho.c and updated all the includes and support files from uartconsole.  I modified the udpecho.cfg to include the uart console config requirements.  When I compile the programs the first thing I noticed was that only the UDP files were copied to the Debug/configpkg/package/cfg.  When I compile the program I get the following errors.

unresolved symbol ti_sysbios_knl_Swi_create, first referenced inC:/ti/tirtos_tivac_2_14_00_10/packages/ti/drivers/lib/drivers_tivaware.aem4f<EMACSnow.oem4f>

unresolved symbol ti_sysbios_knl_Swi_delete, first referenced in :/ti/tirtos_tivac_2_14_00_10/packages/ti/drivers/lib/drivers_tivaware.aem4f<EMACSnow.oem4f>

unresolved symbol ti_sysbios_knl_Swi_post__E, first referenced in:/ti/tirtos_tivac_2_14_00_10/packages/ti/drivers/lib/drivers_tivaware.aem4f<EMACSnow.oem4f>

You can see by the errors I am using tirtos_tivac_2_14_00_10.  The following is what is in my config file.  I have no idea what causes these errors.

/*
* Copyright (c) 2015, Texas Instruments Incorporated
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of Texas Instruments Incorporated nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

/*
* ======== uartconsole.cfg ========
*/

/* ================ General configuration ================ */
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 Main = xdc.useModule('xdc.runtime.Main');
var Memory = xdc.useModule('xdc.runtime.Memory');
var System = xdc.useModule('xdc.runtime.System');
var Text = xdc.useModule('xdc.runtime.Text');

var Task = xdc.useModule('ti.sysbios.knl.Task');
var Hwi = xdc.useModule('ti.sysbios.hal.Hwi');
var Load = xdc.useModule('ti.sysbios.utils.Load');
var Ip = xdc.useModule('ti.ndk.config.Ip');
var Udp = xdc.useModule('ti.ndk.config.Udp');
var Global = xdc.useModule('ti.ndk.config.Global');
var BIOS = xdc.useModule('ti.sysbios.BIOS');
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/* ================ General configuration ================ */


//var Clock = xdc.useModule('ti.sysbios.knl.Clock');
/*
* Program.stack is ignored with IAR. Use the project options in
* IAR Embedded Workbench to alter the system stack size.
*/
if (!Program.build.target.$name.match(/iar/)) {
/*
* Reducing the system stack size (used by ISRs and Swis) to reduce
* RAM usage.
*/
Program.stack = 2048;
}

/*
* Comment this line to allow module names to be 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 = 2;

/* ================ System configuration ================ */
var SysCallback = xdc.useModule('xdc.runtime.SysCallback');
SysCallback.abortFxn = "&UARTUtils_systemAbort";
SysCallback.putchFxn = "&UARTUtils_systemPutch";
SysCallback.readyFxn = "&UARTUtils_systemReady";
System.SupportProxy = SysCallback;

/* ================ BIOS configuration ================ */
/*
* Disable unused BIOS features to minimize footprint.
* This example uses Tasks but not Swis or Clocks.
*/
//var BIOS = xdc.useModule('ti.sysbios.BIOS');
BIOS.libType = BIOS.LibType_Custom;
BIOS.swiEnabled = false;
BIOS.logsEnabled = true;
BIOS.assertsEnabled = true;

BIOS.heapSize = 0x800;

/* Runtime stack checking is performed */
Task.checkStackFlag = true;
Hwi.checkStackFlag = true;

/* Reduce the number of task priorities */
Task.numPriorities =16;

/* ================ Task configuration ================ */
var taskParams = new Task.Params();
taskParams.instance.name = "console";
taskParams.stackSize = 1536;
Program.global.console = Task.create("&consoleFxn", taskParams)
/* ================ System configuration ================ */
var SysMin = xdc.useModule('xdc.runtime.SysMin');
System.SupportProxy = SysMin;

/* Runtime stack checking is performed */
Task.checkStackFlag = true;
Hwi.checkStackFlag = true;

/* Enable Semihosting for GNU targets to print to CCS console */
if (Program.build.target.$name.match(/gnu/)) {
var SemiHost = xdc.useModule('ti.sysbios.rts.gnu.SemiHostSupport');
};
/* ================ NDK configuration ================ */
var Ndk = xdc.loadPackage('ti.ndk.config');
var Global = xdc.useModule('ti.ndk.config.Global');
var Ip = xdc.useModule('ti.ndk.config.Ip');
var Udp = xdc.useModule('ti.ndk.config.Udp');
BIOS.heapSize = 20480;
Task.idleTaskStackSize = 768;

Global.IPv6 = false;
Global.stackLibType = Global.MIN;
Global.networkOpenHook = "&netOpenHook";

/* automatically call fdOpen/CloseSession for our sockets Task */
Global.autoOpenCloseFD = true;

Global.pktSizeFrameBuf = 1536;

Global.pktNumFrameBufs = 10;
Global.memRawPageCount = 6;
Global.ndkThreadStackSize = 1536;
Global.lowTaskStackSize = 1024;
Global.normTaskStackSize = 1024;
Global.highTaskStackSize = 1024;
/* ================ Logging configuration ================ */
var LoggingSetup = xdc.useModule('ti.uia.sysbios.LoggingSetup');
LoggingSetup.loggerType = LoggingSetup.LoggerType_IDLE;
LoggingSetup.loadLogging = false;
var LoggerIdle = xdc.useModule('ti.uia.sysbios.LoggerIdle');
LoggerIdle.bufferSize = 1024;
LoggerIdle.transportFxn = "&USBCDCD_LoggerIdle_sendData";
LoggerIdle.transportType = LoggerIdle.TransportType_USB;

/* ================ Driver configuration ================ */
var TIRTOS = xdc.useModule('ti.tirtos.TIRTOS');
TIRTOS.useGPIO = true;
TIRTOS.useEMAC = true;
TIRTOS.useUART = true;

  • Donald,

    In your config file can you try changing this:

    BIOS.swiEnabled = false;

    to this:

    BIOS.swiEnabled = true;

    As is, Swi support is being disabled in the config. But I can see that software interrupts are used by the EMAC driver (in ti/drivers/emac/EMACTiva.c).

    Does changing this line make this error go away?

    Thanks,
    Scott

  • I have been working for three days on this problem and my gratitude for your solution =true:
  • I don't know if I can ask another question here but when I compile the program I get the following warning.

    #174-D external/internal linkage conflict with previous declaration

    When I click on the error it goes to the following in socket.h. I have read about this . It has something to do about using external and static. In the UartUtils.c and UartUtils.h both are used, but these are uart not socket users. With this warning when I transfer data over UDP the first message goes through, but the second message fails because it says the host, which is this device closed the port.

    Again I am using UDPEcho and Uart console virtually unchanged. The UDPEcho used by itself doesn't give this warning and it works with no failures.

    Any help would be appreciated.

    /*
    * ======== close ========
    */
    static inline int close(int sockfd)
    {
    return fdClose((SOCKET)sockfd);
    }