AOTS实验报告材料.docx

上传人:b****6 文档编号:3238859 上传时间:2022-11-20 格式:DOCX 页数:49 大小:1.21MB
下载 相关 举报
AOTS实验报告材料.docx_第1页
第1页 / 共49页
AOTS实验报告材料.docx_第2页
第2页 / 共49页
AOTS实验报告材料.docx_第3页
第3页 / 共49页
AOTS实验报告材料.docx_第4页
第4页 / 共49页
AOTS实验报告材料.docx_第5页
第5页 / 共49页
点击查看更多>>
下载资源
资源描述

AOTS实验报告材料.docx

《AOTS实验报告材料.docx》由会员分享,可在线阅读,更多相关《AOTS实验报告材料.docx(49页珍藏版)》请在冰豆网上搜索。

AOTS实验报告材料.docx

AOTS实验报告材料

 

计算机科学与技术学院、软件学院

学生实验报告

 

实验题目:

基于ATOS平台的物联网实验

 

学生:

指导教师:

专业班级:

 

提交日期:

实验一LED组件

1.1实验要求

绿灯一直处于熄灭的状态,红灯不停闪烁(注意:

工具箱提供的代码有bug,对于基站节点LED_BLUE->红灯LED_YELLOW->绿灯ON和OFF逻辑相反)

1.2实验思路

将绿灯状态改为OFF,红灯通过时间延迟控制其的亮灭。

1.3实验关键代码

/**

LED示例程序的实现模块,简单的点亮3个LED灯

date2010-1

*/

moduleLedM

{

usesinterfaceBoot;

}

implementation

{

/**LED灯演示

*/

taskvoidDemoLed()

{

/**目前节点上提供两个LED灯

LED_BLUE->蓝灯

LED_YELLOW->黄灯

*/

inti,j;

while

(1)

{

for(i=0;i<1000;i++)

for(j=0;j<500;j++);

LED_BLUE_OFF;/*熄灭蓝色LED灯*/

LED_YELLOW_OFF;/*点亮黄色LED灯*/

for(i=0;i<1000;i++)

for(j=0;j<500;j++);

LED_BLUE_ON;/*熄灭蓝色LED灯*/

LED_YELLOW_OFF;/*点亮黄色LED灯*/

}

}

/**启动事件处理函数,在LED.nc已经关联到MainC.Boot接口

系统启动后会调用此函数

*/

eventvoidBoot.booted()

{

postDemoLed();

}

}

1.4实验截图

1.5实验心得

通过这次实验,掌握了对LED的简单控制,受益匪浅,并且对此次实验的运作过程开始了解。

 

实验二定时器组件

1.1实验要求

通过定时器让绿色灯闪烁,并且闪烁三次后停止闪烁。

1.2实验思路

设置一个变量,在计时器每计数一次自加一次,加到三时,停止计时器。

1.3实验关键代码

#defineDBG_LEV5

moduleTimerLedM

{

usesinterfaceBoot;

/*Timer为系统接口TMilli指明了定时器的精度为毫秒*/

usesinterfaceTimerasTimer1;/*as关键字为接口别名*/

usesinterfaceTimerasTimer2;

}

implementation

{

/**任务:

切换黄色LED灯*/

inti=0;

/**启动事件处理函数,在TimerLed.nc已经关联到MainC.Boot接口

系统启动后会调用此函数

*/

eventvoidBoot.booted()

{

/**定时器1:

持续工作,每隔1s触发一次*/

callTimer1.startPeriodic(1000);

/**定时器2:

持续工作,每隔3s触发一次*/

//callTimer2.startPeriodic(5000);

}

/**定时器1的事件处理函数*/

eventvoidTimer1.fired()

{

/**事件处理中直接切换蓝色LED灯*/

//ADBG(5,"ledbluetoggle.\r\n");

//LED_BLUE_TOGGLE;

ADBG(5,"ledyellowtoggle.\r\n");

//postToggleLedYellow();

LED_YELLOW_TOGGLE;

i=i+1;

if(i==3)callTimer1.stop();//通过stop函数使定时器停止

}

/**定时器2的事件处理函数*/

eventvoidTimer2.fired()

{

//ADBG(5,"ledyellowtoggle.\r\n");

//postToggleLedYellow();

}

}

1.4实验截图

1.5实验心得

通过此次实验,加强了我对代码的思考,更加了解定时器函数的使用。

 

实验三串口调试

1.1实验要求

通过级别控制,使得某些调试语句没有被输出到串口。

1.2实验思路

