DSP 开发例程(5): tcp_server

目录

  • DSP 开发例程(5): tcp_server
    • 创建工程
    • 源码编辑
      • tcp_echo.c
      • helloWorld.c
    • 调试
    • 说明

DSP 开发例程(5): tcp_server

此例程实现在 EVM6678L 开发板上创建 TCP Server进程, 完成计算机与开发板之间的 TCP/IP 通信. 例程源码可从我的 gitee 仓库上克隆或下载. 点击 DSP 开发教程(0): 汇总查看其他例程说明.

创建工程

此例程在官方提供的UDP通信例程基础上修改.

  • Project Explorer 视图中, 右键选择: Import

在这里插入图片描述

  • 选择 Existing CCS Eclipse Projects, 点击 Next.

在这里插入图片描述

  • 点击 Browse, 选择 mcsdk_###_#\examples 所在目录, 勾选 helloworld_evmc6678l 工程, 勾选 Copy projects into workspace, 点击 Finish.
    在这里插入图片描述
  • 复制 mcsdk_###_#\examples\ndk\helloWorld 目录下的四个 .c 源文件.
    在这里插入图片描述- 选择刚导入的工程, 右键选择: Paste, 粘贴刚刚复制的四个 .c 源文件到此工程中. 在弹出的 Question 对话框中点击 Yes To All, 完成替换.

在这里插入图片描述
在这里插入图片描述

  • 将此工程重命名为: tcp_server.

在这里插入图片描述
在这里插入图片描述

源码编辑

tcp_echo.c

  • 新建名为 tcp_echo.c 的源文件.
    在这里插入图片描述

在这里插入图片描述

  • 文件内容如下:
#include <ti/ndk/inc/netmain.h>int dtask_tcp_echo(SOCKET s, UINT32 unused)
{struct timeval to;int I;char *pBuf;HANDLE hBuffer;(void)unused;// Configure our socket timeout to be 5 secondsto.tv_sec = 5;to.tv_usec = 0;setsockopt(s, SOL_SOCKET, SO_SNDTIMEO, &to, sizeof(to));setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, &to, sizeof(to));I = 1;setsockopt(s, IPPROTO_TCP, TCP_NOPUSH, &I, 4);for (;;){I = (int)recvnc(s, (void **)&pBuf, 0, &hBuffer);// If we read data, echo it backif (I > 0){if (send(s, pBuf, I, 0) < 0)break;recvncfree(hBuffer);}// If the connection got an error or disconnect, closeelsebreak;}fdClose(s);// Return "0" since we closed the socketreturn (0);
}

其中, dtask_tcp_echo() 完成 TCP 数据的收发.

这段代码可以在 ti\ndk_###_#\docs\spru524i.pdf 的 5.4.2 节 中找到.

helloWorld.c

  • 打开 helloWorld.c 文件.
  • 在其中添加 dtask_tcp_echo() 的外部声明.
extern int dtask_tcp_echo(SOCKET s, UINT32 unused);

在这里插入图片描述

  • 修改 NetworkOpen() 函数, 将 dtask_udp_hello() 函数句柄添加到守护进程中.
static void NetworkOpen()
{// Create our local serverhHello = DaemonNew( SOCK_STREAMNC, 0, 7, dtask_tcp_echo,OS_TASKPRINORM, OS_TASKSTKNORM, 0, 3 );
//    hHello = DaemonNew( SOCK_DGRAM, 0, 7, dtask_udp_hello,
//                       OS_TASKPRINORM, OS_TASKSTKNORM, 0, 1 );
}

在这里插入图片描述

  • 查看计算机的以太网IP, 将 开发板的IP 修改到同一个网段.(此例程中, 我的IP为192.168.0.11).
    在这里插入图片描述
    保存上述修改, 并编译工程.

