前面已经介绍过,笔者比较熟悉TinyOS,再此主要讨论的是TinyOS的准备部分,Contiki和RIOT以后有时间会补充;
首先看看LocalIeeeEui64C.nc文件
module LocalIeeeEui64C {
provides interface LocalIeeeEui64;
} implementation {
command ieee_eui64_t LocalIeeeEui64.getId() {
ieee_eui64_t id;
/* this is UCB's OUI */
id.data[0] = 0x00;
id.data[1] = 0x12;
id.data[2] = 0x6d;
/* UCB will let anyone use this OUI so long as these two octets
are 'LO' -- "local". All other octets are reserved. */
/* SDH -- 9/10/2010 */
id.data[3] = 'L';
id.data[4] = 'O';
id.data[5] = 0;
id.data[6] = TOS_NODE_ID >> 8;
id.data[7] = TOS_NODE_ID & 0xff;
return id;
/****
ieee_eui64_t id;
id.data[0] = ((uint8_t *)IEEE_ADDR_LOCATION_PRIMARY)[3]; //F_EXADDR7
id.data[1] = ((uint8_t *)IEEE_ADDR_LOCATION_PRIMARY)[2]; //F_EXADDR6
id.data[2] = ((uint8_t *)IEEE_ADDR_LOCATION_PRIMARY)[1]; //F_EXADDR5
id.data[3] = ((uint8_t *)IEEE_ADDR_LOCATION_PRIMARY)[0]; //F_EXADDR4
id.data[4] = ((uint8_t *)IEEE_ADDR_LOCATION_PRIMARY)[7]; //F_EXADDR3
id.data[5] = ((uint8_t *)IEEE_ADDR_LOCATION_PRIMARY)[6]; //F_EXADDR2
id.data[6] = ((uint8_t *)IEEE_ADDR_LOCATION_PRIMARY)[5]; //F_EXADDR1
id.data[7] = ((uint8_t *)IEEE_ADDR_LOCATION_PRIMARY)[4]; //F_EXADDR0
return id;
*/
}
}
id.data[0]~id.data[7]对应就是2538的IEEE地址,不过上面未注释部分是TinyOS默认的自定义的IEEE地址,TOS_NODE_ID 为短地址,也就是make cc2538cb id.xx中的xx
下面注释掉的部分是物理IEEE地址。
按照IETF的文档,应该对IEEE地址进行U/L bits操作,也就是 id.data[0] (byte)从右到左第7bit取反(也就是编程咱们常常默认的bit1)
知道了这个你反过去阅读PPprouter中德文章,就知道UDPECHO 中德id.2的route命令的地址为什么是那个值了。
1,编译lib6lowpan
言归正传:用到6llowpan,那么你肯定需要遵从他的规范,也就是使用Lib6lowpan
进入support/sdk/c/blip下
./bootstrap
./configure
make
当然这个目录是tinyos2.2.12release默认的路径,如果是github最新的做法是在tools/tinyos/c/blip中
2,编译libcoap
添加Coap的库,也就是编译libcoap,可能coap的版本会有区别,注意看文档是否对coap的版本有限制;
进入目录support/sdk/c/coap
autoconf
./configure --with-tinyos
即可;
首先看看LocalIeeeEui64C.nc文件
module LocalIeeeEui64C {
provides interface LocalIeeeEui64;
} implementation {
command ieee_eui64_t LocalIeeeEui64.getId() {
ieee_eui64_t id;
/* this is UCB's OUI */
id.data[0] = 0x00;
id.data[1] = 0x12;
id.data[2] = 0x6d;
/* UCB will let anyone use this OUI so long as these two octets
are 'LO' -- "local". All other octets are reserved. */
/* SDH -- 9/10/2010 */
id.data[3] = 'L';
id.data[4] = 'O';
id.data[5] = 0;
id.data[6] = TOS_NODE_ID >> 8;
id.data[7] = TOS_NODE_ID & 0xff;
return id;
/****
ieee_eui64_t id;
id.data[0] = ((uint8_t *)IEEE_ADDR_LOCATION_PRIMARY)[3]; //F_EXADDR7
id.data[1] = ((uint8_t *)IEEE_ADDR_LOCATION_PRIMARY)[2]; //F_EXADDR6
id.data[2] = ((uint8_t *)IEEE_ADDR_LOCATION_PRIMARY)[1]; //F_EXADDR5
id.data[3] = ((uint8_t *)IEEE_ADDR_LOCATION_PRIMARY)[0]; //F_EXADDR4
id.data[4] = ((uint8_t *)IEEE_ADDR_LOCATION_PRIMARY)[7]; //F_EXADDR3
id.data[5] = ((uint8_t *)IEEE_ADDR_LOCATION_PRIMARY)[6]; //F_EXADDR2
id.data[6] = ((uint8_t *)IEEE_ADDR_LOCATION_PRIMARY)[5]; //F_EXADDR1
id.data[7] = ((uint8_t *)IEEE_ADDR_LOCATION_PRIMARY)[4]; //F_EXADDR0
return id;
*/
}
}
id.data[0]~id.data[7]对应就是2538的IEEE地址,不过上面未注释部分是TinyOS默认的自定义的IEEE地址,TOS_NODE_ID 为短地址,也就是make cc2538cb id.xx中的xx
下面注释掉的部分是物理IEEE地址。
按照IETF的文档,应该对IEEE地址进行U/L bits操作,也就是 id.data[0] (byte)从右到左第7bit取反(也就是编程咱们常常默认的bit1)
知道了这个你反过去阅读PPprouter中德文章,就知道UDPECHO 中德id.2的route命令的地址为什么是那个值了。
1,编译lib6lowpan
言归正传:用到6llowpan,那么你肯定需要遵从他的规范,也就是使用Lib6lowpan
进入support/sdk/c/blip下
./bootstrap
./configure
make
当然这个目录是tinyos2.2.12release默认的路径,如果是github最新的做法是在tools/tinyos/c/blip中
2,编译libcoap
添加Coap的库,也就是编译libcoap,可能coap的版本会有区别,注意看文档是否对coap的版本有限制;
进入目录support/sdk/c/coap
autoconf
./configure --with-tinyos
即可;