基于物联网的智能家居系统设计(4)

2019-08-30 15:27

五 软件设计

5.1IAR开发环境

IAREmbedded Workbench简称为EW,它具备的调试器和C/C++交叉编译环境,是当今最易使用、最完整的嵌入式应用开发工具。针对不同的微处理器提供一样直观的用户界面,当前支持35种以上的32位、16位、8位ARM微处理器。

EW的组成部分为C-SPY调试器、嵌入式C/C++编译器、汇编器、库管理员、编译器、项目管理器和连接定位器。使用IAR的编译器不仅能节省硬件资源,最大限度降低产品成本,提高产品竞争力还能最大程度优化和紧凑代码。

IAR Embedded Workbench集成编译环境主要有以下特征:支持高效浮点运算、完全兼容C标准、高效的PROMable代码、目标特性扩充、内建对应芯片的程序速度和大小的优化器、版本控制和扩展工具支持良好、便捷的中断处理和模拟、内存模式选择、瓶颈性能分析、工程中相对路径支持。IAR EW8051集成开发环境如图6.1所示。

图6.1 IAR EW8051集成开发环境

5.2协调器节点程序

协调器的主要功能是建立网络,还有扫描网络信标、管理网络中节点的加入

16

/退出和存储节点信息,同时还提供关联节点之间的路由信息。

组建网络分为网络初始化和节点加入网络两个过程。ZigBee网络的建立是由协调器发起的,要组建网络的节点必须满足两个基本要求:一是节点必须是FFD节点,具备协调器的能力;二是节点还没有加入到其他网络中,网络初始化的流程如图6.2所示。

图6.2 协调器组网流程图

5.2.1网络组建

确定网络协调器、信道扫描过程、设置网络ID至此网络初始化就完成,相关代码如下

第一步:Z-Stack由 main()函数开始执行,main()函数共做了2件事:一是系统初始化,另外一件是开始执行轮转查询式操作系统

int main( void ) { ......

17

osal_init_system();//第二步,操作系统初始化 ......

osal_start_system();//初始化完系统任务事件后,正式开始执行操作系统

...... }

第二步,进入 osal_init_system()函数,执行操作系统初始化 uint8 osal_init_system( void ) {

osal_mem_init(); osal_qHead = NULL; osalTimerInit(); osal_pwrmgr_init();

osalInitTasks(); //第三步,执行操作系统任务初始化函数 osal_mem_kick(); return ( SUCCESS ); }

第三步,进入osalInitTasks()函数,执行操作系统任务初始化 void osalInitTasks( void ) //第三步,初始化操作系统任务 {

uint8 taskID = 0;

tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt);

osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt)); //任务优先级由高向低依次排列,高优先级对应 taskID 的值反而小 macTaskInit( taskID++ ); //不需要用户考虑 nwk_init( taskID++ ); //不需要用户考虑

Hal_Init( taskID++ );//硬件抽象层初始化,需要我们考虑 #if defined( MT_TASK ) MT_TaskInit( taskID++ ); #endif

18

APS_Init( taskID++ );//不需要用户考虑 #if defined ( ZIGBEE_FRAGMENTATION ) APSF_Init( taskID++ ); #endif

ZDApp_Init( taskID++ );//第四步,ZDApp层,初始化,执行ZDApp_init函数后,如果是协调器将建立网络,如果是终端设备将加入网络。

#if

defined

(ZIGBEE_FREQ_AGILITY)||defined

( ZIGBEE_PANID_CONFLICT )

ZDNwkMgr_Init( taskID++ ); #endif

SerialApp_Init( taskID );//应用层SerialApp层初始化,需要用户考虑在此处设置了一个按键触发事件,

//当有按键按下的时候,产生一个系统消息

}

第四步,进入ZDApp_init()函数,执行ZDApp层初始化 第五步,正式执行操作系统

void osal_start_system( void )//第五步,正式执行操作系统 {

#if !defined ( ZBIT ) && !defined ( UBIT ) for(;;)//死循环 #endif {

uint8 idx = 0; osalTimeUpdate(); Hal_ProcessPoll(); do {

if (tasksEvents) {

break;// 得到待处理的最高优先级任务索引号idx }

} while (++idx < tasksCnt);

19

if (idx < tasksCnt) {

uint16 events;

halIntState_t intState;

HAL_ENTER_CRITICAL_SECTION(intState);//进入临界区 events = tasksEvents;//提取需要处理的任务中的事件 tasksEvents = 0;// 清除本次任务的事件

HAL_EXIT_CRITICAL_SECTION(intState);//退出临界区 events = (tasksArr)( idx, events ); //通过指针调用任务处理函数,紧接着跳到相应的函数去处理,此为第五步

HAL_ENTER_CRITICAL_SECTION(intState);//进入临界区 tasksEvents |= events; // Add back unprocessed events to the current task.// 保存未处理的事件

HAL_EXIT_CRITICAL_SECTION(intState);//退出临界区 }

#if defined( POWER_SAVING ) else {

osal_pwrmgr_powerconserve(); } #endif } }

5.2.2节点之间的数据传输

在完成协调器组网以及终端节点加入网络后并进行数据传输,将协调器通过RS-232和PC相连,可以通过串口助手或者相应的开发软件来观察节点之间的数据传输。分析和处理数据,进行相关的控制操作,达到实时监控和智能控制的目的。

协调器与上位机采用RS-232串口,传输速率为115200bps,无校验位,8

20


基于物联网的智能家居系统设计(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:高二英语 Unit 4 Global Warming

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: