MATLAB与DSP(C6657)的TCP/IP通信实现

最近尝试使用从MATLAB端键入输入,将输入值传给DSP,DSP运算之后将结果传回MATLAB并显示。我所设置的PC的IP地址是192.168.2.101,DSP的IP地址是192.168.2.100,端口号是7。DSP作为server端,MATLAB作为client端。

  •  MATLAB的TCP/IP通信实现

我所要实现的功能函数有三个输入:T、fa、i,一个输出:H,都是double型的数,也就是每个数的大小是8个字节。从MATLAB端键入的代码及注释如下:

 

clear all      
t = tcpip('192.168.2.100',7, 'NetworkRole', 'client'); %前两个参数是远程主机(DSP)的ip地址和端口,最后一个参数要写MATLAB的NetworkRole     
fclose(t); %关闭TCP/IP      
t.inputbuffersize=1024; %设置输入缓冲区为1024b,缺省值为512b,根据自己传输的数据大小来调整,不要比传输的数据小      
t.outputbuffersize=1024; %设置输出缓冲区为1024b      
t.Timeout=30;%最长等待连接的时间      
set(t,'ByteOrder','littleEndian'); %设置为小端模式,DSP和MATLAB的字节序应一致避免麻烦     
buffer1=input('T='); %在MATLAB键入输入值      
buffer2=input('fa=');      
buffer3=input('i=');     
fopen(t); %连接TCP/IP对象     
tic %计时开始     
fwrite(t, buffer1,'double'); %将buffer1里的数据以'double'的格式写入t     
fwrite(t, buffer2,'double');     
fwrite(t, buffer3,'double');     
H=fread(t,1,'double'); %以'double'的格式从t里读出1个数据并写入H   
toc %计时结束    
format longE; %以LongE的格式显示    
fprintf('H=%f\n',H); %在MATLAB平台上显示输出值    
fclose(t); %关闭TCP/IP    
delete(t); %删除TCP/IP    

 

  • DSP的TCP/IP通信实现

我采用的DSP是TI公司的TMS320C6657,CCS采用的是5.5版本,通信例程是在TI官方的helloworld例程的基础上改写的。在编写程序之前,首先要确定自己导入的helloworld例程的products被正确设置,我截取我的例程采用的products如下图:

主要是XDCtools、MCSDK、NDK、SYS/BIOS相互之间以及它们与CCS之间的版本要匹配,TI官网给出了相关的版本要求,如果不满足要求,就会出现编译错误。一开始我没有发现这个问题,版本都是随机下载选择的,出现了很多奇奇怪怪搜索不到的错误,卡了好多天,很难受,大家如果嫌麻烦直接按我这个图上的版本配置就好。

下一步就是对helloworld例程的理解与修改,我采用的是TCP而非UDP,另外我用的是固定IP方式,而非DHCP。helloworld的代码我们主要关注的就是两个,一个是helloWorld.c,这个几乎是TCP/IP通信的模板代码,不管是什么TCP/IP的例程中都会有一个文件与这个文件几乎完全相同,里面主要是EVM_init、StackTest、NetworkOpen、NetworkClose、NetworkIPAddr、 ServiceReport这几个函数。另一个是udpHello.c,这是收发数据的代码。helloworld中还有一个cfg文件,我对它的功能搞得不是很清楚,这个文件我没有动,也没有影响最终的功能的实现。如果有哪位朋友懂的话,希望可以一起讨论下。helloWorld.c的代码与及注释如下,其中中文字体是我改动的地方:

#include <stdio.h> 
#include <math.h>  //这是我所实现的功能所要用到的库
#include <ti/ndk/inc/netmain.h>
/* BIOS6 include */
#include <ti/sysbios/BIOS.h>

/* Platform utilities include */
#include "ti/platform/platform.h"
#include "ti/platform/resource_mgr.h"

/* Platform Information - we will read it form the Platform Library */
platform_info  gPlatformInfo;


//---------------------------------------------------------------------------
// Title String
//
char *VerStr = "\nTCP/IP Stack 'Hello World!' Application\n\n";

// Our NETCTRL callback functions
static void   NetworkOpen();
static void   NetworkClose();
static void   NetworkIPAddr( IPN IPAddr, uint IfIdx, uint fAdd );

// Fun reporting function
static void   ServiceReport( uint Item, uint Status, uint Report, HANDLE hCfgEntry );

// External references
extern int dtask_udp_hello();

//---------------------------------------------------------------------------
// Configuration
//
char *HostName    = "tidsp";
char *LocalIPAddr = "192.168.2.100";    //DSP的IP地址
char *LocalIPMask = "255.255.255.0";    // 掩码
char *GatewayIP   = "192.168.2.101";    // 网关
char *PCStaticIP   = "192.168.2.101";   // PC的IP地址
char *DomainName  = "demo.net";         // Not used when using DHCP
char *DNSServer   = "0.0.0.0";          // Used when set to anything but zero

/*************************************************************************
 *  @b EVM_init()
 * 
 *  @n
 *
 *  Initializes the platform hardware. This routine is configured to start in 
 *   the evm.cfg configuration file. It
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值