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