⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cyclone32_era.c

📁 ALTERA的NIOS处理器!文件直接可以打开直接选择器件重新编译!
💻 C
字号:
/************************************************
 * cyclone32_era.c                              *
 * Peter Schrammel                              *
 * e0125015@student.tuwien.ac.at                *
 * 2004-01-22                                   *
 * Input: upper bound of range for calculating  *
 *	  primes                                *
 * Output: list of primes, percentage of primes *
 *         within the range                     *
 ************************************************/
#include "nios.h"

#define MAX_VALUE 260000 

#define FALSE  (0)
#define TRUE   (!0)

#define TIMER1_PERIOD_LOW        (0x6C00)
#define TIMER1_PERIOD_HIGH       (0x02DC)

long gData[MAX_VALUE];

/*
void isr_timer(int context)
  {
  na_timer1->np_timerstatus |= 0x01;
  }
*/

void uart_txdec(long pNumber)
{
  char lBuf[6];
  int i=0;
  int j=0;
  while(pNumber>0)
    {
    lBuf[i]=pNumber%10;
    pNumber/=10;
    i++;
    }
  for(j=i-1;j>=0;j--)
    nr_txchar(lBuf[j]+'0');
}

/* returns a single character received*/
char uart_rxchar()
{
  int lResult; 
  while((lResult=nr_rxchar())==0xFFFFFFFF);
  nr_txchar(lResult); //echo
  return (char)lResult;
}



int main(void)
  {
    /*
  nr_installuserisr(na_timer_irq,&isr_timer,0);
  na_timer->np_timercontrol |= 0x08; // stop timer 
  na_timer->np_timercontrol = 0x03;  // continuous mode, enable ir
  na_timer->np_timerperiodl = TIMER1_PERIOD_LOW;
  na_timer->np_timerperiodh = TIMER1_PERIOD_HIGH;
  na_timer->np_timercontrol |= 0x04; // start timer 
    */
  nr_uart_txstring("Eratosthenes");
  for(;;)
    {
    long i=0;
    long lCnt=0;
	long lMax=0;
	int lError=FALSE;
    nr_uart_txstring("\nmax> ");
	//read max 
	while(1)
	  {
	  char lChar = uart_rxchar();
	  if((lChar>='0')&&(lChar<='9'))
		lMax=(lMax*10)+(lChar-'0');
	  else
	    if(lChar=='\r')
		  {
	      if(uart_rxchar()!='\n') lError=TRUE;
	      break;
		  }
		else 
	      {
		  lError=TRUE;
		  break;
	      }
	  }
  if((lError==TRUE)||(lMax>MAX_VALUE)||(lMax<2))
    nr_uart_txstring("\ninvalid");
  else
    {
    nr_uart_txstring("Initializing memory... ");
    for(i=0;i<=MAX_VALUE;i++)
      gData[i]=0;
    nr_uart_txstring("done\n");
    nr_uart_txstring("Found following primes: \n");
    for(i=2;i<=lMax;i++)
      {
      if(gData[i]==0)
        {
        long j=0;
        lCnt++;
        uart_txdec(i);
        nr_uart_txcr();
        for(j=2*i;j<=lMax;j=j+i)
	      gData[j]=0xFFFFFFFF;
        }
      }
    nr_uart_txstring("done\n");
    uart_txdec(lCnt);
    nr_uart_txstring(" primes found (");
    uart_txdec(nm_divi((100*lCnt),lMax));
    nr_uart_txstring("%)\n");
    }
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -