- 实验一 CC2530平台上电源管理与休眠
实验目的:
- 加深和巩固学生对于TinyOS编程方法的理解和掌握
- 让学生初步的认识TinyOS编程的基础和简单的程序编写
- 学生通过本实验能够初步的了解和掌握TinyOS编程的整个过程
- 提高学生的上机和编程过程中处理具体问题的能力
实验要求:
- 实验要求自己独立的完成;
- 编写和调试过程中出现的问题要做好记录,并事后总结到报告中
- 实验程序调试完成后, 用给定的平台进行测试,由老师检查测试结果,并给予相应的成绩
- 在实验报告中回答LedsC,和Leds分别是什么。请在该框架下增加Led频闪命令,即将Led频闪功能以Led接口中的命令函数形式实现。
- 实验完成后,要上交实验报告。
实验内容:
- 开发一个新的应用,节点每一分种工作5秒,以PM2模式休眠55秒。在工作期间,控制LED以1秒为周期闪烁。以下述顺序完成这个新应用的开发。
- 首先使得应用能够以1秒为周期控制LED闪烁;
- 然后在上述基础上加入休眠功能。
- 在实验报告中分别给出上述两个阶段的源码。
实验代码
(1)配置文件MySleepAppC.nc:
configuration MyLEDAppC
{ }
implementation
{
components MySleepAppM as App;
components MainC;
components LedsC;
components McuSleepTimerC ;
components new TimerMilliC() as Timer0;
App.Boot -> MainC.Boot;
App.SleepTimerAlarm -> McuSleepTimerC;
App.Leds->LedsC;
App.Timer0->Timer0;
}
(2)模块文件MySleepAppM.nc:
module MySleepAppM
{
uses interface Boot;
uses interface Alarm<T32khz, uint32_t> as SleepTimerAlarm;
uses interface Timer<TMilli>as Timer0;
uses interface Leds;
}
implementation
{
uint8_t i = 0;
void set_powermode(int mode)//设计电源模式
{
int j;
if(mode < 4)
{
SLEEPCMD |=mode;
PCON = 1;//进入sleepcmd 制定的电源模式,通过中断打断
for(j = 0 ; j< 4 ; j ++);
}
else
PCON = 0;//系统唤醒
}
task void SleepTask()
{
EA = 1;
call SleepTimerAlarm.start(1024*10);
set_powermode(2);//设置电源模式2
}
event void Boot.booted()
{
call Leds.led0On();
call Timer0.startPeriodic(1024);
}
event void Timer0.fired()
{
i++;
if(i<=5)
{
if(i==5)
{
i = 0 ;
post SleepTask();
}
}
call Leds.led0Toggle();//切换led状态
}
async event void SleepTimerAlarm.fired(){}
}
(3) Makefile 编译文件
COMPONENT=MySleepAppC
include $(MAKERULES)
实验环境:
- 上位机操作系统为WindowsXP,在Cygwin环境下编译
- 集成开发环境为Notepad++
实验报告人:木舟 报告时间:2018.11.16