www.iotdev.net -专业的物联网|Contiki 6Lowpan|Zigbee|RFID|M2M|无线传感器网络开发论坛
图 2.6 编译结果输出
图 2.7 屏蔽编译警告
2.7 应用程序模板建立
?
includes.h 文件修改
?
建立一个应用程序模板,测试移植结果。首先,includes.h 文件内容如程序
清单 2.6 所示。
IOTDev.net 物联网开发论坛编制
20
www.iotdev.net -专业的物联网|Contiki 6Lowpan|Zigbee|RFID|M2M|无线传感器网络开发论坛
程序清单 2.6 includes.h 文件内容
#ifndef __INCLUDES_H__ #define __INCLUDES_H__ #ifdef __cplusplus extern \{ #endif /***************************************************************************** Standard header files 标准头文件 *****************************************************************************/ #include
****************************************************************************/ #include \??Main.c 测试例程?
在 Main.c 里面建立应测试例程,实现两个 LED 灯的交叉闪烁,具体实现代
码如程序清单 2.7 所示。本节不讲解 Contiki 的具体编程方法,用户可以将
其作为一个例程来运行就行了。
程序清单 2.7 测试例程代码
IOTDev.net 物联网开发论坛编制
21
www.iotdev.net -专业的物联网|Contiki 6Lowpan|Zigbee|RFID|M2M|无线传感器网络开发论坛
#include
/***************************************************************************** ** 全局变量定义
*****************************************************************************/
unsigned int idle_count = 0;
/***************************************************************************** ** 内部函数声明
*****************************************************************************/
//定义控制灯的端口 #define BLED P1_0 //蓝色 LED1 为 P10 #define RLED P1_1 //红色 LED2 为 P11 void led_init() { P1DIR |= 0x03; //P10、P11 定义为输出 RLED = 1; BLED = 1; } PROCESS(led_process, \PROCESS(led_process2, \AUTOSTART_PROCESSES(&led_process,&led_process2); PROCESS_THREAD(led_process, ev, data) { PROCESS_BEGIN(); while(1) { static struct etimer et; etimer_set(&et, CLOCK_SECOND); PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et)); //打开 LED RLED = !RLED; } PROCESS_END(); // LED1 灯闪一次 } PROCESS_THREAD(led_process2, ev, data) { IOTDev.net 物联网开发论坛编制
22
www.iotdev.net -专业的物联网|Contiki 6Lowpan|Zigbee|RFID|M2M|无线传感器网络开发论坛
PROCESS_BEGIN(); while(1)
{
static struct etimer et; etimer_set(&et, CLOCK_SECOND);
PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et)); //打开 LED BLED = !BLED; }
PROCESS_END(); // LED1 灯闪一次
} /***************************************************************************** ** Function name: main ** Descriptions:主函数的模板,一般不要随意更改 ** input parameters:无 ** output parameters: 无 ** Returned value: 0 *****************************************************************************/ int main (void) { // 该函数必须被首先调用,它决定了系统时钟以及系统的工作模式 sys_init(); //dbg_setup_uart(); led_init(); //device_init(); //printf(\ // 系统 tick 初始化 clock_init(); process_init(); process_start(&etimer_process, NULL); autostart_start(autostart_processes); //printf(\while(1) { do { } while(process_run() > 0); idle_count++; IOTDev.net 物联网开发论坛编制
23
www.iotdev.net -专业的物联网|Contiki 6Lowpan|Zigbee|RFID|M2M|无线传感器网络开发论坛
/* Idle! */ /* Stop processor clock */ /* asm(\} //return 0; } 3 网络协议栈移植
待续。
作者:www.iotdev.net 论坛任海波 编辑:www.iotdev.net 论坛文档组 日期: 2012-7-22
IOTDev.net 物联网开发论坛编制
24

