找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 675|回复: 1
打印 上一主题 下一主题
收起左侧

C语言数组奇怪地址少一位,发生溢出

[复制链接]
跳转到指定楼层
楼主
ID:734017 发表于 2021-11-13 02:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SK_Data_KHz调到190的时候SK_Data_KHz_switch=0,SK_PWM=632 ,第0位发生溢出。
已经检查了好几次,关闭eeprom,刷了几次程序还是溢出。
后面发现地址错了一位,就是往前了一位。现在SK_Data_KHz=250 ,实际对应该SK_Data_KHz_switch=59;SK_PWM[59]=482.
SK_Data_KHz=190时SK_PWM数据为空 溢出。
不知为何会减1,就是加载的时候已以发生错误。


unsigned int SK_Data_KHz=250; //默认频率25K 每次加0.1
unsigned char SK_Data_KHz_switch=60; //默认 地址


                                                // 0  1 2 3 4 5 6 7 8 9 10
                                                // 190 191 192 193  194 195  196  197   198  199 200
code unsigned int SK_PWM[101]={ 632,   628, 625,  622,  619,  615,  612 ,609,  606 ,603, 600,
                                         //   11  12   13    14   15     16  17    18  19  20
                                         //   201 202  203    204   205  206  207  208  209   210
                                         597,  594,  591,  588,  585,  583,  580,  577,  574, 571,
                                        //    21  22   23  24   25  26 27 28   29   30
                                       //    211   212 213  214  215  216  217  218  219 220
                                        569,  566,  563,  561,  558,  556,  553, 550,  548, 545,
                                       //    31   32  33 34  35  36 37  38 39  40
                                       //  221 222  223  224  225  226 227 228 229 230
                                        543,  541  ,538,  536,  533, 531, 529,  526,   524, 522,
                                        //   41 42  43 44  45 46  47 48 49 50
                                       //   231  232  233 234  235 236  237  238  239 240
                                       519,  517,  515,  513,  511,  508, 506,  504,  502, 500,
                                       //   51  52  53  54  55  56   57   58  59 60
                                         //  241  242 243  244  245  246 247 248  249  250
                                         498,  496,  494,  492,  490,  488,  486, 484,  482, 480,
                                                                    ..............};


switch(buf[1])                              
            {
            case 0x71:  
                if( buf[3]==0x01 )                          //后台频率加+
                {   
                    memset(buf, 0, 18); //清空缓存区                 
                    if(SK_Data_KHz<280)
                    {
                        SK_Data_KHz++;
                        SK_Data_KHz_switch++;
                        SK_HZ_satar(SK_PWM[SK_Data_KHz_switch]);
                        send_string(ASCII_Data_add,18);                     
                        
                    }
                        
                    break;
                }
                if( buf[3]==0X02 )                          //后台频率加-
                {   
                    memset(buf, 0, 18); //清空缓存区                 
                    if(SK_Data_KHz>190)
                    {
                        SK_Data_KHz--;       //当SK_Data_KHz=190溢出
                        SK_Data_KHz_switch--;
                        SK_HZ_satar(SK_PWM[SK_Data_KHz_switch]);
                        send_string(ASCII_Data_subtract,18);
                    }
                    break;
                }
                if( buf[3]==0x03 )                          //返回保存
                    {   
                        memset(buf, 0, 18); //清空缓存
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:624769 发表于 2021-11-13 19:26 | 只看该作者
你光发个数组,别人帮你数一遍也不会发现什么问题。
最简单的方法:
把你觉得错位的数组, 从0开始依次 从串口 给你发过来,然后你核对那个位置开始错位了,方便你查找原因,为了方便核对 可以用TEXT 方式,按:
0)   0x....
1)   0x....
一行一个,
如果这样没错,说明数组是没有问题的,
那么你就用你调用数组的代码,读数组后,让串口发给你,

有时候自己的代码盯着看,怎么看怎么对,换几个方式也许很快就能发现问题。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表