Other Parts Discussed in Thread: SYSBIOS
Thread 中讨论的其他器件:SYSBIOS
工具/软件:TI-RTOS
你好、
我已经使用了示例程序"Nimu_BasicExample_bbbAM335x_armExampleProject"并对其进行了修整、因此我在 TCP 端口7上给自己发送了一个很好的"hello"、效果很好。
我有一个单独的程序正在运行、我正在根据"MCSPI_SlaveMode_MasterExample_bbbAM335x_armExampleProject"从 SPI1总线读取传感器数据、该程序效果很好。
尝试将在我的 Nimu 示例中工作的内容集成到我的 SPI 示例中时、我遇到了一些问题。
实际上、我在编译合并的项目时没有警告或错误、它会被 BBB 下载到。 问题是、当它尝试运行时、它表示它无法打开套接字、并且所有内容都崩溃。 我实际上已经将我的所有网络代码从程序中取出、程序仍然崩溃。
以下是我工作的 NIMU 代码供参考、以及我尝试将其放入 SPI 代码中的代码:
/*
*版权所有(C) 2015 Texas Instruments Incorporated - http://www.ti.com/
*
*
*以源代码和二进制形式重新分发和使用、有无
*如果满足以下条件、则允许进行修改
符合*:
*
*源代码的重新分发必须保留上述版权
*注意、此条件列表和以下免责声明。
*
*二进制形式的再发行必须复制上述版权
*请注意、中的此条件列表和以下免责声明
*随提供的文档和/或其他材料
*分发。
*
*德州仪器公司的名称和名称均不相同
*其贡献者可用于认可或推广衍生产品
*未经特定的事先书面许可。
*
*本软件由版权所有者和贡献者提供
*"按原样"以及任何明示或暗示的保证、包括但不包括
*仅限于对适销性和适用性的暗示保证
*一项特定目的不予承认。 在任何情况下、版权均不得
*所有者或贡献者应对任何直接、间接、偶然或
*特殊、惩戒性或后果性损害(包括但不包括)
*仅限于采购替代货物或服务;丧失使用、
*数据或利润;或业务中断)
*责任理论、无论是合同责任、严格责任还是侵权行为
*(包括疏忽或其他)因使用而以任何方式产生
*、即使被告知可能会发生此类损坏。
*
*
/*==================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== *
/*包含文件*/
/*==================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== *
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
/* UART 头文件*/
#include
#include
#include
extern char * LocalIPAddr;
/*启用以下宏以在 IO 控制台上打印*/
//#define IO_console
#ifndef IO_console
#define NIMU_log UART_printf
其他
#define NIMU_log printf
#endif
/*==================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== *
/*宏*/
/*==================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== *
/** CPSW 端口1*/的 PHY 地址
#define EMAC_CPSW_PORT0_PHY_ADDR_EVM 0
/** CPSW 端口1*/的 PHY 地址
#define EMAC_CPSW_Port1_PHY_ADDR_EVM 1.
#define MAX_TABLE 条目3.
/*==================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== *
/*全局变量*/
/*==================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== *
/** EIP 的任务句柄*/
Task_handle main_task;
静态 int nimu_device_index = 0U;
NIMU_DEVICE_TABLE 项 NIMUDeviceTable[MAX_TABLE 项];
void TaskFxn (UArg a0、UArg A1);
extern int CpswEmacInit (STKEVENT_Handle hEvent);
/**
*\name main
*\brief 主功能
*\param none
*\不返回任何内容
*
*
int main()
{
/*呼叫板初始化函数*/
board_initCfg boardCfg;
Task_Params taskParams;
EMAC_HwAttrs_V4 cfg;
boardCfg = Board_init_PINMUX_CONFIG |
Board_init_module_clock | Board_init_uart_stdio;
board_init (boardCfg);
/*芯片配置 MII/RMII 选择*/
SOCCtrlCpswPortMacModeSelect (1、Ethernet_MAC_TYPE_MII);
SOCCtrlCpswPortMacModeSelect (2、Ethernet_MAC_TYPE_MII);
EMAC_socGetInitCfg (0、&cfg);
cfg.port[0].phy_addr = EMAC_CPSW_PORT0_PHY_ADDR_EVM;
cfg.port[1].phy_addr = EMAC_CPSW_PORT0_PHY_ADDR_EVM;
cfg.macModeFlags = EMAC_CPSW_CONFIG_MODEFLG_FULLDUPLEX;
EMAC_socSetInitCfg (0、&cfg);
Task_Params_init (&taskParams);
taskParams.priority = 1;
taskParams.STACKSIZE = 0x1400;
main_task = Task_create (TaskFxn、&taskParams、NULL);
NIMUDeviceTable[NIMU_DEVICE_index++].init =&CpswEmacInit;
NIMUDeviceTable[NIMU_DEVICE_index].init = NULL;
BIOS_start();
返回-1;
}
/**
*\name TaskFxn
*\brief 执行 EIP 初始化的任务
*\param a0
*\param A1
*\不返回任何内容
*
*
空 TaskFxn (UARg a0、UARg A1)
{
NIMU_log ("\n\rSYS/BIOS EtherNet/IP (CPSW)示例应用、EVM IP 地址:%s\n\r\n、LocalIPAddr);
套接字 s = invalid_socket;
struct sockaddr_in sin1;
char *pBuf = 0;
结构时间值超时;
//为此任务分配文件描述符环境
fdOpenSession((Handle)Task_sele());
printf ("\n==启动 TCP 回显客户端测试=\n");
//创建测试套接字
S =套接字(AF_iNet、SOCK_STREAM、IPPROTO_TCP);
if (s =invalid_socket)
{
printf ("失败的套接字创建(%d)\n"、fdError());
离开;
}
否则{
printf ("创建的套接字\n");
}
char * ipaddr ="192.168.1.6";
//准备连接地址
bzero (&sin1、sizeof (struct sockaddr_in)));
Sin1.Sin_Family = AF_iNet;
sin1.sin addr.s_addr = inet_addr (ipaddr);
sin1.sin_port = htons (7);
//将 Tx 和 Rx 超时配置为5秒
timeout.tv_sec = 5;
timeout.tv_usec = 0;
setsockopt( s、SOL_socket、SO_SNDTIMEO、&timeout、sizeof( timeout ));
setsockopt( s、SOL_socket、SO_RCVTIMEO、&TIMEOUT、sizeof( timeout ));
//连接套接字
if (connect( s,(PSA)&sin1, sizeof (sin1))<0)
{
printf ("连接失败(%d)\n"、fdError());
离开;
}
否则{
printf ("已连接\n");
}
//分配一个有效的缓冲区
if (!(pBuf = malloc( 4096)))
{
printf ("温度缓冲区分配失败\n");
离开;
}
//用测试模式填充缓冲区
// for (i=0;i<4096;i++)
*(pBuf+0)=(char)'h';
*(pBuf+1)=(char)'e';
*(pBuf+2)=(char)'l';
*(pBuf+3)=(char)'l';
*(pBuf+4)=(char)'o';
//发送缓冲区
if (send( s、pBuf、5、0 )<0)
{
printf ("发送失败(%d)\n"、fdError());
离开;
}
否则{
printf ("已发送");
}
休假:
if (pBuf)
FREE( pBuf );
if (s!= invalid_socket)
fdClose (s);
printf ("= End TCP Echo Client Test =\n\n");
//为此任务释放文件描述符环境
fdCloseSession((Handle)Task_sele());
#ifdef Nimu_FTP_app
ftpserver_init();
#endif
}