找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 427|回复: 7
收起左侧

PIC单片机代码问题,显示eeprom的存储空间不足,试过好几种方法还是报错

[复制链接]
ID:1107532 发表于 2024-1-18 13:49 | 显示全部楼层 |阅读模式
请大佬看看是pic16f676单片机代码哪儿的问题
报错显示::: warning: (1273) Omniscient Code Generation not available in Free mode
miewendeng.c:479: warning: (752) conversion to shorter data type
D:\XC8\sources\pic\eeread.c:12: error: (1360) no space for auto/param eeprom_write@addr
(908) exit status = 1
nbproject/Makefile-default.mk:131: recipe for target 'dist/default/production/miewendeng.X.production.hex' failed
make[2]: Leaving directory 'D:/MPLAB X IDE v4.05???/miewendeng.X'
nbproject/Makefile-default.mk:90: recipe for target '.build-conf' failed
make[1]: Leaving directory 'D:/MPLAB X IDE v4.05???/miewendeng.X'
nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed
make[2]: *** [dist/default/production/miewendeng.X.production.hex] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2

编译已失败 (退出值2, 总时间: 1s)
----------------------------------------
警告:adcshili.c:418: warning: (752) conversion to shorter data type这个警告表示在第418行进行了将数据类型转换为较短的数据类型的操作。
错误:D:\XC8\sources\common\lwdiv.c:31: error: (1358) no space for _eeprom_read temps (1)这个错误表示编译器无法为_eeprom_read temps分配足够的空间。
eeprom_write(0x03,eeprom_read(0x03)+1);  //清虫天数计数+1天  418行
请问大佬这个代码该怎么改啊,刚刚入行的小白琢磨了好几天还是一头雾水。

  1. /*
  2. * File:   adcshili.c
  3. * Author: Administrator
  4. *
  5. * Created on 2024年1月5日, 上午9:24
  6. */

  7. //#include <stdio.h>
  8. //#include <stdlib.h>

  9. /*
  10. *
  11. */

  12. /*
  13. int main(int argc, char** argv) {

  14.     return (EXIT_SUCCESS);
  15. }
  16. */

  17. # include <xc.h>

  18. #pragma config FOSC = INTRCIO   // Oscillator Selection bits (INTOSC oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN)INTOSC 振荡器, RA4、RA5为IO口
  19. #pragma config WDTE = OFF      // Watchdog Timer Enable bit (WDT enabled)看门狗开
  20. #pragma config PWRTE = ON       // Power-up Timer Enable bit (PWRT enabled)上电复位开
  21. #pragma config MCLRE = OFF      // RA3/MCLR pin function select (RA3/MCLR pin function is digital I/O, MCLR internally tied to VDD)RA3/MCLR引脚功能为MCLR
  22. #pragma config BOREN = OFF       // Brown-out Detect Enable bit (BOD enabled)欠压检测功能关
  23. #pragma config CP = OFF         // Code Protection bit (Program Memory code protection is disabled)程序存储器代码保护被禁用
  24. #pragma config CPD = OFF        // Data Code Protection bit (Data memory code protection is disabled)数据代码保护关
  25. //__ CONFIG(0X31A4);
  26. __EEPROM_DATA(5,50,67,6,5,0,0,0);   //0X00第一位表示定时倍数;0X01第二位表示最低电压-低;0X02第三位表示最高电压-高;0X03第四位表示清虫天数记录;0X04第五位表示清虫天数预设;0X05第五位表示为0铅酸电池(最低不能低于2点几V)、为1锂电池(最高不能超过12.6V);0X06空;0X07空

  27. #define uchar unsigned char
  28. #define uint unsigned int

  29. /*#define EEPROM_ADDRESS 0x10 // 定义EEPROM地址

  30. // 定义EEPROM中存储的数据
  31. const unsigned char myEEPROMData[] __at(EEPROM_ADDRESS) = {
  32.     0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
  33. };
  34. __EEPROM_DATA(5,50,67,6,5,0,0,0);*/

  35. uint AN2_val;       //存放AN2通道模拟转换的值
  36. uint AN4_val;       //存放AN4通道模拟转换的值
  37. uchar i = 0;
  38. uchar j = 0;
  39. uint yanshi;
  40. uchar AN2_num1;
  41. uchar AN2_num2;
  42. uchar AN2_num3;
  43. uchar AN4_num1;
  44. uchar AN4_num2;
  45. uchar AN4_num3;
  46. uchar AN4_num4;
  47. uchar yukon_num1;
  48. uchar yukon_num2;
  49. uint anjian_num1;
  50. uchar anjian_num2;
  51. uchar n;
  52. uint num;
  53. uchar daochon_num;
  54. uchar h;
  55. uchar day;         //0为白天,1为晚上
  56. uchar fuzhai=1;     //负载开启
  57. uchar chondian;     //0为充电完成,1为充电未完成,继续充电
  58. uchar taiyangban;   //1为太阳板电压高于电池,0为太阳板电压低于电池
  59. uchar ONOFF=1;  //放电到充电一循环,1开启,0关闭
  60. uchar qcts;
  61. uchar k;
  62. uchar a=6;
  63. uchar t;
  64. uchar z=0;
  65. uchar m;

  66. void init1()
  67. {
  68.     TRISA = 0b00110100;     //设置RA输入输出端口   RA2,RA4,RA5(AN2、AN3)为输入,其他输出
  69.     TRISC = 0b00010011;     //设置RC输入输出端口   RC0、RC1、RC4(AN4、AN5)为输入,其他输出
  70.     PORTA = 0b00000000;     //设置A端口输出为低电平
  71.     PORTC = 0b00000000;     //设置C端口输出为低电平
  72.     ANSEL = 0X14;           //ANS4=1,ANS2=1;AN4和AN2为模拟输入   二进制00010100
  73.    /* CM2 = 1;                //CM2:CM0:111 比较器模式位(关闭)
  74.     CM1 = 1;
  75.     CM0 = 1;*/
  76.     //ADCON1 = 0X10;          //ADCS<2:0>:A/D 转换时钟源选择位   0011 =FOSC/8  4MHz频率   二进制00010000
  77.     ADCON1=0b01010000;  //AD,RC0(AN4)定义为AD口(A/D 转换时钟选择位)
  78. }


  79. void ADAN2()         //对RA2(AN2)进行A/D模拟转换输入
  80. {   
  81.     ADCON0 = 0X09;  //二进制0000 1001 (bit7:0 左对齐,bit6:0 参考电压VDD, bit5:0 未用, bit4-bit2:010 通道02(AN2), bit1:0 A/D转换结束/未进行, bit0:(ADON)1 A/D转换模块正在工作)    A/D 控制寄存器
  82.     for (i=0; i<16; i++)
  83.     {
  84.         asm("NOP");  //稍微延时
  85.         asm("NOP");
  86.         asm("NOP");
  87.         asm("NOP");  

  88.         GO_DONE = 1;    //1 = A/D 转换正在进行。该位置 1 将启动 A/D 转换。 在转换结束后该位将被硬件自动清零。      ADCON0 _ A/D 控制寄存器
  89.         while (GO_DONE)   //循环检测GO_DONE是否为0,为0转换结束
  90.         {
  91.             continue;
  92.         }
  93.         AN2_val + = ADRESH;   //将左对齐后的20次结果赋值
  94.     }

  95.     ADON = 0;   //A/D转换模块结束
  96.     AN2_val = AN2_val/16;  //取20次检测电压的平均值

  97.     if (AN2_val < eeprom_read(0X01))   //读写寄存器__EEPROM_DATA(5,50,67,6,5,0,0,0)中第二位,电源电压为10.8v时,电路分压后测出AN2电压为:0.98v  (5v是参考电压,一个数值代表多少电压:5/1024=0.00448,如果输入电压为0.98v,0.98/0.00448=218.75)
  98.     {
  99.         AN2_num1++;
  100.         if(AN2_num1 > 16)     //(超过20次电压低于10.8v)
  101.         {
  102.             AN2_num1 = 0;   //计数清0
  103.             fuzhai = 0;    //负载未开启工作
  104.         }
  105.     }
  106.     else
  107.     {
  108.         AN2_num1 = 0;   //清0
  109.     }

  110.     if (AN2_val > eeprom_read(0X02))   //读写寄存器__EEPROM_DATA(5,50,67,6,5,0,0,0)中第三位,电源电压为14.4v时,电路分压后测出AN2电压为:1.31v   (如果输入电压为1.31v,1.31/0.00448=292.41)
  111.     {
  112.         AN2_num2++;
  113.         if(AN2_num2++ > 16)   //(超过20次电压高于14.4v)
  114.         {
  115.             AN2_num2 = 0;   //计数清0
  116.             chondian = 0;  //充电完成
  117.         }
  118.     }
  119.     else
  120.     {
  121.         AN2_num3++;  //计数自增
  122.         if (AN2_num3 > 16)   //(超过20次电压低于14.4v)
  123.         {
  124.             AN2_num3 = 0;   //计数清0
  125.             chondian = 1;   //充电未完成,继续充电
  126.         }
  127.     }
  128. }


  129. void ADAN4()         //对RC0(AN4)进行A/D模拟转换输入
  130. {
  131.     ADCON0 = 0X11;  //二进制0000 1001 (bit7:0 左对齐,bit6:0 参考电压VDD, bit5:0 未用, bit4-bit2:100 通道04(AN4), bit1:0 A/D转换结束/未进行, bit0:(ADON)1 A/D转换模块正在工作)    A/D 控制寄存器
  132.     for (j=0; j<16; j++)
  133.     {
  134.         asm("NOP");  //稍微延时
  135.         asm("NOP");
  136.         asm("NOP");
  137.         asm("NOP");  

  138.         GO_DONE = 1;    //1 = A/D 转换正在进行。该位置 1 将启动 A/D 转换。 在转换结束后该位将被硬件自动清零。      ADCON0 _ A/D 控制寄存器
  139.         while (GO_DONE)   //循环检测GO_DONE是否为0,为0转换结束
  140.         {
  141.             continue;
  142.         }
  143.         AN4_val + = ADRESH;   //将左对齐后的20次结果赋值
  144.     }

  145.     AN4_val = AN4_val/16;  //取20次检测电压的平均值
  146.     ADON = 0;   //A/D转换模块结束

  147.     if(AN2_val - AN4_val < 13)   //连续检测20次太阳板比铅酸电池或锂电池低于3V   (晚上)
  148.     {
  149.         AN4_num1++;
  150.         if (AN4_num1 > 24)  //(超过20次太阳板电压比电源电压低于3v)
  151.         {
  152.             AN4_num1 = 0;   //计数清0
  153.             day = 1;   //晚上        
  154.         }
  155.     }   
  156.     else
  157.     {
  158.         AN4_num1 = 0;
  159.     }

  160.     if (AN2_val - AN4_val > 23)  //连续检测20次太阳板高于5.5V的铅酸电池或锂电池   (白天)
  161.     {
  162.         AN4_num2++;
  163.         if (AN4_num2 > 24)   //(超过20次太阳板电压比电源电压高于5.5v)
  164.         {
  165.             AN4_num2 = 0;
  166.             day = 0;  //白天
  167.         }
  168.     }
  169.     else
  170.     {
  171.         AN4_num2 = 0;
  172.     }

  173.     if (AN4_val < 0b00000011)  //连续检测20次太阳板电压高于电池电压,开始充电,连续检测20次太阳板电压低于电池电压,不充电
  174.     {
  175.         AN4_num3++;
  176.         if (AN4_num3 > 16)  //连续检测20次太阳板电压高于电池电压
  177.         {
  178.             AN4_num3 = 0;  //计数清零
  179.             taiyangban = 1;  //1为太阳板电压高于电池
  180.             fuzhai = 1;  //负载工作开启
  181.             ONOFF=1;  //放电到充电一循环,开启
  182.         }
  183.     }
  184.     else
  185.     {
  186.         AN4_num4++;
  187.         if (AN4_num4 > 16)  //连续检测20次太阳板电压低于电池电压
  188.         {
  189.             AN4_num4 = 0;  //计数清零
  190.             taiyangban = 0;  //0为太阳板电压低于电池
  191.         }
  192.     }
  193. }


  194. void kaijishansuo()   //开机闪烁5次
  195. {
  196.     if (yanshi > 800)  //1s溢出(3906)
  197.     {
  198.         yanshi = 0;
  199.         if (z == 0)
  200.             z = 1;
  201.         else
  202.             z = 0;
  203.         a--;
  204.     }
  205. }


  206. void condianshansuo()    //充电连续闪烁   
  207. {
  208.     if (yanshi > 1500)  //1s溢出
  209.     {
  210.         yanshi = 0;
  211.         if (z == 0)
  212.             z = 1;
  213.         else
  214.             z = 0;
  215.     }
  216. }


  217. void panduan ()    //转换后的数据判断,定义是否需要开灯、充电、雨控等待
  218. {
  219.     if (fuzhai == 1)   //负载开启
  220.     {
  221.         if (day == 1)  //晚上
  222.         {
  223.             if (ONOFF == 1)  //放电到充电一循环,开启
  224.             {
  225.                 TMR1ON=1;  //中断TMR1开启,开始计时
  226.                 if (RC1 == 0)  //雨控控制,0为雨控检测无雨,短接帽断路
  227.                 {
  228.                     yukon_num1++;
  229.                     if (yukon_num1 > 16)  //检测超过20次没有雨
  230.                     {
  231.                         yukon_num1 = 0;  //计数清0
  232.                         RC2 = 1;  //没有雨水,继电器启动
  233.                     }
  234.                 }
  235.                 else   //雨控控制,0为雨控检测有雨,短接帽连通,将5v电压拉到RC1引脚
  236.                 {
  237.                     yukon_num2++;
  238.                     if (yukon_num2 > 16)   //检测超过20次有雨
  239.                     {
  240.                         yukon_num2 = 0;  //计数清0
  241.                         RC2 = 0;   //下雨,继电器关闭
  242.                     }
  243.                 }
  244.             }
  245.             else
  246.             {
  247.                RC2 = 0;  //未实现放电到充电的循环,继电器关闭,负载未启动
  248.             }
  249.         }
  250.         else
  251.         {
  252.             RC2 = 0;  //白天继电器关闭,负载未启动
  253.         }
  254.     }
  255.     else
  256.     {
  257.         RC2 = 0;  //继电器关闭,负载未启动
  258.     }

  259.     if (chondian == 1)  //1为充电未完成,继续充电
  260.     {
  261.         if (taiyangban == 1)  //1为太阳板电压高于电池
  262.         {
  263.             RC1 = 1;  //RC3高电平,电源模块充电,太阳板给电池充电
  264.             if (num > 0)
  265.                 num = 0;  //定时清0
  266.             if (h > 0)
  267.                 h = 0;
  268.             condianshansuo();  ////充电蓝灯闪烁
  269.         }
  270.         else
  271.         {
  272.             RC3 = 0;  //充电完成,RC3低电平,电源模块不充电
  273.             if (a < 1)   //蓝灯不闪烁
  274.                 z = 0;   //RA0=0
  275.         }
  276.     }
  277.     else
  278.     {
  279.         RC3 = 0;  //充电完成,RC3低电平,电源模块不充电
  280.         if (a < 1)  //蓝灯不闪烁
  281.             z = 0;  //RA0=0
  282.     }
  283. }


  284. void anxia()
  285. {
  286.     anjian_num1++;
  287.     if (anjian_num1 > 4000)  
  288.     {
  289.         anjian_num1 = 0;
  290.         anjian_num2++;  //增加一小时(定时数据)
  291.         a = 2;   //蓝灯闪烁一次
  292.         k = 1;  //有未写入数据
  293.     }
  294. }


  295. void sonkai()
  296. {
  297.     if(k == 1)
  298.     {
  299.         eeprom_write(0x04,anjian_num2);  //把anjian_num2写到地址0x04
  300.         qcts = anjian_num2;  //清除定时时间
  301.         k = 0;   //没有未写入数据
  302.         anjian_num1 = 0;  
  303.         anjian_num2 = 0;  //清除定时数据
  304.     }

  305.     if(t == 1)  //开始读定时时间
  306.     {
  307.         if (a < 1)  //蓝灯不闪烁的时候
  308.         {
  309.             if (anjian_num2 > 0)  //定时时间大于0
  310.             {
  311.                 anjian_num1++;
  312.                 if (anjian_num1 > 4000)  //延时7200
  313.                 {
  314.                     if (anjian_num1%2000 == 0)  //延时时间/2000=0
  315.                     {
  316.                         anjian_num2--;  //减去一次已显示的
  317.                         a = 2;    //蓝灯闪烁一次
  318.                     }
  319.                 }
  320.             }
  321.             else
  322.             {
  323.                 t = 0;    //读定时时间控制位清除
  324.                 anjian_num1;  //延时清零
  325.             }
  326.         }
  327.     }
  328.     else
  329.     {
  330.         if ( anjian_num1>200 )  //短按10s-20s之间,可以开始读定时间t=1
  331.         {
  332.             if (anjian_num1<1000)
  333.             {
  334.                 a = 6;    //开始读蓝灯闪烁5次
  335.                 t = 1;    //开始读定时时间
  336.                 anjian_num2 = eeprom_read(0x04);     //从内存读取定时数据
  337.             }
  338.         }
  339.         anjian_num1 = 0;   //延时清零
  340.     }
  341. }

  342. void shezhi()  //设置定时时间
  343. {
  344.     if (RC4 == 0)  //按键按下
  345.         anxia();
  346.     else  //按键松开
  347.         sonkai();
  348. }


  349. void dianchi()  //每次开机判断所使用的电池,和读入定时时间
  350. {
  351.     if (RA4 == 0 )  ////RA4口为低时是用蓄电池
  352.     {
  353.         if (eeprom_read(0x05)==1)   //如果RA4口为蓄电池,控制位为1时,就写入蓄电池的数据
  354.         {
  355.             eeprom_write(0x01,50);  //最低电压
  356.             eeprom_write(0x02,67);  //最高电压
  357.             eeprom_write(0x05,0);  //标记为蓄电池   ????
  358.         }
  359.     }
  360.     else        //RA4口为高时是用锂电池
  361.     {
  362.          if (eeprom_read(0x05)==0)   //如果RA4口为锂电池,控制位为0时,就写入锂电池的数据
  363.         {
  364.             eeprom_write(0x01,43);  //最低电压(41)
  365.             eeprom_write(0x02,58);  //最高电压
  366.             eeprom_write(0x05,1);  //标记为锂电池   ???
  367.         }
  368.     }

  369.     qcts = eeprom_read(0x04);    //(预计清·虫天数为5天一次)
  370.     if(eeprom_read(0x03) <= qcts)   //(判断清除天数几天一次)
  371.         eeprom_write(0x03,6);   //(将清虫天数记录设为6天一次)
  372. }


  373. void  init2 ()
  374. {
  375.     T0CS = 0;  //Timer0使用内部时钟             OPTION_REG _ 选择寄存器
  376.     PSA=1;   //将预分频器给看门狗WDT           OPTION_REG _ 选择寄存器
  377.     TMR0=0x00;  //定时器
  378.     T0IF=1;  //Timer0 启动控制位使能(0关闭)(标志位)    INTCON _ 中断控制寄存器
  379.     T0IE=1;  //Timer0中断开启(使能位)                   INTCON _ 中断控制寄存器

  380.     TMR1CS = 0;  //Timer1使用内部时钟           Timer1 控制寄存器
  381.     T1CKPS0=1;  //1:8倍预分频比                Timer1 控制寄存器      T1CKPS1:T1CKPS0:11=1:8倍预分频比
  382.     T1CKPS1=1;  //1:8倍预分频比                Timer1 控制寄存器
  383.     //TMR1H=(65536-(500000/8))/256; //初始化TMR1的高八位初始值   0.5s中断溢出一次
  384.     //TMR1L=(65536-(500000/8))%256; //初始化TMR1的低八位初始值
  385.     TMR1H=0x0B;  //高八位置初始值   
  386.     TMR1L=0xE9;  //低八位置初始值  
  387.     TMR1ON=0;  //Timer1 启动控制位使能(0关闭)       Timer1 控制寄存器
  388.     TMR1IF=0;  //中断标志位清零                      外设中断标志寄存器 1
  389.     TMR1IE=1;  //Timer1中断开启                      外设中断使能寄存器 1
  390.     PEIE=1;  //外部中断开启                          INTCON ? 中断控制寄存器
  391.     GIE=1;  //全局中断开启                           INTCON ? 中断控制寄存器
  392. }


  393. void dc()  //倒虫
  394. {
  395.     if (RC5 == 0)
  396.         RC5 = 1;

  397.     if (RC5 == 1  && RA5 == 0)
  398.         m = 1;           //(步骤控制)

  399.     if (RC5 == 1 && RA5 == 1 && m == 1)
  400.     {
  401.         daochon_num++;  //倒虫天数增加
  402.         m = 0;
  403.     }

  404.     if (daochon_num >= 2)  //超过两天清一次虫
  405.     {
  406.         daochon_num = 0;   //清0
  407.         RC5 = 0;
  408.         eeprom_write(0x03,0);
  409.     }
  410. }

  411. void interrupt time0()
  412. {

  413.    if (TMR1IF == 1)
  414.     {
  415.         TMR1IF=0;  //中断标志溢出清0
  416.         //TMR1H=(65536-(500000/8))/256; //初始化TMR1的高八位初始值
  417.         //TMR1L=(65536-(500000/8))%256; //初始化TMR1的低八位初始值
  418.         TMR1H=0x0B;  //高八位置初始值   
  419.         TMR1L=0xE9;  //低八位置初始值  
  420.         num++;

  421.         if (num == 139)  //定时计时1一个小时溢出
  422.         {
  423.             h++;  //每小时自增
  424.             num = 0;  //溢出清0

  425.             if (h == 1)
  426.             {
  427.                 eeprom_write(0x03,eeprom_read(0x03)+1);  //清虫天数计数+1天
  428.             }

  429.             if (h == 5)  //等于设定的小时
  430.             {
  431.                 h = 0;  //小时清零
  432.                 RC2 = 0;  //继电器/负载关闭
  433.                 ONOFF=0;  //放电到充电一循环,时间到置0,关闭               
  434.                 TMR1ON=0;  //Timer1 启动控制位使能(0关闭)
  435.             }
  436.         }
  437.     }

  438.    if (T0IF == 1)  //1 = TMR0 寄存器溢出 (必须在软件中清除) 0 = TMR0 寄存器没有溢出
  439.    {
  440.        T0IF = 0; //tmr0溢出清零
  441.        yanshi++;
  442.        TMR0=0x00;
  443.        n++;
  444.        if (n > 250)  //1s/256us=3906.25,1秒溢出
  445.        {
  446.            n = 0;  //溢出清0
  447.            ADAN2();  //读AD转化口RA2/AN2
  448.            ADAN4();  //读AD转化口RC0/AN4
  449.            panduan ();  //转换后的数据判断,定义是否需要开灯、充电、雨控等待

  450.            if (eeprom_read(0x03)>=qcts && TMR1ON==1)  //读清虫设定天数2天的时候  ?????
  451.                dc();  //倒虫
  452.        }

  453.        if (a > 0)
  454.            kaijishansuo();   //开机蓝灯闪烁5次
  455.        if (z == 1)
  456.            RA0 = 1;  //蓝灯闪烁
  457.        else
  458.            RA0 = 0;

  459.        shezhi();  //设置定时时间
  460.    }
  461. }



  462. void main ()
  463. {
  464.     init1();     //通道初始化

  465.     init2 ();    //定时器初始化

  466.     dianchi();   //电池选择

  467.     dc();   //倒虫

  468.     while (1)    //死循环
  469.     {
  470.     }
  471. }
