oppo r9不能自动锁屏oppo怎么清除锁屏密码解决,不按电源键就一直亮着:我设置的30秒,重启也不行……

2016第三届物联网大会
智能后视镜产品方案对接会
中国LED智能照明高峰论坛
第三届·无线通信技术研讨会
第二届·中国IoT大会
ETFo智能安防技术论坛
移入鼠标可放大二维码
德州仪器ZigBee SoC CC2538破解智能照明统一控制难题
来源:互联网 作者:秩名日 14:58
[导读] 针对无线连接应用,TI拥有大约130多种产品,支持14种无线技术。可以说,TI具有业界最广泛的无线连接产品系列。TI一款主要应用于智能照明系统的无线连接产品——CC2538 片上系统(SoC),满足了智能能源基础设施、家庭楼宇自动化以及智能照明系统的最新需求。##强大ARM Cortex M3,具有代码预提取功能;兼容 RF 收发器;有源模式 RX(CPU 闲置):20mA;4 个通用定时器;32 个通用 I/O 引脚
  针对无线连接应用,拥有大约130多种产品,支持14种无线技术。可以说,具有业界最广泛的无线连接产品系列。一款主要应用于智能照明系统的无线连接产品&&CC2538 片上系统(SoC),满足了智能能源基础设施、家庭楼宇自动化以及智能照明系统的最新需求。
  CC2538 为高集成度ZigBee解决方案,它在单个硅芯片上集成了ARM Cortex M3 MCU、存储器以及硬件加速器,支持ZigBeePRO、ZigBee Smart Energy及ZigBee Home Automaon以及照明标准,能与现有及未来ZigBee产品实现互操作。此外,该SoC还支持采用IEEE 802.15.4 及6LoWPAN IPv6网络的IP标准化开发,可实现最高的灵活性,具有极高的成本效益。
  升级内核扩大芯片应用范围:
&&&&&&& 为进一步迎合智能照明中的组网及统一控制的需求,CC2538芯片将MCU从8位升级到32位,通过集成型ARM Cortex-M3内核实现对集中网络的高效处理,使其在智能照明系统中起到网关的作用。在新版Zigbee Light Link标准中,智能灯具的遥控器被虚拟成一个网关,灯具的开/关、亮度或色彩调节等参数均可通过一个遥控器或智能手机来控制。虽然ZigBee为网状网结构,但在智能家庭网络实际组网过程中很难做到每个房间中均有一个ZigBee网关。采用了CC2538和CC2530 芯片的智能照明系统,很好地解决了这个问题。配有CC2530芯片的灯具,价格较为低廉,可以安装在每个房间中并起到路由器的作用。而装配有CC2538 芯片的灯具则非常适合用作网关设备。
  支持更多协议:通过128K至512K 的可扩展闪存存储器选项,CC2538可以支持更多协议栈,如ZLL灯光协议、标准家庭智能化协议,甚至支持在北美普遍应用的智能能源(Smart Energy)协议栈,处理能力非常强大。
  高安全性:通过AES-128/256、SHA2集成型硬件加密引擎、可选ECC-128/256与RSA 硬件加速引擎,CC2538提升了系统的安全等级,并降低了安全密钥交换的能耗。
  低功耗:CC2538针对电池供电应用进行了优化,在睡眠模式下电流使用仅为 1.3uA。
  此外,通过集成型引脚对引脚兼容的8K至32K RAM选项,CC2538可实现最大的灵活性,能支持具有多达数百个端节点的网状网络。最值得一提的是,CC2538可安全工作在高达125℃高温环境下。
  智能能源、家庭自动化以及照明系统的动态属性决定了其需要高性能与高灵活性才能满足制造商对不同存储器、安全性以及标准支持的需求。CC2538不但具有高集成度,而且还支持ZigBee以及其它诸如802.15.4与6LoWPAN IPv6等基于IP的标准,很好地满足了智能能源基础设施、家庭楼宇自动化以及智能照明系统的需求。
