一个PIC编程问题 折磨死寡人了快。。不知道你们遇到过没有 进来看看

2020-02-09 09:31发布

编译器是PICC9.80
pic16f887

做的是一个LCD12864的菜单程序。
不带字库的那种。所以存了很多字库代码。而且后来程序也比较大

现在的问题是  1.硬件堆栈 10级
              2.0. can't find 0x79A words (0x79a withtotal) for psect "stringtext" in segment "STRCODE" (largest unused contiguous range 0x74D)报这个错误。

分析了一下原因:

1.PIC的ROM分段  2K为一段。所以函数不能大于2K。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
19条回答
nome
2020-02-09 11:21
void Simmok_foot(void)
{
         u8 i,j;
         if(0==PORT_KEY_FOOT)       //检测脚踏        若有脚踏  退出放电  并且计数器加1
                         {
                                 i++;
                                 if(i==10)
                                 {
                                         i=0;
                                         ifoot=~ifoot;
                                         icounter++;
                                         EEPROM_Write(7,icounter);
                                         EEPROM_Write(6,icounter>>8);
                                         EEPROM_Write(5,icounter>>8>>8);
                                         EEPROM_Write(4,icounter>>8>>8>>8);
                                        Send_Dispdata(Disp_Count);
                                 }                                
                         }
        else
                         {
                                 j++;
                                 if(j>=ifreq)
                                 {
                                         j=0;
                                        PORT_3525=1;        //关充电
                                        delay_us(30);   //150us
                                        PORT_PPS=0;                //开放电
                                        delay_ms(3);    //2.84ms
                                        PORT_PPS=1;                //关放电
                                        delay_us(30);  //150us
                                        PORT_3525=0;  //开充电       
                                }
                         }
}
void Simmok_ad(void)
{
                 Ad();
                 Send_Dispdata(Disp_C);
                 if(Temper>=Max_temper)                //温度一旦超过设定。 取消放电
                 ifoot=~ifoot;
                 while(Temper>=Max_temper)                        //温度超过设定值后    程序停在此处   
                 {
                         Send_Dispdata(Disp_C);
                         Word(2,33,4,Zheng_Light,Language_select_6byte[Language]+72);   //设置
                         Beep();
                         Ad();
                 }         
}
void Simmok(void)
{

        if(1==PORT_SIMOK)    //未预燃
         {
                 if(0==Sim(5))   //执行预燃并且查看到没有预燃成功
                 Sys_state=Work_Wait;             //返回等待工作状态                
         }
          else                //预燃成功
         {
                 Word(0,49,2,Fan_Light,Language_select_4byte[Language]+2*48);   //反白触发
                Word(6,49,2,Fan_Light,Language_select_4byte[Language]+3*48);   //反白工作
                  Word(3,33,1,Zheng_Light,&Symboy1[5][0]);   //OK   
                 while(ifoot)   //脚踏要求放电
                 {
                         Simmok_foot();
                        Simmok_ad();
                 }
                     
         }
}

一周热门 更多>