IT培训机构|91免费精品视频|专注编程培训|91免费精品|软件开发培训_91免费国产视频_华清远见教育

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > 第1章 Contiki Hello World實驗

第1章 Contiki Hello World實驗 時間:2014-09-18      來源:未知

本實驗定期的打印“hello world”,并且計數打印的個數。第二線程被稱作“blink”,實現LEDs的高速閃爍(如果在Hello world線程里,可能實現不了這么快的速度)。

C++ Code

#include "contiki.h"
        #include "dev/leds.h"
        
        #include <stdio.h> /* For printf() */
        /*---------------------------------------------------------------------------*/
        /* We declare the two processes */
        PROCESS(hello_world_process, "Hello world process");
        PROCESS(blink_process, "LED blink process");
        
        /* We require the processes to be started automatically */
        AUTOSTART_PROCESSES(&hello_world_process, &blink_process);
        /*---------------------------------------------------------------------------*/
        /* Implementation of the first process */
        PROCESS_THREAD(hello_world_process, ev, data)
        {
                // variables are declared static to ensure their values are kept
                // between kernel calls.
                static struct etimer timer;
                static int count = 0;
        
                // any process mustt start with this.
                PROCESS_BEGIN();
                // set the etimer module to generate an event in one second.
                etimer_set(&timer, CLOCK_CONF_SECOND);
        
                while (1)
                {
                        // wait here for an event to happen
                        PROCESS_WAIT_EVENT();
        
                        // if the event is the timer event as expected...
                        if(ev == PROCESS_EVENT_TIMER)
                        {
                                // do the process work
                                printf("Hello, world #%i\n", count);
                                count ++;
        
                                // reset the timer so it will generate an other event
                                // the exact same time after it expired (periodicity guaranteed)
                                etimer_reset(&timer);
                        }
        
                        // and loop
                }
                // any process must end with this, even if it is never reached.
                PROCESS_END();
        }
        
        /*---------------------------------------------------------------------------*/
        /* Implementation of the second process */
        PROCESS_THREAD(blink_process, ev, data)
        {
                static struct etimer timer;
                static uint8_t leds_state = 0;
                PROCESS_BEGIN();
        
                while (1)
                {
                        // we set the timer from here every time
                        etimer_set(&timer, CLOCK_CONF_SECOND / 4);
                        // and wait until the vent we receive is the one we're waiting for
                        PROCESS_WAIT_EVENT_UNTIL(ev == PROCESS_EVENT_TIMER);
        
                        // update the LEDs
                        leds_off(0xFF);
                        leds_on(leds_state);
                        leds_state += 1;
                }
                PROCESS_END();
        }
        /*---------------------------------------------------------------------------*/

1、線程啟動流程

a) 聲明線程PROCESS(name, strname),name線程名字,strname對線程名字的描述。

b) AUTOSTART_PROCESSES(&hello_world_process, &blink_process)開啟線程。

c) PROCESS_THREAD(hello_world_process, ev, data)線程宏定義。

第一個參數lc是英文全稱是local continuation(本地延續?,這個不好翻譯),它可以說就是protothread的控制參數,因為protothread的精華在C的switch控制語句,這個lc就是switch里面的參數;

第二個參數就是timer給這個進程傳遞的事件了,其實就是一個unsigned char類型的參數,具體的參數值在process .h中定義;

第三個參數也是給進程傳遞的一個參數(舉個例子,假如要退出一個進程的話,那么必須把這個進程所對應的timer也要從timer隊列timerlist清除掉,那么進程在死掉之前就要給etimer_process傳遞這個參數,參數的值就是進程本身,這樣才能是etimer_process在timer隊列里找到相應的etimer進而清除)。

上一篇:安卓程序解決網絡傳輸亂碼問題

下一篇:網絡超時檢測的三種方法

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

