AOTS实验报告材料Word文件下载.docx
《AOTS实验报告材料Word文件下载.docx》由会员分享,可在线阅读,更多相关《AOTS实验报告材料Word文件下载.docx(49页珍藏版)》请在冰豆网上搜索。
将绿灯状态改为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;
LED_BLUE_ON;
}
}
/**启动事件处理函数,在LED.nc已经关联到MainC.Boot接口
系统启动后会调用此函数
eventvoidBoot.booted()
postDemoLed();
1.4实验截图
1.5实验心得
通过这次实验,掌握了对LED的简单控制,受益匪浅,并且对此次实验的运作过程开始了解。
实验二定时器组件
通过定时器让绿色灯闪烁,并且闪烁三次后停止闪烁。
设置一个变量,在计时器每计数一次自加一次,加到三时,停止计时器。
#defineDBG_LEV5
moduleTimerLedM
/*Timer为系统接口TMilli指明了定时器的精度为毫秒*/
usesinterfaceTimer<
TMilli>
asTimer1;
/*as关键字为接口别名*/
asTimer2;
/**任务:
切换黄色LED灯*/
inti=0;
/**启动事件处理函数,在TimerLed.nc已经关联到MainC.Boot接口
/**定时器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_LEV为3000,将语句中的DBG_LEV参数改为比默认的ADBG_LEV小即可
串口调试程序的实现模块
date
/*定义调试级别,参加Makefile的ADBG_LEVEL定义,设置大于等于ADBG_LEVEL*/
#defineDBG_LEV3000
moduleSerialDebugM
通过串口打印信息来调试*/
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'
1.Thisisastring,andthisischar'
%c'
\r\n"
/**打印8位的数字*/
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));
/**打印浮点数*/
3.FLOAT:
%f\r\n"
float1);
/**启动事件处理函数,在SerialDebug.nc已经关联到MainC.Boot接口
postDebugSerial();
图1未屏蔽前
图2屏蔽后
此次实验加深了我对串口的了解与使用,是一次非常好的实验材料,受益匪浅。
实验四串口通信
实现一个串口实验,在串口助手中实现回显的功能。
(键盘键入的任何容回车后显示在串口助手的终端)
直接在原有的UartStream.receivedByte函数基础上修改,直接输出结果
串口输入输出程序的实现模块
author
#include<
strings.h>
/**定义此宏,将演示UartStream.receive函数,允许一次指定数量的数据*/
//#defineSERIALIO_RECEIVE
moduleSerialIoM
usesinterfaceStdControlasUartStdControl;
usesinterfaceUartStream;
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接口
{
LED_BLUE_ON;
LED_YELLOW_ON;
callUartStdControl.start();
showMenu();
asynceventvoidUartStream.sendDone(uint8_t*buf,uint16_tlen,error_terror)
/**重新发送刚才接收的字符进行回显*/
taskvoidshowMenuTask()
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灯*/
YouchoosetotoggleYELLOWLED\r\n"
/**如果没有调用receive接收,则每接收到一个数据就会触发此事件*/
asynceventvoidUartStream.receivedByte(uint8_tbyte)
m_echo_buf=byte;
%c\r"
m_echo_buf);
//将byte直接输出
postlightLED();
/**在接收完receive命令欲接收的长度后会调用此事件*/
asynceventvoidUartStream.receiveDone(uint8_t*buf,uint16_tlen,error_terror)
通过这次实验,对串口通信的原理有了大