首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

并行接口设计

并行接口设计

大家好,最近在做一个基于avalon总线的并行接口,想用最简单的方法:4x4键盘输入,7段数码管输出 的方法来验证扩展好的接口。

虽然程序很简单,但在Nios II IDE中编译时老出错,错误信息如下:


***blank_project_0.elf] Error 1

/cygdrive/c/altera/kits/nios2/bin/nios2-gnutools/H-i686-pc-cygwin/bin/../lib/gcc/nios2-elf/3.4.1/../../../../nios2-elf/bin/ld address 0x2304 of blank_project_0.elf section .onchip_ROM is not within region onchip_ROM blank_project_0  line 0 

/cygdrive/c/altera/kits/nios2/bin/nios2-gnutools/H-i686-pc-cygwin/bin/../lib/gcc/nios2-elf/3.4.1/../../../../nios2-elf/bin/ld region onchip_RAM is full (blank_project_0.elf section .rwdata). Region needs to be 1016 bytes larger. blank_project_0  line 0 

/cygdrive/c/altera/kits/nios2/bin/nios2-gnutools/H-i686-pc-cygwin/bin/../lib/gcc/nios2-elf/3.4.1/../../../../nios2-elf/bin/ld region onchip_ROM is full (blank_project_0.elf section .text). Region needs to be 2860 bytes larger. blank_project_0  line 0

 /cygdrive/c/altera/kits/nios2/bin/nios2-gnutools/H-i686-pc-cygwin/bin/../lib/gcc/nios2-elf/3.4.1/../../../../nios2-elf/bin/ld section .bss [00001020 -> 00001133] overlaps section .text [00000820 -> 00001b2b] blank_project_0  line 0 

 /cygdrive/c/altera/kits/nios2/bin/nios2-gnutools/H-i686-pc-cygwin/bin/../lib/gcc/nios2-elf/3.4.1/../../../../nios2-elf/lib/mno-hw-mul/libc.a * section .bss [00001020 -> 00001133] overlaps section .text [00000820 -> 00001b2b]  In function `_sbrk_r': blank_project_0  line 0 

Unable to reach errno (at 0x00001024) from the global pointer (at 0x000097d0) because the offset (-34732) is out of the allowed range, -32678 to 32767.[/build/nios2/bin/nios2-gnutools/src/newlib/newlib/libc/reent/sbrkr.c] blank_project_0  line 59

no newline at end of file third.c blank_project_0 line 49

代码很简单,主要思想就是用逐行扫描法来确定所按的键,然后输出,其中delay()是防止键抖动的函数。


#include "system.h"
#include <io.h>

void delay(void);

int main (void)
{
  int i, j, col, row;
  while(1)
  {
    IOWR_8DIRECT(0x00001400, 0x00, 0xf);

    delay();
    if(IORD_8DIRECT(0x00001400, 0x00) != 0xf)
    {
      row=1;
      for(i=0;i<4;i++)
      {
        IOWR_8DIRECT(0x00001400, 0x00, row);

        delay();
        col=IORD_8DIRECT(0x00001400, 0x00);
        if(col != 0xf)
        {
          col=~col;
          for(j=0;j<4;j++)
          {
            col>>=1;
            if(col == 0)
            {
              break;
            }
          }
          break;
        }
        row<<=1;
      }
    }
    if(i<4)
    {
      IOWR_8DIRECT(0x00001400, 0x01, i*4+j);
    }
    while(IORD_8DIRECT(0x00001400, 0x00) != 0xf);
  }
  return 0;
}

void delay(void)
{
  int p=1;
  while(p++<3000);
}

在下新学SOPC,请各位大虾指教,谢谢~



[此贴子已经被作者于2007-3-31 10:21:01编辑过]

补充以下:

存储器使用的是片内RAM和ROM,前者1k,后者2k

板子是ep1c6q240c8,要是加大RAM或者ROM的话,硬件编译时就会出错,例如2kRAM和4kROM

 Region needs to be 1016 bytes larger

你的片上资源用完了,你可以将ram配置小一些。

[此贴子已经被作者于2007-4-1 9:50:26编辑过]

这个版主不太冷 =========================== 我的中电网博客:http://blog.chinaecnet.com/u/20/index.htm

如果要是把RAM配置得少一些的话,那系统又会报错说RAM不够,

1楼的错误报告里也显示RAM和ROM都不够。可我这个程序这么小,

我就怀疑是不是我什么地方写错了,或者是编译配置有问题。

我在System Library Properties里面将Program Memory设为ROM,

其他的设为RAM,试过了,不行;将Program Memory和Read-only data memory

都设为ROM,之后错误报告如下:

 /cygdrive/c/altera/kits/nios2/bin/nios2-gnutools/H-i686-pc-cygwin/bin/../lib/gcc/nios2-elf/3.4.1/../../../../nios2-elf/bin/ld address 0x1b10 of blank_project_0.elf section .onchip_ROM is not within region onchip_ROM blank_project_0  line 0

 /cygdrive/c/altera/kits/nios2/bin/nios2-gnutools/H-i686-pc-cygwin/bin/../lib/gcc/nios2-elf/3.4.1/../../../../nios2-elf/bin/ld region onchip_ROM is full (blank_project_0.elf section .text). Region needs to be 1848 bytes larger. blank_project_0  line 0 

 /cygdrive/c/altera/kits/nios2/bin/nios2-gnutools/H-i686-pc-cygwin/bin/../lib/gcc/nios2-elf/3.4.1/../../../../nios2-elf/bin/ld section .bss [000017f4 -> 00001907] overlaps section .rwdata [0000133c -> 00001b0f] blank_project_0  line 0

此时RAM有2312Bytes,ROM有3k,看上面的报告,应该是RAM够了,可ROM缺很多。可硬件编译时发现,M4K的 RAM blocks 已经用完了。

所以就不能再添加,感觉RAM和ROM加起来最多就5k多一点,怎么分配都不行。所以我才怀疑是不是程序问题,可这么简单的程序,天啦!

系统提示.elf .text  Region needs to be 1848 bytes larger,是说你的片上资源少了,需要大点的。

我想是你的rom不够大,ram够了。可以将你的步骤说详细些吗?

你可以先使用小的模版,如hello world small等

如果你的系统全在片上,你可以不用rom,只用ram就可以了,因为ram由epcs初始化,所以程序已经保存了。要将System Library选项中中的.text和.rodata选择在ram中运行。

在NIOS II IDE中工程的System Library选项中的这几个选项代表什么意思?
.text .rodata .rwdata 与reset .exception这几个地址之间的关系是什么?

答:.text : 代码区 .rodata:只读数据区,一般存放静态全局变量 .rwdata:可读写变量数据区另外还有.bss:存放未被初始化的变量。

■ .text — the actual executable code
■ .rodata — any read only data used in the execution of the code
■ .rwdata — where read/write variables and pointers are stored
■ heap — where dynamically allocated memory is located
■ stack — where function call parameters and other temporary data is stored

[此贴子已经被作者于2007-4-3 14:30:57编辑过]

这个版主不太冷 =========================== 我的中电网博客:http://blog.chinaecnet.com/u/20/index.htm
似乎还是不行,后来加了片SRAM,存在里面好像硬件编译通过了,正在软件调试中,谢谢
返回列表