主站蜘蛛池模板: 生物除臭箱,玻璃钢拱形盖板_厂家_价格-河北润达环保设备有限公司 | 专业护工_医院护工_护工陪护_住家护工- 心陪护 | 铅板,防辐射铅板,医用铅板,保定美伦有色金属有限公司 | 西安外墙防水补漏-堵漏-防腐-保温工程公司-陕西宏图祥瑞实业有限公司 | 煤炭烘干机|煤泥烘干机|矿泥烘干机|酒糟烘干机|果渣烘干机-东鼎干燥官方网站 | 内蒙古天奇生物科技有限公司——OEM代工|ODM定制|原料供应|骨肽|片剂|胶囊剂|口服液 | 饲料设备_饲料加工设备_饲料成套加工设备专业提供商-河南杰昌机械设备有限公司 | 青岛抛丸机_抛丸清理机_树脂砂设备_除尘设备 | 压力试验机,万能试验机-北京大地华宇仪器设备有限公司 官网 | 首页--南京俊全科技有限公司,环保监测无人机,大疆无人机,农用无人机,植保无人机,巡检无人机,无人机环境监测仪,消防,无人机,航拍测绘,固定翼无人机,无人机电力巡检,四旋翼无人机 | 无塔供水_全自动无塔供水设备_石家庄工泉水处理_无塔供水器 | 陶瓷颗粒厂家_彩色路面_彩色陶瓷颗粒-山东顺驰道路材料有限公司 陶瓷复合钢管-专业提供江苏陶瓷钢管和陶瓷内衬复合钢管的生产厂家 | 沈阳东鹰实业有限公司【官网】-聚氨酯清扫器-胶带输送机保护装置 | 途远VR+_成都VR全景制作_成都360全景漫游_成都720全景航拍_成都途远科技有限公司 | 天津网站制作|网站建设|营销型网站建设|筑美网络---天津做网站公司 | 压缩强度测定仪-纸管平压强度测定仪-电脑拉力仪-杭州纸邦自动化技术有限公司 | 水性漆_水性漆厂家_水性涂料加盟代理_两只璧琥全漆定制官网 | 湖南流水线-湖南自动化设备-湖南输送设备-湘潭市友工自动化设备有限公司 | 尼日利亚SONCAP认证_沙特SABER认证_摩洛哥COC认证-诺帝检测技术(上海)有限公司 | 全自动拆包机,自动拆包机,全自动逐层拆包机,全自动吨袋拆包机,吨袋拆包机,管链输送机,气流分级机 | 泊头市特种油泵阀制造有限公司&nbsp;-&nbsp;渣油泵,重油泵,沥青泵,高压齿轮泵,煤焦油泵,导热油泵,三螺杆泵,圆弧齿轮泵,不锈钢齿轮泵, | 新硕考研_新硕寄宿考研-升学路上的规划师【官网】 | 激光切割加工,佛山激光切割加工,钣金加工,机加工-佛山市华锐达金属制品有限公司 | 输送机_山东输送机厂家-山东中输输送机械有限公司 | 宁波管道安装_宁波工业冷风机_宁波冷风机厂家_宁波厂房通风降温_「浙江甬风机电」 | 苏州不锈钢_江苏不锈钢_江苏不锈钢板_苏州模具钢_苏州合金钢_苏州特种合金_苏州不锈钢板_304不锈钢棒_苏州塞硒五金制品有限公司 苏州ERP定制|苏州CRM|苏州OA|苏州BPM|进销存管理系统-苏州中尚信息科技有限公司 | 绣花厂_电脑绣花厂_手工刺绣加工定制 - 北京丽绣坊工艺品有限公司 | 激光切割加工,佛山激光切割加工,钣金加工,机加工-佛山市华锐达金属制品有限公司 | 山东大龙食品有限公司| 全玻璃视镜人孔-卡箍组件-常压单臂梁人孔-温州华强流体设备有限公司 | 碳化硅微粉_超细碳化硅微粉_潍坊凯华碳化硅微粉有限公司 | 江苏瑞翔电器有限公司-| 冷库出租_食品/医药冷库租赁_冷库改建/定制-北京亚冷 | 无锡市恒威工业气体有限公司-工业高纯气体_高纯度特种气体 | 球形钢支座,粘滞阻尼器,抗震球型钢支座,盆式橡胶支座,调谐质量阻尼器,屈曲约束支撑-衡水路泽科技 | 绍兴上虞大成网络有限公司——因为专注,所以专业 | 钠长石-硅铁-硅钙-孕育剂-球化剂-安阳李氏实业有限公司 | 天然气车船展、氢能装备展、氢燃料汽车展、核电装备展、国防信息化装备展---北京企发展览服务有限公司 | 网带式等温正火生产线_燃气式铝合金加热炉_燃气式烘干窑炉-湖州中科炉业科技有限公司 | 呼吸家官网|肺功能检测仪生产厂家|国产肺功能仪知名品牌|肺功能检测仪|肺功能测试仪|婴幼儿肺功能仪|弥散残气肺功能仪|肺功能测试系统|广州红象医疗科技有限公司|便携式肺功能仪|大肺功能仪|呼吸康复一体机|儿童肺功能仪|肺活量计|医用简易肺功能仪|呼吸康复系统|肺功能仪|弥散肺功能仪(大肺)|便携式肺功能检测仪|肺康复|呼吸肌力测定肺功能仪|肺功能测定仪|呼吸神经肌肉刺激仪|便携式肺功能 | 上海层傲传动设备有限公司 - 工业皮带,输送带,传动带 |