我不确定这个问题是否应该用于电子产品,但由于它是关于编程的,我在这里问过它。
我正在使用由移位寄存器供电的LED而不是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);
}
}
有人可以帮助我解决这个问题,因为我是这个主题的新手吗?
提前致谢。
答案 0 :(得分:0)
您的编译指示/编译器/链接器设置似乎表明您正在为XXk大小的ROM / EEPROM构建,但您的程序需要一个设备&gt; XXk尺寸。查找用于设置目标设备大小的配置和/或头文件设置。
答案 1 :(得分:0)
我不太确定您对使用此代码的函数有何看法,但错误可能完全如其所述(ROM 外、A 段或程序太大)。
当你使用'output_high'时,程序内存被使用,这意味着所有这些'output_high()和output_low()'占用太多空间。 PIC12F628 只有 2048 字的程序存储器。
尝试使用“output_x()”直接写入整个端口,您可以在其中以十六进制输入整个端口的值。
例如,您将写信给
那么最好写'output_a(0xC1)。 发生的事情完全相同,但您使用的程序内存更少。
针脚分开有
但是当你合并它们时,你必须学习如何添加十六进制。
将门的所有引脚视为二进制数
**Hex: Dec Bin:**
示例 1。
最好写成'output_a(0x07)。
示例 2。
PIN_A7 与 PIN_A3 和 PIN_A0 相加:128+8+1=137 hex(0x89) bin(10001001)。
我认为这应该足以让您知道如何编写程序以节省程序内存。
最好的问候 // 汤米 Hjertezén