物联网实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

物联网与信息系统前沿

实验报告

1120310217

邵孟旋

实验二

1.分析/examples/hello-world/下的程序

原码如下:

PROCESS宏完成两个功能:

(1) 声明一个函数,该函数是进程的执行体,即进程的thread函数指针所指的函数

(2) 定义一个进程结构体

AUTOSTART_PROCESSES宏实际上是定义一个指针数组,存放Contiki

系统运行时需自动启动的进程。

PT_THREAD宏用于声明一个protothread,即进程的执行主体。

PROCESS_BEGIN()

进程的主体函数从这里开始

PROCESS_END()

进程的主体函数从这里结束

2.实验过程及结果

编译hello_world

仿真节点的运行

实验三

1.程序分析:

UDP sever

初始化RPL DAG

//检查ADDR_MANUAL是否已经成功设置

uip_ds6_addr_add(&ipaddr, 0, ADDR_MANUAL);

root_if = uip_ds6_addr_lookup(&ipaddr);

if(root_if != NULL) {

rpl_dag_t *dag;

//将服务器的IP地址作为初始DAG的根

dag = rpl_set_root(RPL_DEFAULT_INSTANCE,(uip_ip6addr_t *)&ipaddr);

uip_ip6addr(&ipaddr, 0xaaaa, 0, 0, 0, 0, 0, 0, 0);

rpl_set_prefix(dag, &ipaddr, 64);

PRINTF("created a new RPL dag\n");

} else {

PRINTF("failed to create a new RPL DAG\n");

}

创建UDP连接

//向客户端的端口创建新的UDP连接

server_conn = udp_new(NULL, UIP_HTONS(UDP_CLIENT_PORT), NULL);

if(server_conn == NULL) {

PRINTF("No UDP connection available, exiting the process!\n");

PROCESS_EXIT();

}

udp_bind(server_conn, UIP_HTONS(UDP_SERVER_PORT));

PRINTF("Created a server connection with remote address "); PRINT6ADDR(&server_conn->ripaddr);

PRINTF(" local/remote port %u/%u\n", UIP_HTONS(server_conn->lport),

UIP_HTONS(server_conn->rport));

包的接受和处理

while(1) {

PROCESS_YIELD();

//如果有包

if(ev == tcpip_event) {

tcpip_handler();

} else if (ev == sensors_event && data == &button_sensor) { PRINTF("Initiaing global repair\n");

rpl_repair_root(RPL_DEFAULT_INSTANCE);

}

}

//如果有包,调用这个函数

static void

tcpip_handler(void)

{

char *appdata;

if(uip_newdata()) {

appdata = (char *)uip_appdata;

appdata[uip_datalen()] = 0;

//print the data of packet

PRINTF("DATA recv '%s' from ", appdata);

PRINTF("%d",

UIP_IP_BUF->srcipaddr.u8[sizeof(UIP_IP_BUF->srcipaddr.u8) - 1]);

PRINTF("\n");

}

UDP Client:

建立UDP连接

/* 远程主机的新连接 */

client_conn = udp_new(NULL, UIP_HTONS(UDP_SERVER_PORT), NULL);

if(client_conn == NULL) {

PRINTF("No UDP connection available, exiting the process!\n");

PROCESS_EXIT();

}

udp_bind(client_conn, UIP_HTONS(UDP_CLIENT_PORT));

PRINTF("Created a connection with the server ");

PRINT6ADDR(&client_conn->ripaddr);

PRINTF(" local/remote port %u/%u\n",

相关文档
最新文档