概述
这个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);
}
转载于:https://blog.51cto.com/flyingfish/1586077
最后
以上就是寂寞苗条为你收集整理的ZigBee中内存管理(一个内存空间引发的血案)的全部内容,希望文章能够帮你解决ZigBee中内存管理(一个内存空间引发的血案)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复