Part Number: TM4C1294NCPDT
Other Parts Discussed in Thread: SYSBIOS
Tool/software: Code Composer Studio
I'm trying to manually configure my application using C code and Cfg*() functions (as described in spru523k, section 2.1), but when I ran my code, the console showed the message:
ti.sysbios.family.arm.m3.Hwi: line 143: E_alreadyDefined: Hwi already defined: intr# 56
00000.000 ExecStart: Already Open
00000.000 mmFree: Double Free
00000.000 mmFree: Double Free
00000.000 mmFree: Double Free
00000.000 mmFree: Double Free
00000.000 mmFree: Double Free
00000.000 mmFree: Double Free
00000.000 mmFree: Double Free
00000.000
NC_NetStart: WARNING: Boot thread has not completed!
00000.000 mmFree: Double Free
00000.000 mmFree: Double Free
00000.000 NodeTreeFree: Null endpoints
00000.000 mmFree: Double Free
00000.000 mmFree: Double Free
and the function NC_NetStart() returned -1. Can anyone help me to solve this?
I'm attaching a print of the ROV -> Hwi screen and my code:
#include <ti/sysbios/knl/Clock.h>
#include <ti/ndk/inc/netmain.h>
void initIP(void* hCfg);
void initDHCP(void *hCfg);
void networkOpen();
void networkClose();
void networkIPAddr(uint32_t IPAddr, uint32_t IfIdx, uint32_t fAdd);
void serviceReport(uint32_t item, uint32_t status, uint32_t code, HANDLE hCfgEntry);
extern void llTimerTick();
const char *hostName = "tisoc";
const char *LocalIPAddr = "192.168.1.14";
const char *LocalIPMask = "255.255.255.0";
const char *GatewayIP = "192.168.1.1";
const char *DomainName = "demo.net";
void NDKManagerTaskFxn()
{
HANDLE hCfg;
int rc;
Clock_Params clockParams;
Clock_Handle ndkClockHandle;
/* Create the NDK heart beat */
Clock_Params_init(&clockParams);
clockParams.startFlag = TRUE;
clockParams.period = 1000;
ndkClockHandle = Clock_create((Clock_FuncPtr)llTimerTick, clockParams.period,
&clockParams, NULL);
if (ndkClockHandle == NULL) {
return;
}
rc = NC_SystemOpen(NC_PRIORITY_LOW, NC_OPMODE_INTERRUPT);
if(rc) {
return;
}
hCfg = CfgNew();
if(!hCfg) {
goto final;
}
initIP(hCfg);
// initDHCP(void *hCfg);
// Configure low priority task stack size
rc = 2048;
CfgAddEntry(hCfg, CFGTAG_OS, CFGITEM_OS_TASKSTKLOW, CFG_ADDMODE_UNIQUE,
sizeof(uint32_t), (unsigned char *)&rc, NULL);
// Configure normal priority task stack size
rc = 2048;
CfgAddEntry(hCfg, CFGTAG_OS, CFGITEM_OS_TASKSTKNORM, CFG_ADDMODE_UNIQUE,
sizeof(uint32_t), (unsigned char *)&rc, NULL);
// Configure high priority task stack size
rc = 2048;
CfgAddEntry(hCfg, CFGTAG_OS, CFGITEM_OS_TASKSTKHIGH, CFG_ADDMODE_UNIQUE,
sizeof(uint32_t), (unsigned char *)&rc, NULL);
// Boot system
do {
rc = NC_NetStart(hCfg, networkOpen, networkClose, networkIPAddr);
} while(rc > 0);
// Shutting down...
CfgFree(hCfg);
final:
NC_SystemClose();
}
void initIP(void* hCfg)
{
CI_IPNET NA;
CI_ROUTE RT;
// hostname
CfgAddEntry(hCfg, CFGTAG_SYSINFO, CFGITEM_DHCP_HOSTNAME, 0,
strlen(hostName), (unsigned char *)hostName, NULL);
// Ip and mask
bzero(&NA, sizeof(NA));
NA.IPAddr = inet_addr(LocalIPAddr);
NA.IPMask = inet_addr(LocalIPMask);
strcpy(NA.Domain, DomainName);
NA.NetType = 0;
CfgAddEntry(hCfg, CFGTAG_IPNET, 1, 0, sizeof(CI_IPNET), (UINT8 *)&NA, 0);
// Gateway
bzero(&RT, sizeof(RT));
RT.IPDestAddr = 0;
RT.IPDestMask = 0;
RT.IPGateAddr = inet_addr(GatewayIP);
CfgAddEntry(hCfg, CFGTAG_ROUTE, 0, 0, sizeof(CI_ROUTE), (UINT8 *)&RT, 0);
// DNS
IPN IPTmp;
IPTmp = inet_addr("8.8.8.8");
CfgAddEntry( hCfg, CFGTAG_SYSINFO, CFGITEM_DHCP_DOMAINNAMESERVER, 0, sizeof(IPTmp),
(unsigned char *)&IPTmp, 0 );
}
void initDHCP(void *hCfg)
{
CI_SERVICE_DHCPC dhcpc;
unsigned char DHCP_OPTIONS[] = { DHCPOPT_SUBNET_MASK };
// hostname
CfgAddEntry(hCfg, CFGTAG_SYSINFO, CFGITEM_DHCP_HOSTNAME, 0,
strlen(hostName), (unsigned char *)hostName, NULL);
// Usa DHCP para obter IP na interface 1
memset(&dhcpc, 0, sizeof(dhcpc));
dhcpc.cisargs.Mode = CIS_FLG_IFIDXVALID;
dhcpc.cisargs.IfIdx = 1;
dhcpc.cisargs.pCbSrv = &serviceReport;
dhcpc.param.pOptions = DHCP_OPTIONS;
dhcpc.param.len = 1;
CfgAddEntry(hCfg, CFGTAG_SERVICE, CFGITEM_SERVICE_DHCPCLIENT, 0,
sizeof(dhcpc), (unsigned char *)&dhcpc, NULL);
}
void networkOpen()
{
}
void networkClose()
{
}
void networkIPAddr(uint32_t IPAddr, uint32_t IfIdx, uint32_t fAdd)
{
}
void serviceReport(uint32_t item, uint32_t status, uint32_t code, HANDLE hCfgEntry)
{
}
Thanks in advance,
Ronan
