zoukankan      html  css  js  c++  java
  • 实验十 任务建立实验

    实验 任务建立实验
    【实验目的】
    1. 了解 ZigBee 2007 协议栈操作系统的工作机制
    2. 熟悉系统中任务的基本格式
    【实验设备】
    1. 装有 IAR 开发工具的 PC 机一台
    2. 实验箱一台
    3. CCDebugger(以及 USB A-B 延长线)一个
    【实验要求】
    按照操作系统中任务的格式编写应用程序,实现每隔 1 秒钟让节点上的 LED 灯闪烁一次。

    任务的概念:

    一个任务(也称作一个线程),是一个简单的程序。该程序可以认为 CPU 完全只属于自己。实时应用
    程序的设计思想是将问题分割成多个任务,每个任务都是整个应用程序的一部分,并赋予一定的优先级。

    实验流程图

    实验步骤

    1. PC机和实验箱用仿真器连接;
    2. 打开IAR,找到对应的任务代码,进行调试;
    3. APP组中的APP_Base.c中可以看到任务数组tasksArr,建立了任务处理函数,

     

    1. 在osalInitTasks函数中,为该任务提供一个定时器,

     

    调试,可以看到节点每隔一秒钟周期闪烁。

    实验感想

    刚开始接触Zigbee,比较陌生,对实验箱和代码还有IAR都不熟悉,查阅了网上一些资料,通过老师提供的实验指导书和光盘资料才把实验调试出来。通过这次实验,摸索了一段时间,弄懂了任务的格式,如何建立一个任务和任务的执行。

    完整实验代码

    #include "APP_Base.h"

    #if defined(SAPP_ZSTACK_DEMO)

    #include "hal_led.h"

    // 任务建立实验范例代码

    // 任务处理函数

    uint16 Hello_ProcessEvent(uint8 task_id, uint16 events);

    uint16 Hello_ProcessEvent(uint8 task_id, uint16 events)

    {

        if(events & 0x0001)

        {

            // 控制LED闪烁

            HalLedBlink(HAL_LED_1, 1, 50, 250);

            // 启动定时器, 设置1秒钟后再次触发该任务

            osal_start_timerEx(task_id, 0x0001, 1000);

        }

        // 清除定时器事件标志

        return (events ^ 0x0001);

    }

    #endif

    // 任务列表

    const pTaskEventHandlerFn tasksArr[] = {

        macEventLoop,

        nwk_event_loop,

        Hal_ProcessEvent,

    #if defined( MT_TASK )

        MT_ProcessEvent,

    #endif

        APS_event_loop,

    #if defined ( ZIGBEE_FRAGMENTATION )

        APSF_ProcessEvent,

    #endif

        ZDApp_event_loop,

    #if defined ( ZIGBEE_FREQ_AGILITY ) || defined ( ZIGBEE_PANID_CONFLICT )

        ZDNwkMgr_event_loop,

    #endif

    #if defined(SAPP_ZSTACK)

        sapp_controlEpProcess,

        sapp_functionEpProcess,

    #endif

    #if defined(SAPP_ZSTACK_DEMO)

        // 任务建立实验范例代码

        // 任务列表

        Hello_ProcessEvent,

    #endif

    };

    const uint8 tasksCnt = sizeof(tasksArr)/sizeof(tasksArr[0]);

    // 初始化任务

    void osalInitTasks( void )

    {

        uint8 taskID = 0;

        macTaskInit( taskID++ );

        nwk_init( taskID++ );

        Hal_Init( taskID++ );

    #if defined( MT_TASK )

        MT_TaskInit( taskID++ );

    #endif

        APS_Init( taskID++ );

    #if defined ( ZIGBEE_FRAGMENTATION )

        APSF_Init( taskID++ );

    #endif

        ZDApp_Init( taskID++ );

    #if defined ( ZIGBEE_FREQ_AGILITY ) || defined ( ZIGBEE_PANID_CONFLICT )

        ZDNwkMgr_Init( taskID++ );

    #endif

    #if defined(SAPP_ZSTACK)

        sapp_taskInitProcess();

    #endif

    #if defined(SAPP_ZSTACK_DEMO)

        // 任务建立实验范例代码

        // 启动定时器

        osal_start_timerEx(taskID, 0x0001, 1000);

    #endif

    }

  • 相关阅读:
    ERRORCODE=4228, SQLSTATE=null
    DB2和Oracle中唯一约束和唯一索引对比
    SW 3D 样条曲线
    SW 快速操作
    spring依赖注入的方式(一)
    Oracle Connect By的用法
    转:min(x,y)高效算法
    【转】QQ盗号核心编程
    转:理解并解决GBK转UTF8奇数中文乱码
    Oracle数据库的导入和导出命令
  • 原文地址:https://www.cnblogs.com/LeonNchu/p/10695801.html
Copyright © 2011-2022 走看看