默认的ADBG_LEV为3000,将语句中的DBG_LEV参数改为比默认的ADBG_LEV小即可

1.3实验关键代码

/**

串口调试程序的实现模块

date

*/

/*定义调试级别,参加Makefile的ADBG_LEVEL定义,设置大于等于ADBG_LEVEL*/

#defineDBG_LEV3000

moduleSerialDebugM

{

usesinterfaceBoot;

}

implementation

{

/**任务:

通过串口打印信息来调试*/

taskvoidDebugSerial()

{

uint8_tnum1=0x39;

uint32_tnum2=0x12345678;

floatfloat1=123.1234;

/**ADBG,格式类似于printf,

第一个参数为调试等级,可以参见tos/lib/common/antdebug.h

*/

/**打印字符和字符串*/

ADBG(DBG_LEV,"\r\n\r\nDEMOofSerialDebug\r\n",'x');

ADBG(DBG_LEV,"1.Thisisastring,andthisischar'%c'\r\n",'x');

/**打印8位的数字*/

ADBG(DBG_LEV,"2.NUM1:

HEX=0x%x,DEC=%d\r\n",(int)(num1),(int)(num1));

/**打印32位数字*/

ADBG(2000,"2.NUM2:

HEX=0x%lx,DEC=%ld\r\n",(uint32_t)(num2),(uint32_t)

(num2));

/**打印浮点数*/

ADBG(DBG_LEV,"3.FLOAT:

%f\r\n",float1);

}

/**启动事件处理函数,在SerialDebug.nc已经关联到MainC.Boot接口

系统启动后会调用此函数

*/

eventvoidBoot.booted()

{

postDebugSerial();

}

}

1.4实验截图

图1未屏蔽前

图2屏蔽后

1.5实验心得

此次实验加深了我对串口的了解与使用,是一次非常好的实验材料,受益匪浅。

 

实验四串口通信

1.1实验要求

实现一个串口实验,在串口助手中实现回显的功能。

(键盘键入的任何容回车后显示在串口助手的终端)

1.2实验思路

直接在原有的UartStream.receivedByte函数基础上修改,直接输出结果

1.3实验关键代码

/**

串口输入输出程序的实现模块

author

date

*/

#include

/**定义此宏,将演示UartStream.receive函数,允许一次指定数量的数据*/

//#defineSERIALIO_RECEIVE

#defineDBG_LEV3000

moduleSerialIoM

{

usesinterfaceBoot;

usesinterfaceStdControlasUartStdControl;

usesinterfaceUartStream;

}

implementation

{

uint8_tm_receive_len;

uint8_tm_echo_buf;

uint8_tm_send_buf[100];

/*显示一个菜单提示用户*/

voidshowMenu()

{

strcpy(m_send_buf,"\r\n\r\nDemoofSerioI/O\r\n[1]ToggleBLUELED\r\n[2]

ToggleYELLOWLED\r\n");

/*通过UartStream.send可以发送字节数据*/

callUartStream.send(m_send_buf,strlen(m_send_buf));

}

/**启动事件处理函数,在SerialIo.nc已经关联到MainC.Boot接口

系统启动后会调用此函数

*/

eventvoidBoot.booted()

{

LED_BLUE_ON;

LED_YELLOW_ON;

callUartStdControl.start();

showMenu();

}

asynceventvoidUartStream.sendDone(uint8_t*buf,uint16_tlen,error_terror)

{

}

/**重新发送刚才接收的字符进行回显*/

taskvoidshowMenuTask()

{

showMenu();

}

taskvoidlightLED()

{

if(m_echo_buf=='1')

{

LED_BLUE_TOGGLE;/*切换蓝色LED灯*/

ADBG(DBG_LEV,"YouchoosetotoggleBLUELED\r\n");

}

elseif(m_echo_buf=='2')

{

LED_YELLOW_TOGGLE;/*切换黄色LED灯*/

ADBG(DBG_LEV,"YouchoosetotoggleYELLOWLED\r\n");

}

}

/**如果没有调用receive接收,则每接收到一个数据就会触发此事件*/

asynceventvoidUartStream.receivedByte(uint8_tbyte)

{

m_echo_buf=byte;

ADBG(DBG_LEV,"%c\r",m_echo_buf);//将byte直接输出

postlightLED();

}

/**在接收完receive命令欲接收的长度后会调用此事件*/

asynceventvoidUartStream.receiveDone(uint8_t*buf,uint16_tlen,error_terror)

{

}

}

1.4实验截图

1.5实验心得

通过这次实验,对串口通信的原理有了大

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1