OpenEdv-开源电子网

标题: emwin循环绘制波形图死机问题 [打印本页]

作者: hdchenwenhao    时间: 2020-12-1 16:04
标题: emwin循环绘制波形图死机问题
循环使用绘制波形的函数会死机,且死机时间不定函数如下:
datas:显示的数据,dataNums:数据个数。
static void _AddGraphValues(uint16_t * datas,int dataNums,float zoom,float zoomY,int startPoint) {
  unsigned i=0 ,j=0;
        int avaDatasNum = dataNums-startPoint;
        GRAPH_DATA_YT_Clear(_ahData[0]);//emwin固件库接口
        my_printf("dataNums:%d,zoom:%f,zoomY:%f,startP:%d", dataNums,zoom,zoomY,startPoint);
       
        for (j = 0; j <GraphWidth; j++) {
                if(i==0){
                        #ifdef MAX_SAMPLE_GRAPH
                                int16_t tmp = 0;
                               
                                for(int k = 0;k<zoom;k++){
                                        int index = startPoint+zoom*j+k;
                                        if(index>=dataNums)
                                                datas[index]=0x7FFF;
                                        tmp = datas[index]/200>tmp?datas[index]*zoomY/200:tmp;
                                }
                                _aValue = tmp;
                        #else
                                _aValue = datas[(int)(startPoint+j*zoom)]*zoomY/200;
                        #endif
                        if (_aValue > MAX_VALUE) {
                                _aValue = MAX_VALUE;
                        } else if (_aValue < 0) {
                                aValue=0x7FFF;
                        }
                        GRAPH_DATA_YT_AddValue(_ahData, _aValue); //emwin固件库接口
                }
        }
}
里面有两个EMIWN的API接口,只有把两个都注释掉才能不死机,留下任意一个都会在一段时间后死机. _有试过把aValue = datas[(int)(startPoint+j*zoom)]*zoomY/200;这一句改成aValue = j%100;,这样做屏蔽了发送过来的数据,但还是死机。



作者: 正点原子    时间: 2020-12-2 02:14
帮顶
作者: Cheng0717    时间: 2021-1-13 14:11
pc死机?还是单片机上
作者: xfcjava3    时间: 2021-1-16 15:58
_ahData,在添加点数据时,数组过界了!!!




欢迎光临 OpenEdv-开源电子网 (http://47.111.11.73/) Powered by Discuz! X3.4