首页 > 代码库 > ZigBee中内存管理(一个内存空间引发的血案)
ZigBee中内存管理(一个内存空间引发的血案)
这个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=http://www.mamicode.com/(ADC_Value *)osal_msg_allocate(sizeof(ADC_Value));>
本文出自 “飞鱼技术” 博客,请务必保留此出处http://flyingfish.blog.51cto.com/9580339/1586077
ZigBee中内存管理(一个内存空间引发的血案)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。