调试

  • EVM6678L 开发板 通过网线与 计算机连接.
  • 连接仿真器.
  • 开发板上电, 导入程序并运行. 此时在 Console 窗口能看到如下信息.
    在这里插入图片描述
  • 打开 命令提示符 窗口, 运行 ping 命令, 查看与开发板的网络连接是否正常.
    在这里插入图片描述
  • 打开 tera term, 选择 TCP/IP连接, 修改 HostLocalIPAddr设置的地址, TCP端口设置为 7. (也可以使用 putty 或其他测试工具进行连接.)

在这里插入图片描述

  • 选择菜单: Setup | Terminal, 勾选 Local echo.
     wo'r
  • 在终端中输入一串字符后回车, 可以看到 开发板 TCP 服务进程回传的字符串.自此说明 TCP Server 能够正常运行.
    在这里插入图片描述

说明

  • DaemonNew() 的第三个参数为 监听端口, 我们可以修改它来指定服务器端口.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/128347.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习合集】模型设计之注意力机制动态网络 ->(个人学习记录笔记)

文章目录 注意力机制1. 注意力机制及其应用1.1 注意力机制的定义1.2 注意力机制的典型应用 2. 注意力模型设计2.1 空间注意力机制2.2 空间注意力模型2.3 通道注意力机制2.4 空间与通道注意力机制2.5 自注意力机制2.5 级联attention 动态网络1. 动态网络的定义2. 基于丢弃策略的…

jquery控制easyui中combobox、textbox显示隐藏

//combobox下拉框 $("#下拉框id.combo").hide();//textbox输入框 $("#输入框id.textbox").hide(); 参考网址&#xff1a; https://blog.csdn.net/Coldmood/article/details/128279727

PostgreSQL逻辑管理结构

