这个Zigbee的项目好久没有写了,现在对这个项目有点陌生,好多东西都搞不懂了。今天写一个简单的无线发送小程序时,一直出问题,程序调用zstack中的AF_DataRequest函数,如下
AF_DataRequest( &Coor_Addr, &App_epDesc, APP_CLUSTERID_ADC, sizeof(ADC_Value), (uint8 *)adc_value, &AppTransID, AF_DISCV_ROUTE, AF_DEFAULT_RADIUS );
(uint8 *)adc_value为要发送数据的地址,必须为8位无符号的指针。然后我就很悲催的写了一个结构体ADC_Value,全部的代码如下。
void ADC(void) { ADC_Value *adc_value; adc_value->x=HalAdcRead(HAL_ADC_CHANNEL_0,HAL_ADC_RESOLUTION_12); //计算数值 adc_value->y=HalAdcRead(HAL_ADC_CHANNEL_1,HAL_ADC_RESOLUTION_12);//计算数值 adc_value->z=HalAdcRead(HAL_ADC_CHANNEL_4,HAL_ADC_RESOLUTION_12);//计算数值 AF_DataRequest( &Coor_Addr, &App_epDesc, //发送数据 APP_CLUSTERID_ADC, sizeof(ADC_Value), (uint8 *)adc_value, &AppTransID, AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ); osal_start_timerEx(AppTaskID,APP_ADC_EVT,5000); //设置定时器,循环发送 }
编译后有个警告,“the adc_value is used before its value is set”,当时也没在意,下载程序到板子上后,数据发送第一次正常,其余的全部都是错误的数据,而且数据值全部一样,或者程序直接跑飞了。
我就百思不得其解啊,很郁闷,但又不知道问题出在哪里了。后来发现问题出在哪里了。不知道各位看官看出来问题在哪里没?
代码第一行ADC_Value *adc_value;只声明了一个指针,却没有分配内存空间,导致出现问题。用java用的连这个基本的问题都忽略了!这说明我学习还是不够用心不够深入。正确的代码为:
void ADC(void) { ADC_Value *adc_value; adc_value=(ADC_Value *)osal_msg_allocate(sizeof(ADC_Value)); adc_value->x=HalAdcRead(HAL_ADC_CHANNEL_0,HAL_ADC_RESOLUTION_12); adc_value->y=HalAdcRead(HAL_ADC_CHANNEL_1,HAL_ADC_RESOLUTION_12); adc_value->z=HalAdcRead(HAL_ADC_CHANNEL_4,HAL_ADC_RESOLUTION_12); AF_DataRequest( &Coor_Addr, &App_epDesc, APP_CLUSTERID_ADC, sizeof(ADC_Value), (uint8 *)adc_value, &AppTransID, AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ); osal_msg_deallocate((uint8 *)adc_value); osal_start_timerEx(AppTaskID,APP_ADC_EVT,5000); }
本文出自 “飞鱼技术” 博客,请务必保留此出处http://flyingfish.blog.51cto.com/9580339/1586077
原文地址:http://flyingfish.blog.51cto.com/9580339/1586077