CC2538系列器件可用
CC2538相关文章
CC2538相关下载
智能照明相关文章
智能照明相关下载
Zigbee相关文章
Zigbee相关下载
德州仪器相关文章
德州仪器相关下载
3月10日,由智东西、AWE、极果等联合举办“GTIC 2017全球(智慧)科技峰会”在上海证大喜马拉雅中心正式开幕。地平线机器人副总裁张永谦发表了名为“‘...
“从这两年ADI营收来看虽然欧美继续称霸运动控制设计领域,但是本土企业在设计方面的增速很高,说明本土企业在运动控制领域不再是简单的制造和跟随...
创新实用技术专题
xml和VR技术在GIS中数据互操作设计与实现简述
版权所有 & 深圳华强聚丰电子科技有限公司cc2538(27)
contiki3.0(9)
Contiki例程实验(3)
通过对PEOCESS的一些乱讲,应该有一点可以知道就是我们每编写一个PROCESS_THREAD(...)实际就是弄出了一个 (struct)大家可以理解是不是每一个PROCESS_THREAD或者其他的都会在cmpile的时候产生一个全局的struct变量;回忆一下:
struct process {
struct process *
#if PROCESS_CONF_NO_PROCESS_NAMES
#define PROCESS_NAME_STRING(process) &&
const char *
#define PROCESS_NAME_STRING(process) (process)-&name
PT_THREAD((* thread)(struct pt *, process_event_t, process_data_t));
unsigned char state,
至此我们至少可以CTRL+C/CTRL+V写出自己的小的测试程序,我们不管是学习TinyOS或者Contiki实际并不是只是make然后下载,验证结果就完事了,应该掌握代码的编写;鱼和渔的基本区别是我写这些文档的意义所在;
TinyOS和Contiki都是event驱动;RIOT在Contiki介绍完后会重点去介绍;个人还是比较喜欢他的风格一点;
回忆TinyOS的event是很简单的,采用signal抛出事件,使用者处理;
Contiki的event咱们慢慢来看;我们现在在test_null基础上再编写一次,达到事件处理的目的;
首先在:core/sys/process.h中:
typedef unsigned char process_event_t;
typedef void *
process_data_t;
typedef unsigned char process_num_events_t;
我们这次需要用到的函数为:
process_post
在core/sys/process.c中
process_post(struct process *p, process_event_t ev, process_data_t data)
static process_num_events_
if(PROCESS_CURRENT() == NULL) {
PRINTF(&process_post: NULL process posts event %d to process '%s', nevents %d\n&,
ev,PROCESS_NAME_STRING(p), nevents);
PRINTF(&process_post: Process '%s' posts event %d to process '%s', nevents %d\n&,
PROCESS_NAME_STRING(PROCESS_CURRENT()), ev,
p == PROCESS_BROADCAST? &&broadcast&&: PROCESS_NAME_STRING(p), nevents);
if(nevents == PROCESS_CONF_NUMEVENTS) {
if(p == PROCESS_BROADCAST) {
printf(&soft panic: event queue is full when broadcast event %d was posted from %s\n&, ev, PROCESS_NAME_STRING(process_current));
printf(&soft panic: event queue is full when event %d was posted to %s from %s\n&, ev, PROCESS_NAME_STRING(p), PROCESS_NAME_STRING(process_current));
#endif /* DEBUG */
return PROCESS_ERR_FULL;
snum = (process_num_events_t)(fevent + nevents) % PROCESS_CONF_NUMEVENTS;
events[snum].ev =
events[snum].data =
events[snum].p =
#if PROCESS_CONF_STATS
if(nevents & process_maxevents) {
process_maxevents =
#endif /* PROCESS_CONF_STATS */
return PROCESS_ERR_OK;
下面修改test_null.c文件
#include &contiki.h&
#include &dev/leds.h&
static process_event_t event_
PROCESS(test_null, &我是菜鸟&);
PROCESS(test_event, &我还是菜鸟&);
AUTOSTART_PROCESSES(&test_null, &test_event);
PROCESS_THREAD(test_null, ev, data)
PROCESS_BEGIN();
event_xxoo = process_alloc_event();
process_post(&test_event, event_xxoo, NULL);
PROCESS_END();
PROCESS_THREAD(test_event, ev, data)
PROCESS_BEGIN();
PROCESS_WAIT_EVENT_UNTIL(ev == event_xxoo);
leds_on(LEDS_ALL);
PROCESS_END();
看到不认识的家伙了 process_alloc_event();
在core/sys/process.c中:
process_event_t
process_alloc_event(void)
return lastevent++;
PROCESS_WAIT_EVENT_UNTIL在core/sys/process.h中:
#define PROCESS_YIELD_UNTIL(c)
PT_YIELD_UNTIL(process_pt, c)
#define PROCESS_WAIT_EVENT_UNTIL(c) PROCESS_YIELD_UNTIL(c)
PT_TIELD_UNTIL在core/sys/pt.h中:
&pre name=&code& class=&cpp&&#define PT_YIELD_UNTIL(pt, cond)
PT_YIELD_FLAG = 0;
LC_SET((pt)-&lc);
if((PT_YIELD_FLAG == 0) || !(cond)) { \
return PT_YIELDED;
} while(0)
我们的设计思想是,test_null抛出事件,test_event获取该事件后亮灯,编译烧写到板子进行一下测试:
烧写到cc2538cb节点后,contiki-main先将三个led灯fade,流水灯效果;然后咱们发现三个led灯点亮了
说明test_event的leds_on(LEDS_ALL);得到了执行,事件的测试OK;貌似现在也只是最基础的写法测试
在此大家可以再去想一下Contiki的thread模型,PROCESS_WAIT_EVENT_UNTIL到底干了什么?
Contiki是否支持咱们回溯事件的抛出者是谁?
有一个例程我们最好去学习参考,以便以后写出自己的应用,那就是er_timer;可以参考2530的代码或者cc2538cb目录下的blink_hello.c
#include &contiki.h&
#include &dev/leds.h&
#include &stdio.h& /* For printf() */
/*---------------------------------------------------------------------------*/
static struct etimer et_
static struct etimer et_
static uint16_
static uint8_
/*---------------------------------------------------------------------------*/
PROCESS(hello_world_process, &Hello world process&);
PROCESS(blink_process, &LED blink process&);
AUTOSTART_PROCESSES(&hello_world_process, &blink_process);
/*---------------------------------------------------------------------------*/
PROCESS_THREAD(hello_world_process, ev, data)
PROCESS_BEGIN();
etimer_set(&et_hello, CLOCK_SECOND * 4);
count = 0;
while(1) {
PROCESS_WAIT_EVENT();
if(ev == PROCESS_EVENT_TIMER) {
printf(&Sensor says #%u\n&, count);
etimer_reset(&et_hello);
PROCESS_END();
/*---------------------------------------------------------------------------*/
PROCESS_THREAD(blink_process, ev, data)
PROCESS_BEGIN();
blinks = 0;
while(1) {
etimer_set(&et_blink, CLOCK_SECOND);
PROCESS_WAIT_EVENT_UNTIL(ev == PROCESS_EVENT_TIMER);
leds_off(LEDS_ALL);
leds_on(blinks & LEDS_ALL);
printf(&Blink... (state %0.2X)\n&, leds_get());
PROCESS_END();
/*---------------------------------------------------------------------------*/其中的代码可以自己去阅读,参考process阅读;我们看到两种事件等待的写法:
PROCESS_WAIT_EVENT();
if(ev == PROCESS_EVENT_TIMER){
PROCESS_WAIT_EVENT_UNTIL(ev == PROCESS_EVENT_TIMER);
这些都不重要,那么我们来看一下&PROCESS_EVENT_TIMER这个东东,在core/sys/er_timer.h中
PROCESS_THREAD(etimer_process, ev, data)
struct etimer *t, *u;
PROCESS_BEGIN();
timerlist = NULL;
while(1) {
PROCESS_YIELD();
if(ev == PROCESS_EVENT_EXITED) {
struct process *p =
while(timerlist != NULL && timerlist-&p == p) {
timerlist = timerlist-&
if(timerlist != NULL) {
while(t-&next != NULL) {
if(t-&next-&p == p) {
t-&next = t-&next-&
} else if(ev != PROCESS_EVENT_POLL) {
for(t = t != NULL; t = t-&next) {
if(timer_expired(&t-&timer)) {
if(process_post(t-&p, PROCESS_EVENT_TIMER, t) == PROCESS_ERR_OK) {
/* Reset the process ID of the event timer, to signal that the
etimer has expired. This is later checked in the
etimer_expired() function. */
t-&p = PROCESS_NONE;
if(u != NULL) {
u-&next = t-&
timerlist = t-&
t-&next = NULL;
update_time();
etimer_request_poll();
PROCESS_END();
貌似有了PROCESS_EVENT_TIMER的影子,大家可以自己去思考一下,do_poll和do_event
PROCESS_EVENT_TIMER的定义在core/sys/process.h中
#define PROCESS_EVENT_TIMER
在这里我们基本上能够总算接触到了Contiki的event,更多的自己去看代码理解,也许你需要一个来阅读代码,而不用像我一样一个一个文件打开查看;
虽然还是觉得有点模棱两可;只能说再此我并没有感觉到C语言的Contiki的优势!并不是我黑Contiki,我移植TinyOS很多地方也是参考的Contiki;现在能体会到的就是编写应用还是相对要复杂;可以自己结合前面几篇文档对照代码形成自我的理解;现在的作者也只是Contiki的菜鸟;但是应用神马的就得从基础做起;
不得不说的是cc2538dk平台本质是TI的SmartRF06EB板子,我的cc2538cb的代码(驱动部分)主要是参考他修改而来,3.0代码和2.7代码部分在底层变动较大;高手们可以互相印证,至少我比较喜欢2.7的启动文件的写法;
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:29120次
排名:千里之外
原创:44篇
评论:33条
(1)(1)(2)(10)(12)(18)TI新推基于Cortex-M3的CC2538片上系统
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
日前,德州仪器(TI)宣布推出CC2538片上系统(SoC),简化支持ZigBee无线连接功能的智能能源基础设施、家庭楼宇自动化以及智能照明网关开发。业界最高度集成度ZigBee解决方案CC2538在单个硅芯片上高度集成ARM
MCU、以及硬件加速器,具有极高的成本效益。CC2538支持ZigBeePRO、 Smart Energy及ZigBee Home Automation 以及照明标准,能与现有及未来ZigBee产品实现互操作。此外,该SoC还支持采用IEEE 802.15.4及6LoWPAN IPv6网络的IP标准化开发,可实现高的灵活性。TI无线连接解决方案项目经理Mark Grazier表示:“智能能源、家庭自动化以及照明系统的动态属性决定了其需要高性能与高灵活性才能满足制造商对不同存储器、安全性以及标准支持的需求。CC2538是一款真正的市场独特产品,不但具有高集成度,而且还支持ZigBee以及其它诸如802.15.4与6LoWPAN IPv6等基于IP的标准。”CC2538的其它特性与优势:●通过集成型ARM Cortex-M3内核实现对集中网络的高效处理以及降低材料成本;●通过128K至512K的可扩展闪存存储器选项支持智能能源基础设施应用;●通过集成型引脚对引脚兼容的8 K至32K RAM选项可实现最大的灵活性,支持具有多达数百个端节点的网状网络;●通过AES-128/256、SHA2集成型硬件加密引擎、可选ECC-128/256与RSA硬件加速引擎可降低安全密钥交换的能耗,安全快速启动系统;●针对电池供电应用进行了优化,在睡眠模式下电流使用仅为1.3μA;●可在高达125摄氏度的高温下工作;●支持快速数字管理,无需外部接口或系统级芯片组件之间的接口。开发工具与软件CC2538开发套件(CC2538DK)可为CC2538提供完整的开发平台,帮助用户无需额外布局便可了解所有功能。该套件配套提供高性能CC2538评估板(CC2538EMK)与主板、用于软件开发的集成型ARM Cortex-M3调试探针以及LCD、按钮、光传感器与加速器等外设,用于创建演示软件。此外,这些电路板还与TI SmartRF Studio兼容,可运行RF性能测试。CC2538支持TI当前及未来的Z-Stack系列产品,也支持无线下载软件实现更便捷的现场升级。 供货情况采用8毫米 x 8毫米QFN56封装的CC2538现已可通过授权分销商进行订购。此外,还可通过TI免费样片的方式获取CC2538。
您的昵称:
美国的游客
(您将以游客身份发表,请 | )
什么是MCU?
Controller
Unit)中文名称为多点控制单元,又称单片微型计算机(Single
Microcomputer),是指随着大规模集成电路的出现及其发展,将计算机的CPU、RAM、ROM、定时数器和多种I/O接口集成在一片芯片上,形成芯片级的计算机,为不同的应用场合做不同组合控制。
德州仪器(Texas Instruments),简称TI,是全球领先的半导体公司,为现实世界的信号处理提供创新的数字信号处理(DSP)及模拟器件技术。除半导体业务外,还提供包括教育产品和数字光源处理解决方案(DLP)。
CC2538是什么?
CC2538,CC2538是什么? 通过电子工程专辑网站专业编辑提供CC2538的最新相关信息,掌握最新的CC2538的最新行业动态资讯、技术文萃、电子资料,帮助电子工程师自我提升的电子技术平台.
MCU是什么?
MCU,MCU是什么? 通过电子工程专辑网站专业编辑提供MCU的最新相关信息,掌握最新的MCU的最新行业动态资讯、技术文萃、电子资料,帮助电子工程师自我提升的电子技术平台.
TI,TI是什么? 通过电子工程专辑网站专业编辑提供TI的最新相关信息,掌握最新的TI的最新行业动态资讯、技术文萃、电子资料,帮助电子工程师自我提升的电子技术平台.
mcu是什么?
mcu,mcu是什么? 通过电子工程专辑网站专业编辑提供mcu的最新相关信息,掌握最新的mcu的最新行业动态资讯、技术文萃、电子资料,帮助电子工程师自我提升的电子技术平台.
ti,ti是什么? 通过电子工程专辑网站专业编辑提供ti的最新相关信息,掌握最新的ti的最新行业动态资讯、技术文萃、电子资料,帮助电子工程师自我提升的电子技术平台.
新添订阅功能,提供全面快捷的资讯服务!
关注电子工程专辑微信
扫描以下二维码或添加微信号“eet-china”
访问电子工程专辑手机网站
随时把握电子产业动态,请扫描以下二维码
5G网络在提供1Gbps至10Gbps吞吐量方面具有很好的前途, 并且功耗要求比今天的网络和手机都要低,同时还能为关键应用提供严格的延时性能。本期封面故事将会与您分享5G的关键技术发展,以及在4G网络上有怎样的进步。
新版社区已上线,旧版论坛、博客将停用
1、为防数据丢失,旧版论坛、博客不再接受发帖;
2、老用户只需重设密码,即可直接登录新平台;
3、新版博客将于8月底完美归来,敬请期待;
4、全新论坛、问答,体验升级、手机阅读更方便。
推荐到论坛,赢取4积分您当前的位置:&>&
TI:智能照明将成为ZigBee发展突破口
&TI早在2002年就加入了ZigBee产业联盟,在2005年就推出了相应的产品,但是一直叫好不叫座。现在我们推出的ZigBee解决方案已经开始应用在家庭智能照明上面,解决了困扰ZigBee已久的组网问题。未来ZigBee可能会以智能照明为突破口,获得快速发展。& 半导体事业部业务拓展经理周翔告诉21ic记者。
周翔在向记者演示基于TI芯片的智能ZigBee照明系统
为什么智能照明会成为突破口呢?
周翔介绍说:&现在ZigBee在中国的应用一直不是很繁荣,而在北美则已经开始大规模商用了。在中国很难推广的原因是ZigBee网络是一张网状网,而今天大家家里已经有很多无线设备。ZigBee需要节点来连接网络,它不能够穿透墙壁,一般家庭很难再去采购很多ZigBee设备组成网络。而最新的基于ZigBee的LED智能照明解决方案,可以让LED等兼具ZigBee组网节点功能,且完全兼容家庭常用的螺口,家庭硬件方面不需要做任何改变。只需要增加一个兼容ZigBee的路由器即可。&
基于ZigBee的智能LED解决方案从根本上解决了ZigBee的组网问题,让家庭中其他兼容ZigBee的设备完全可以利用LED灯具作为组网节点。这既让家庭可以用上更加节能的LED,又可以利用ZigBee的通讯功能实现对于灯光的智能控制,可谓是一举两得。&&
正是看到了ZigBee走到了一个发展的十字路口,就此推出了CC2538单芯片解决方案。ZigBee 解决方案 CC2538 在单个硅芯片上集成了ARM Cortex-M3 MCU、存储器以及硬件加速器,具有极高的成本效益。CC2538 支持 ZigBeePRO、ZigBee Smart Energy 及 ZigBee Home Automation 以及照明标准,能与现有及未来 ZigBee 产品实现互操作。此外,该 SoC 还支持采用 IEEE 802.15.4 及 6LoWPAN IPv6 网络的 IP 标准化开发。
现在为了推进ZigBee在智能照明方面的发展,ZigBee产业联盟还推出了新的ZigBee Light Link标准。这一标准可以让通过单一ZigBee网络控制不同品牌厂商的照明产品,并且同时能与多频段的电脑、智能手机和平板电脑连结。
因此采用ZigBee Light Link 的节能灯泡、 LED灯具、感应器、定时器、遥控器与开关将能够很方便的接入网路,并且无需添加任何装置进行调整。这让家庭或商务人士,将能够很轻松的实现随插即用。
标准的配备加之新应用的出现,让ZigBee见到了突破的曙光。
目前飞利浦就利用TI的前一代产品开发了一套基于ZigBee的LED系统,初期的10万套在去年11月份在美国被一抢而空。
现在TI的新产品CC2538是更新一代的单芯片产品,用ARM Cortex-M3 MCU核心代替了前一代CC2530中内嵌的51架构核心MCU,功能更加强大。
周翔表示:&现在许多客户看到了ZigBee新的市场发展机会,正在和我们沟通,希望在未来能够先期通过推出LED智能照明产品。这样ZigBee如果能够在中国市场站住脚,那么ZigBee整体产业发展将获得巨大的助力。&
2013年电子行业可谓大事连连,欧盟白炽灯停售,运作5年多的绿色能源方案着手……
() () () () () () () () ()cc2538(27)
tinyos(20)
TinyOS例程实验(10)
前面的6部实验为基本的驱动外设实验,是学习使用基础,实验设备只需要一个cc2538cb节点;从这一部开始实验开始需要两个cc2538cb节点,开始zigbee的无线通信;
此次例程为TinyOS的核心协议栈BLIP,现在的版本是BLIP2.0;大家可以去TinyOS的官网搜索BLIP查看介绍;
如何理解BLIP呢?他的存在意义是什么?我们清楚zigbee到6lowpan的升级,zigbee芯片厂商并没有在硬件部分做6lowpan的压缩解压,这些的完成是纯软件实现的,也就需要一个zigbee(IEEE802.15.4)到6lowpan的转换桥梁,BLIP最重要的功能就是如此;
例程目录tinyos-main-release_tinyos_2_1_2\apps\cc2538_Test\blip\TestLinkLocal
例程为TinyOS的官方固件的代码,以后大家使用会发现我的这些例程基本不修改官方的例程,方便大家的兼容学习;
Makefile文件:
COMPONENT=TestLinkLocalAppC
CFLAGS += -DUSE_TIMER_HANDLER
#CFLAGS += -DUSE_UART_HANDLER
CFLAGS += -DUSE_RF_HANDLER
CFLAGS += -DNOT_USE_PRINTFC_BUT_USE_PRINT
PFLAGS += -DIN6_PREFIX=\&fec0::\&
include $(MAKERULES)
CFLAGS += -DIN6_NO_GLOBAL -DLIB6LOWPAN_HC_VERSION=-1
CFLAGS += -DPRINTFUART_ENABLED
BLIP分为两种模式:短地址(16bit)和IEEE地址(8bytes/64bit)模式,默认采用短地址模式;注意如果后期的实验如边界路由,RPL,CoAP实验;通信都需要选择同一种模式;默认是短地址;大家在完成基本的通讯后可以修改Makefile,尝试IEEE地址模式;具体参考TinyOS官网BLIP文档;
TestLinkLocalAppC.nc文件:
/** Test the link-local communication in the blip stack
configuration TestLinkLocalAppC {
} implementation {
components MainC, LedsC;
components TestLinkLocalC;
components IPStackC;
components new TimerMilliC();
components new UdpSocketC();
TestLinkLocalC.Boot -& MainC;
TestLinkLocalC.SplitControl -& IPStackC;
TestLinkLocalC.Sock -& UdpSocketC;
TestLinkLocalC.Timer -& TimerMilliC;
TestLinkLocalC.Leds -& LedsC;
components StaticIPAddressTosIdC; // Use TOS_NODE_ID in address
//components StaticIPAddressC; // Use LocalIeee154 in address
TestLinkLocalC.nc文件:
/*******************************************************************
*实验5----zigbee blip实验
*节点需求数 &= 2
*编译命令make cc2538cb blip id.xx (xx为1~65533)
********************************************************************/
#include &blip_printf.h&
#include &lib6lowpan/ip.h&
module TestLinkLocalC {
interface B
interface SplitC
interface UDP as S
interface Timer&TMilli&;
interface L
} implementation {
nx_struct echo_state {
nx_uint32_
SVC_PORT = 10210,
CMD_ECHO = 1,
CMD_REPLY = 2,
/***************************************************
****************************************************/
event void Boot.booted() {
call SplitControl.start();
m_data.seqno = 0;
event void SplitControl.startDone(error_t e) {
/**开启约2秒的周期性定时器(单位毫秒)
call Timer.startPeriodic(2048);
/**端口绑定************************************/
call Sock.bind(SVC_PORT);
event void SplitControl.stopDone(error_t e) {}
/***************************************************
*Timer定时时间到事件
****************************************************/
event void Timer.fired() {
struct sockaddr_in6
inet_pton6(&ff02::1&, &dest.sin6_addr);
dest.sin6_port = htons(SVC_PORT);
m_data.cmd = CMD_ECHO;
m_data.seqno ++;
/***启动zigbee发送,可以自己修改发送内容和长度*****/
call Sock.sendto(&dest, &m_data, sizeof(m_data));
call Leds.led0Toggle();
/***************************************************
****************************************************/
event void Sock.recvfrom(struct sockaddr_in6 *src, void *payload,
uint16_t len, struct ip6_metadata *meta) {
nx_struct echo_state *cmd =
printf(&TestLinkLocalC: recv from: &);
printf_in6addr(&src-&sin6_addr);
printf(&\n&);
if (cmd-&cmd == CMD_ECHO) {
cmd-&cmd = CMD_REPLY;
call Sock.sendto(src, payload, len);
call Leds.led1Toggle();
printf(&TestLinkLocalC: reply seqno: %li\n&, cmd-&seqno);
call Leds.led2Toggle();
如果大家对nesC语法还是不熟悉,可以先去看看前6部实验帖子;
nx_struct---等价于struct{}__attribute__
((packed)) ;是为了兼容平台从8位单片机到32位arm的结构体对齐问题;常常使用的关键字;大家可以使用printf例程
测试一下一个struct里面有unsigned char/long成员后的sizeof打印和nx_struct的sizeof的区别;回忆2530的TinyOS代码,nesC编译成app.c后调用perl脚本对app.c进行转换,其中就必须注释掉了nx_struct生成的__attribute__
((packed)) ;
call SplitControl.start();这句代码大家可以使用yeti2插件图形化组件去查看代码(见视频),手动的分析代码;或者生成的app.c去查看,完成了什么,BLIP的地址初始化;
这个例程有视频,没记错应该是第十四部视频;
SplitControl.startDone事件开启一个2.048秒的周期性定时器;绑定端口,看到这里大家肯定很熟悉了,Socket的写法
inet_pton6(...)函数,说明一下对于TinyOS我们清楚函数修饰是command,但是由于它支持C的所有特性,所以对于C函数的调用和C语言写法一样,不需要使用call关键字;
call Sock.sendto(&dest, &m_data, sizeof(m_data)); 核心发包部分,也是咱们可以去DIY的,可以DIY内容,接收方解析;比如LED控制,大家可以自己去写;或者和之前的例程结合一下咱们可以发送采集的片内温度,又或者将串口接收的数据发送,做一个聊天QQ;
例程本质在烧写两个节点完成通信,定义
CMD_ECHO = 1,
CMD_REPLY = 2,
发送方发送CMD_ECHO
,接收方解析后发送回CMD_REPLY ;例程简单,不做截图了;
需要注意编译命令从这一部开始因为是多节点的通信,我们需要make的时候添加options了,前六部的编译命令是make
这个例程编译命令为make cc2538cb blip id.xx
如两个节点 我们可以make cc2538cb blip id.1烧写
make cc2538cb blip id.2烧写完成实验;
blip的make选项是通知nesC编译器使用blip栈;
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:29122次
排名:千里之外
原创:44篇
评论:33条
(1)(1)(2)(10)(12)(18)

我要回帖

更多关于 oppo怎么清除锁屏密码 的文章

 

随机推荐