复制代码



回复

使用道具 举报

ID:227818 发表于 2024-1-18 14:52 | 显示全部楼层
我看错了。
回复

使用道具 举报

ID:883242 发表于 2024-1-18 15:17 | 显示全部楼层
freemode是给你插入大量无意义的代码的意思。
回复

使用道具 举报

ID:1107532 发表于 2024-1-18 15:37 | 显示全部楼层

没事没事,不知道大佬看出是哪的问题没有
回复

使用道具 举报

ID:1107532 发表于 2024-1-18 15:40 | 显示全部楼层
Hephaestus 发表于 2024-1-18 15:17
freemode是给你插入大量无意义的代码的意思。

可是这些代码我都有用到啊,那这种情况咋处理啊
回复

使用道具 举报

ID:1004920 发表于 2024-1-19 10:38 | 显示全部楼层
这个问题的出现应该 是Data space空间不足,你把定义的变量尽量压缩,程序尽量优化。还是不行的话就换空间大的单片机,我把你的程序放在单片机是16f913是可以编译通过的
回复

使用道具 举报

ID:1107532 发表于 2024-1-19 16:57 | 显示全部楼层
zch5200 发表于 2024-1-19 10:38
这个问题的出现应该 是Data space空间不足,你把定义的变量尽量压缩,程序尽量优化。还是不行的话就换空间 ...

我找到问题了,好像是MPLAB软件限制了定义的局部变量数量,我把一些变量定义到函数里去就可以编译了
回复

使用道具 举报

ID:1102070 发表于 2024-1-22 08:29 来自手机 | 显示全部楼层
换个存储大点的芯片。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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