教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 建筑文档 >

自己做的ARM的UDP通信实验 - 图文(3)

来源:网络收集 时间:2025-09-13
导读: 6) 在Startup.s文件的ResetInit子程序中,修改存储器接口Bank3总线配置,如程序清单 程序清单 3 存储器接口Bank3总线配置 LDR R0, =BCFG3 ;设置BCFG3寄存器 LDR R1, =0x10001460 STR R1, [R0] 4.2 实验程序 4.2.1

6) 在Startup.s文件的ResetInit子程序中,修改存储器接口Bank3总线配置,如程序清单

程序清单 3 存储器接口Bank3总线配置

LDR R0, =BCFG3 ;设置BCFG3寄存器 LDR R1, =0x10001460 STR R1, [R0] 4.2 实验程序

4.2.1

宏定义

首先对程序进行初始化宏定义,如程序清单 4

程序清单 4 初始化宏定义

#include \

#include \void Timer1_Init(void);

#define TASK_START_ID 0 #define TASK_1_ID 1 #define TASK_2_ID 2 #define TASK_3_ID 3 #define TASK_4_ID 4 #define TASK_5_ID 5 #define TASK_6_ID 6

#define TASK_START_PRIO 10 #define TASK_1_PRIO 11 #define TASK_2_PRIO 12 #define TASK_3_PRIO 13 #define TASK_4_PRIO 14 #define TASK_5_PRIO 15 #define TASK_6_PRIO 16

10

#define MSG_QUEUE_SIZE 20

OS_EVENT OS_EVENT OS_EVENT OS_EVENT

OS_STK task0_stack[3000]; OS_STK task1_stack[1000]; OS_STK task2_stack[2000]; OS_STK task3_stack[1000]; OS_STK task4_stack[2000];

4.2.2

RTL8019AS监听任务

*RecPackedFlag;

*RecBufOverFlowFlag; *RecTcpPackedFlag; *RecPingPackedFlag;

网络控制器监听程序,如程序清单 5

程序清单 5 网卡监听任务

void TaskB(void *pdata) //重要的监听RTL8019AS任务 {

void * UdpTemp; uint8 eer; while (1) { }

11

UdpTemp=OSQPend(RecUdpQFlag,0,&eer);

if(eer==OS_NO_ERR)

Udp_Process((Rec_Ptr *)UdpTemp); eer=eer; { }

}

4.2.3 UDP通信程序

UDP通信程序见程序清单 6

程序清单 6 UDP服务器

void TaskD(void *pdata) {

uint8 add[36]={\当接收到“A”时发送的数据

uint8 add1[10]={\当出错是发送的数据 uint8 rec_buffer[100]; //发送缓存区 SOCKET s;

uint8 couter_byte=5; //重复发送的次数

int rec_coute,send_coute; uint16 iii;

struct sockaddr servaddr,clientaddr;

OSTimeDly(60);

servaddr.sin_family=0; //设置客户机IP servaddr.sin_addr[0]=172; servaddr.sin_addr[1]=30; servaddr.sin_addr[2]=172; servaddr.sin_addr[3]=125;

servaddr.sin_port=1026; //设置服务器端口号

OSTimeDly(60);

s=*socket( 0, SOCK_DGRAM, UDP_PROTOCOL);//建clientaddr.sin_family=0; //设置本地IP

立SOCKET

clientaddr.sin_addr[0]=172; clientaddr.sin_addr[1]=30; clientaddr.sin_addr[2]=172; clientaddr.sin_addr[3]=77;

clientaddr.sin_port=1025; //设置本地监听端口号 iii=bind(

(SOCKET

12

* )&s, (struct

sockaddr*)&clientaddr,sizeof(clientaddr)); //绑定服务器地址

while (1) {

rec_coute=recvfrom( s, rec_buffer, 100, 0, (struct

sockaddr*)&servaddr, &iii ); //接收数据

if(rec_coute>0) { }

while(couter_byte!=0) //循环发送数据 {

send_coute=sendto(s,

if(send_coute==34) OSTimeDly(40); send_coute=sendto(s,

add1,

9,

0,

(struct

add,

34,

0,

(struct

if(rec_buffer[0]=='A') //如果第一个数据是“A”

couter_byte=5;

send_coute=sendto(s, rec_buffer, rec_coute, 0, (struct else

sockaddr*)&servaddr, sizeof(servaddr) ); //把接收的数据返回

sockaddr*)&servaddr, sizeof(servaddr) );

}

}

else

sockaddr*)&servaddr, sizeof(servaddr) ); //出错后发送的数据

OSTimeDly(40); couter_byte--;

}

13

4.2.4 创建系统任务并初始化

创建系统任务并初始化如程序清单 7

程序清单 7 系统任务

void task0(void *pdata)

{ /*在第1个任务中设置定时器0及中断*/ UBYTE iii;

#if OS_CRITICAL_METHOD == 3 OS_CPU_SR cpu_sr;

#endif

TargetInit();

OSTaskCreateExt(TaskB,

//

重要

的监听

RTL8019AS任务

(void *)0, &task1_stack[999], TASK_1_PRIO, TASK_1_ID, &task1_stack[0], 1000, (void *)0, 0);

OSTaskCreateExt(TaskD, //接受数据和发送数据 (void *)0, &task3_stack[999], TASK_3_PRIO, TASK_3_ID, &task3_stack[0], 1000, (void *)0, 0);

14

…… 此处隐藏:750字,全部文档内容请下载后查看。喜欢就下载吧 ……
自己做的ARM的UDP通信实验 - 图文(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/438410.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)