1.数据库逻辑结构介绍 2.数据库基本操作 2.1 创建数据库 CREATE DATABASE name [ [ WITH ] [ OWNER [] user_name ] [ TEMPLATE [] template ] [ ENCODING [] encoding ] [ LC_COLLATE [] lc_collate ] [ LC_CTYPE [] lc_ctype ] [ TABLESPACE [] tablespace ] [ CONNECTION L…

Day17力扣打卡

打卡记录 参加会议的最多员工数&#xff08;拓扑排序 分类讨论&#xff09; 链接 计算内向基环树的最大基环&#xff0c;基环树基环为2的情况分类讨论。 class Solution { public:int maximumInvitations(vector<int> &favorite) {int n favorite.size();vector…

mac下的vscode配置编译环境

基础开发环境 创建Dockerfile文件&#xff0c;内容如下&#xff1a; FROM ubuntu:20.04RUN apt update & apt install make gcc cmake git ninja-build -y CMD [ "sleep", "infinity" ]创建docker-compose.yml文件&#xff0c;内容如下&#xff1a; …

4.多层感知机-3GPT版

#pic_center R 1 R_1 R1​ R 2 R^2 R2 目录 知识框架No.1 多层感知机一、感知机1、感知机2、训练感知机3、图形解释4、收敛定理5、XOR问题6、总结 二、多层感知机1、XOR2、单隐藏层3、单隐藏层-单分类4、为什么需要非线性激活函数5、Sigmoid函数6、Tanh函数7、ReLU函数8、多类分…

SDK是什么

SDK 是“Software Development Kit”&#xff08;软件开发工具包&#xff09;的缩写&#xff0c;它是一组用于开发特定软件应用、硬件平台、计算机系统或操作系统的开发工具的集合。SDK 通常包括一组开发工具、库、文档和示例代码&#xff0c;以帮助开发者更快地开发和部署应用…

SAML- 安全断言标记语言

一、概念 安全断言标记语言&#xff08;SAML&#xff09;是一种开放标准&#xff0c;用于在各方之间&#xff08;特别是身份提供商和服务提供商之间&#xff09;交换身份验证和授权数据。SAML 是一种基于XML的安全断言标记语言&#xff08;服务提供商用来做出访问控制决策的语句…

HTML标签、CSS介绍

标签的分类: 块级/行内 # 块级标签: 独占一行 h1~h6 p div """ 块儿级标签可以修改长宽. 行内标签不可以, 就算修改了也不会变化.块级标签内部可以嵌套任意的块级标签和行内标签. 特例: 是p标签虽然是块级标签 但是它只能嵌套行内标签 不能嵌套块级标签. 如…

linux安装apache并配置userid站点

目录 一、linux安装apache的方式 1、安装wget 2、下载CentOS 7的repo文件 3、更新镜像源 二、安装apache 1.通过命令直接安装apache(linux的软件包为httpd) 2.启动httpd服务 3.访问一下 三、apache配置文件 1.主配置文件 2.修改根目录 3.修改下端口 4.apache的工作…

华为OD面经Java

机试400分&#xff0c;部门流程与IT&#xff0c;base西安 分享面经攒人品 10.27 一面 深挖项目&#xff0c;面试官很友好&#xff0c;根据项目的每个技术点和场景来提问&#xff0c;比如项目中数据库数据量级有多大&#xff0c;什么时候会出现缓慢&#xff0c;如何解决的&…

BUUCTF 数据包中的线索 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 公安机关近期截获到某网络犯罪团伙在线交流的数据包&#xff0c;但无法分析出具体的交流内容&#xff0c;聪明的你能帮公安机关找到线索吗&#xff1f; 密文&#xff1a; 下载附件&#xff0c;解压得到一个.pcapng文…

【兔子王赠书第5期】ChatGPT速学通:文案写作+PPT制作+数据分析+知识学习与变现

文章目录 前言ChatGPT推荐图书作者简介内容简介推荐理由 粉丝福利尾声 前言 程序员如果有一天代码写不动了&#xff0c;还能干什么&#xff1f; 一位 80 后女程序员“兰猫”给出了她的答案——转型 AI 写手。兰猫从事程序员工作十余年&#xff0c;在繁重的工作压力下&#xf…

大数据毕业设计选题推荐-系统运行情况监控系统-Hadoop-Spark-Hive

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

目标检测YOLO实战应用案例100讲-基于多尺度特征融合与自适应网络的小目标检测

目录 前言 研究现状 深度学习研究现状 目标检测研究现状 研究现状存在的问题

NOIP2023模拟9联测30 总结

T1 一眼看去是水题&#xff0c;发现当 μ ( n ) \mu(n) μ(n) 不为零&#xff0c;就是 − 1 -1 −1&#xff0c;于是打了 miller_rabbin&#xff0c;又分解质因数&#xff08;其实可以不用 miller_rabbin&#xff09;。用时 20min。 T2 分析了性质&#xff0c;发现数字 6 6…

leetCode 2915. 和为目标值的最长子序列的长度 + 动态规划 +01背包 + 空间优化 + 记忆化搜索 + 递推

2915. 和为目标值的最长子序列的长度 - 力扣&#xff08;LeetCode&#xff09; 给你一个下标从 0 开始的整数数组 nums 和一个整数 target 。返回和为 target 的 nums 子序列中&#xff0c;子序列 长度的最大值 。如果不存在和为 target 的子序列&#xff0c;返回 -1 。子序列 …

ubuntu下vscode终端输出出现空白的问题

当终端 输出铺满后 再继续回车 会出现局部空白 这是vscode 的bug&#xff1f;有大佬知道解决办法的可以评论区留言。

Flutter 04 按钮Button和事件处理、弹框Dialog、Toast

一、按钮组件 1、按钮类型&#xff1a; 2、按钮实现效果&#xff1a; import package:flutter/material.dart;void main() {runApp(const MyApp()); }class MyApp extends StatelessWidget {const MyApp({Key? key}) : super(key: key);overrideWidget build(BuildContext co…

十一、浅谈C++中的几种构造函数

https://blog.csdn.net/zxc024000/article/details/51153743?utm_sourcecopy