📄 cyclone32_era.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 + -