2012-03-11 3 views
0

Я не уверен, что этот вопрос должен идти на электронику или нет, но поскольку речь идет о программировании, я спросил его здесь.CCS PIC16F628A Из ROM, сегмент или программа слишком велика

Я делаю цифровые часы, используя светодиоды, питаемые от сдвигового регистра вместо 7-сегментного дисплея. Во всяком случае, при компиляции кода с помощью CCS, я получаю следующее сообщение об ошибке:

***Error 71 "test.c" Line 195(0,1) Out of ROM, A segment or the program is too large num 
Seg 00004-007FF, 07DC left, need 07EA 
Seg 00000-00003, 0000 left, need 07EA 

и вот мой код до сих пор:

#include <16f628a.h> 
#use delay (crystal=32768) 

//to display a number on the LEDs using the 74164 shift register accordingly 
void num(int rnum, char out, char clk) { 

//start clear shift register 
    output_high(clk); 
    output_low(clk); 
    output_high(clk); 
    output_low(clk); 
    output_high(clk); 
    output_low(clk); 
    output_high(clk); 
    output_low(clk); 
    output_high(clk); 
    output_low(clk); 
    output_high(clk); 
    output_low(clk); 
    output_high(clk); 
    output_low(clk); 
    output_high(clk); 
    output_low(clk); 
//end clear shift register 

    switch(rnum) { 
     case 0: 
     output_high(out); 
     output_high(clk); 
     output_low(clk); 
     output_high(clk); 
     output_low(clk); 
     output_high(clk); 
     output_low(clk); 
     output_high(clk); 
     output_low(clk); 
     output_low(out); 
     output_high(clk); 
     output_low(clk); 
     output_high(out); 
     output_high(clk); 
     output_low(clk); 
     output_high(clk); 
     output_low(clk); 
     output_high(clk); 
     output_low(clk); 
     output_low(out); 

     break; 
     case 1: 
     output_low(out); 
     output_high(clk); 
     output_low(clk); 
     output_high(clk); 
     output_low(clk); 
     output_high(clk); 
     output_low(clk); 
     output_high(out); 
     output_high(clk); 
     output_low(clk); 
     output_low(out); 
     output_high(clk); 
     output_low(clk); 
     output_high(out); 
     output_high(clk); 
     output_low(clk); 
     output_low(out); 
     output_high(clk); 
     output_low(clk); 
     output_high(clk); 
     output_low(clk); 
     break; 
     case 2: 
     output_high(out);//7 
     output_high(clk); 
     output_low(clk); 
     output_low(out);//6 
     output_high(clk); 
     output_low(clk); 
     output_high(out);//5 
     output_high(clk); 
     output_low(clk); 
     output_high(clk);//4 
     output_low(clk); 
     output_high(clk);//3 
     output_low(clk); 
     output_low(out);//2 
     output_high(clk); 
     output_low(clk); 
     output_high(out); 
     output_high(clk); 
     output_low(clk); 
     output_low(out); 
     output_high(clk); 
     output_low(clk); 
     break; 
     case 3: 
     output_high(out);//7 
     output_high(clk); 
     output_low(clk); 
     output_high(clk);//6 
     output_low(clk); 
     output_high(clk);//5 
     output_low(clk); 
     output_low(out);//4 
     output_high(clk); 
     output_low(clk); 
     output_high(out);//3 
     output_high(clk); 
     output_low(clk); 
     output_low(out);//2 
     output_high(clk); 
     output_low(clk); 
     output_high(out);//1 
     output_high(clk); 
     output_low(clk); 
     output_low(out); 
     output_high(clk); 
     output_low(clk); 
     break; 
     case 4: 
     output_high(out);//7 
     output_high(clk); 
     output_low(clk); 
     output_high(out);//6 
     output_high(clk); 
     output_low(clk); 
     output_low(out);//5 
     output_high(clk); 
     output_low(clk); 
     output_low(out);//4 
     output_high(clk); 
     output_low(clk); 
     output_high(out);//3 
     output_high(clk); 
     output_low(clk); 
     output_high(out);//2 
     output_high(clk); 
     output_low(clk); 
     output_low(out);//1 
     output_high(clk); 
     output_low(clk); 
     output_high(clk); 
     output_low(clk); 
     break; 
     case 5: 
     output_low(out);//7 
     output_high(clk); 
     output_low(clk); 
     output_high(out);//6 
     output_high(clk); 
     output_low(clk); 
     output_high(out);//5 
     output_high(clk); 
     output_low(clk); 
     output_low(out);//4 
     output_high(clk); 
     output_low(clk); 
     output_high(out);//3 
     output_high(clk); 
     output_low(clk); 
     output_high(out);//2 
     output_high(clk); 
     output_low(clk); 
     output_high(out);//1 
     output_high(clk); 
     output_low(clk); 
     output_low(out);//reset 
     output_high(clk); 
     output_low(clk); 
     break; 
    } 
} 

//============================== 


void main() { 
    while(true) { 
     num(0, pin_a1, pin_a0); 
     delay_ms(2000); 
     num(1, pin_a1, pin_a0); 
     delay_ms(2000); 
     num(2, pin_a1, pin_a0); 
     delay_ms(2000); 
     num(3, pin_a1, pin_a0); 
     delay_ms(2000); 
     num(4, pin_a1, pin_a0); 
     delay_ms(2000); 
     num(5, pin_a1, pin_a0); 
     delay_ms(2000); 
    } 
} 

может кто-то пожалуйста, помогите мне с этой проблемой о том, что я новичок в этом вопросе?

Заранее спасибо.

Nevermind, http://www.ccsinfo.com/forum/viewtopic.php?p=159335

ответ

0

Ваши настройки Прагма/компилятор/компоновщик, кажется, указывают вы строите для размера XXk ROM/EEPROM, но ваша программа нуждается в устройстве> XXk размер. Найдите настройки конфигурации и/или файла заголовка, которые задают размер целевого устройства.

+0

Как я уже говорил, я новичок в этой теме, поэтому я едва понимаю, что вы сказали. Однако, если это имеет какое-либо отношение к изменению настроек файла заголовка, я не думаю, что это сработает, потому что оно написано на основе аппаратного обеспечения (в данном случае PIC16F628A), которое имеет статические (не могут быть изменены) настройки. –

+0

Хорошо. Это исключает заголовочный файл. Это устройство имеет 128 байт памяти данных EEPROM и 3,5 КБ программной памяти. Может ли ваша программа просто быть слишком большой для устройства? – Java42

+0

Я прочитал все, что упоминал аппаратные страницы и команду #separate, однако я этого не понимал: http://www.ccsinfo.com/faq.php?page=out_of_rom –