TINYOS试验文档格式.docx
- 文档编号:4768917
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:45
- 大小:460.98KB
TINYOS试验文档格式.docx
《TINYOS试验文档格式.docx》由会员分享,可在线阅读,更多相关《TINYOS试验文档格式.docx(45页珍藏版)》请在冰点文库上搜索。
实验三硬件接口实验
1.启动Cygwin,输入命令cd/opt/atos进入TinyOS主目录,用命令ls可以查看目录下的所有文件。
2.输入命令cd/opt/atos,进入该目录后,用ls命令可以查看目录下有环境变量配置文件setupenv,然后执行sourcesetupenv命令,使环境变量生效,最后执行export|grepATOSROOT来查看。
3.输入命令cdapps,进入应用程序目录后,再用ls查看目录下包含的文件和目录,然后使用命令mkdirMyProject来创建一个名为MyProject的目录
4打开NesC编辑器,file->
new编写好程序后file->
saveas保存在MyProject目录下,保存文件名为Led.nc
代码为
configurationLed
{
}
implementation
componentsLedM;
/*LED模块程序,用于实现LED代码*/
componentsMainC;
/*TinyOS2主模块,这里用于关联系统启动*/
LedM.Boot->
MainC.Boot;
/*LED模块程序的Boot接口与系统Boot接口关联这样系统启动时会调用LedM的Boot接口?
*/
同理在编写LedM.nc,也保存在MyProject目录下。
moduleLedM
usesinterfaceBoot;
/**LED灯演示
taskvoidDemoLed()
{
inti,j;
while
(1)/**/
{
for(i=0;
i<
1000;
i++)
for(j=0;
j<
j++);
/*注意上面两行代码仅仅起延时作用,是一个空循环,下面两行可以认为是并行执行,两语句的执行间隔可忽略不计,故可以看到两灯同时点亮*/
LED_BLUE_ON;
/*点亮蓝色LED灯*/
LED_YELLOW_ON;
/*点亮黄色LED灯*/
for(i=0;
for(j=0;
/*注意上面两行代码仅仅起延时作用,是一个空循环,在灯点亮过一段时间后再去熄灭灯,若无此语句将看不到灯先亮灭的效果*/
LED_BLUE_OFF;
/*熄灭蓝色LED灯*/
LED_YELLOW_OFF;
/*熄灭黄色LED灯*/
}
}
/**启动事件处理函数,在LED.nc已经关联到MainC.Boot接口
系统启动后会调用此函数
eventvoidBoot.booted()
postDemoLed();
在NesC编辑器中,file->
new编写Makefile文件,代码为
COMPONENT=Led
######################
PFLAGS+=-DUSE_MODULE_LED
include$(MAKERULES)
5.用命令ls可以查看在MyProject目录下包含了新建的Led.nc,LedM.nc和Makefile文件
6
将CC2430核心板插到网关板上,连接上USB_Slave线缆,打开网关板电源,进入工程MyProject目录,运行烧录命令:
7烧写成功
可以看到网关板上的D2、D3灯同时点亮,一段时间后同时熄灭,两灯同时点亮同时熄灭交替进行,而将CC2430核心板插到电池板上,也会看到相同的现象
8改写LedM.nc代码,可实现蓝灯,黄灯交替闪烁。
/**目前节点上提供两个LED灯
LED_BLUE->
蓝灯
LED_YELLOW->
黄灯
*/
while
(1)
/*熄灭黄色LED灯*/
RTC的使用:
1.输入命令cd/opt/atos,进入该目录后,用ls命令可以查看目录下有环境变量配置文件setupenv,然后执行sourcesetupenv命令,使环境变量生效,最后执行export|grepATOSROOT来查看
2.打开nesc编辑器,编写TimerLed.nc,TimerLedM.nc,Makefile文件,并将其保存在apps目录下的MyProject文件夹下。
TimerLed.nc代码为
configurationTimerLed
componentsTimerLedM;
/*TimerLed模块程序,用于实现具体代码*/
/*TimerLed模块程序的Boot接口与系统Boot接口关联
这样系统启动时会调用LedM的Boot接口?
TimerLedM.Boot->
/**
使用系统毫秒级Timer组件新建第一个定时器
并且接口关联到TimerLedM处理模块
componentsnewSleepTimerMilliC()asTimer1;
TimerLedM.Timer1->
Timer1;
使用系统毫秒级Timer组件新建第二个定时器
componentsnewSleepTimerMilliC()asTimer2;
TimerLedM.Timer2->
Timer2;
TimerLedM.nc代码为
/**
定时器示例程序的实现模块,间隔点亮两个LED灯
@authorNUAA
@date
*/
moduleTimerLedM
/*Timer为系统接口TMilli指明了定时器的精度为毫秒*/
usesinterfaceTimer<
TMilli>
asTimer1;
/*as关键字为接口别名*/
asTimer2;
/**任务:
切换黄色LED灯*/
taskvoidToggleLedYellow()
LED_YELLOW_TOGGLE;
/**启动事件处理函数,在TimerLed.nc已经关联到MainC.Boot接口
/**定时器1:
持续工作,每隔1s触发一次*/
callTimer1.startPeriodic(1000);
/**定时器2:
持续工作,每隔2s触发一次*/
callTimer2.startPeriodic(2000);
/**定时器1的事件处理函数*/
eventvoidTimer1.fired()
/**事件处理中直接切换蓝色LED灯*/
LED_BLUE_TOGGLE;
/**定时器2的事件处理函数*/
eventvoidTimer2.fired()
postToggleLedYellow();
Makefile代码为
COMPONENT=TimerLed
3.将CC2430核心板插到网关板上,连接上USB_Slave线缆,打开网关板电源,进入工程MyProject目录,运行烧录命令
可以看到网关板上的D2每隔1s亮一次,D3灯每隔2s亮一次,而将CC2430核心板插到电池板上,也会看到相同的现象
实验四ADC采样实验
以下步骤描述了如何逐步执行实验来实现ADC采样的值。
1.点击Cygwin输入命令cd/opt/atos,进入该目录后,用ls命令可以查看目录下有环境变量配置文件setupenv,然后执行sourcesetupenv命令,使环境变量生效。
2.打开nesc编辑器,编写
AdcSensor.nc,AdcSensorM.nc,Makefile文件,并将其保存在apps目录下的MyProject文件夹下。
AdcSensor.nc代码为
configurationAdcSensor
componentsAdcSensorM;
/*AdcSensor模块程序,用于实现具体代码*/
/**AdcSensor模块程序的Boot接口与系统Boot接口关联
这样系统启动时会调用AdcSensorM的Boot接口
AdcSensorM.Boot->
/**系统AD采集组件
componentsnewAdcC()asAdcDemo;
AdcSensorM.AdcControl->
AdcDemo;
AdcSensorM.AdcRead->
AdcSensorM.nc代码为
#include"
Adc.h"
/*定义调试级别,参加Makefile的ADBG_LEVEL定义,设置大于等于ADBG_LEVEL*/
#defineDBG_LEV9
moduleAdcSensorM
usesinterfaceAdcControl;
usesinterfaceRead<
int16_t>
asAdcRead;
taskvoidSensorData()
ADBG(DBG_LEV,"
\r\nStartADCreading..."
);
/**
配置ADC工作模式:
1:
14bitA/D
2:
参考电压VDD3.3V
3:
AD通道4(p0.4)
callAdcControl.enable(ADC_REF_AVDD,ADC_14_BIT,ADC_AIN4);
if(callAdcRead.read()==SUCCESS)
ADBG(DBG_LEV,"
OK\r\n"
else
FAIL\r\n"
eventvoidAdcRead.readDone(error_tresult,int16_tval)
/**
响应于AdcRead.read(),系统AD转换完成触发该事件
if(result==SUCCESS)
AdcRead.readDone:
SUCCESS,value=0x%x\r\n"
val);
FAIL!
\r\n"
postSensorData();
COMPONENT=AdcSensor
#使用LED模块
#使用串口调试模块
PFLAGS+=-DUART_DEBUG
#调试级别
PFLAGS+=-DADBG_LEVEL=9
3.将CC2430核心板插到网关板上,连接上USB_Slave线缆,打开网关板电源,进入工程MyProject目录,执行makeantc3installNID=01GRP=01。
烧录成功
4.从计算机的开始菜单所有程序附件通讯超级终端,打开超级终端设置,进行如下设置:
选择COM4,波特率设为9600,数据流控制选择无。
将网关板的串口通过我们提供的串口线与计算机的串口连接起来,按网关板上的复位键RESET(每按一次都会输出一段信息),将在超级终端输出如下信息:
实验五串口通讯实验
利用调试函数进行串口输出
1.
设置环境变量
在/opt/atos/apps目录下建立一个SerialDebug目录
SerialDebug.nc,SerialDebugM.nc,Makefile文件,并将其保存在apps目录下的SerialDebug文件夹下。
SerialDebug.nc代码为
configurationSerialDebug
componentsSerialDebugM;
/*SerialDebug模块程序,用于实现具体代码*/
/*SerialDebug模块程序的Boot接口与系统Boot接口关联
这样系统启动时会调用SerialDebugM的Boot接口
SerialDebugM.Boot->
componentsPlatformSerialC;
SerialDebugM.CC2430UartControl->
PlatformSerialC;
SerialDebugM.nc代码为
moduleSerialDebugM
usesinterfaceCC2430UartControl;
通过串口打印信息来调试*/
taskvoidDebugSerial()
uint8_tnum1=0x69;
uint32_tnum2=0x12344321;
floatfloat1=321.123;
/*只能最多显示出7位*/
/**ADBG,格式类似于printf,
第一个参数为调试等级,可以参见tos/lib/common/antdebug.h
/**打印字符和字符串*/
\r\n朱才智超级终端欢迎您!
!
'
x'
/*\r将当前位置移到当前行头,\n回车换行,将当前位置移到下一行开头*/
\r\n\r\nDEMOofSerialDebug\r\n"
1.Thisisastring,andthisischar'
%c'
/**打印8位的数字*/
2.输出一个uint8_t,显示出十六进制和十进制大小\r\n"
NUM1:
HEX=0x%x,DEC=%d\r\n"
(int)(num1),(int)(num1));
/**打印32位数字*/
3.输出一个uint32_t,显示出十六进制和十进制大小\r\n"
NUM2:
HEX=0x%lx,DEC=%ld\r\n"
(uint32_t)(num2),(uint32_t)(num2));
/**打印浮点数*/
4.输出一个浮点型\r\n"
FLOAT:
%f\r\n"
float1);
/**启动事件处理函数,在SerialDebug.nc已经关联到MainC.Boot接口
callCC2430UartControl.setBaudRate(9600);
postDebugSerial();
COMPONENT=SerialDebug
3
利用cd命令进入SerialDebug目录,执行makeantc3install编译工程文件并将起自动烧写到cc2430中。
4.从计算机的开始菜单所有程序附件通讯超级终端,打开超级终端设置,进行如下设置:
创建I/O口控制工程文件
1.在cygwin环境下进入/opt/atos目录,设置环境变量。
输入命令cd/opt/atos/apps进入应用程序目录在/opt/atos/apps目录下建立一个SerialIo目录
2.打开nesc编辑器,编写SerialIo.nc,SerialIoM.nc,Makefile文件,并保存在SerialIo目录下,
SerialIo.nc代码为
configurationSerialIo
componentsSerialIoM;
/*SerialIo模块程序,用于实现具体代码*/
/**SerialIo模块程序的Boot接口与系统Boot接口关联
这样系统启动时会调用SerialIoM的Boot接口
SerialIoM.Boot->
/**PlatformSerialC
componentsPlatformSeria
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- TINYOS 试验