main.c

来自「博创2410的实验代码」· C语言 代码 · 共 227 行

C
227
字号
/***************************************************************************\
	Copyright (c) 2004-2007 threewater@up-tech.com, All rights reserved.
	by threewter	2004.5.12
\***************************************************************************/
/***************************************************************************\
    #说明: C  main 函数,ucos-ii初始化等定义
	----------------------------------  Bug  --------------------------------------

	----------------------------------  TODO list  --------------------------------------

	----------------------------------修正--------------------------------------
	2004-5-12	创建

\***************************************************************************/
#define U8 unsigned char
#include <string.h>
#include <stdio.h>
#include <stdarg.h>
#include "..inc/cpu.h"
#include "..inc/serial-2410.h"
#define TRUE 	1
#define FALSE 	0
#pragma import(__use_no_semihosting_swi)  // ensure no functions that use semihosting 

#define rUTRSTAT0	(*(volatile unsigned *)0x50000010)
#define rUTRSTAT1	(*(volatile unsigned *)0x50004010)
#define WrUTXH0(ch)	(*(volatile unsigned char *)0x50000020)=(unsigned char)(ch)
#define WrUTXH1(ch)	(*(volatile unsigned char *)0x50004020)=(unsigned char)(ch)
#define RdURXH0()	(*(volatile unsigned char *)0x50000024)
#define RdURXH1()	(*(volatile unsigned char *)0x50004024)
void Uart_SendString(int Uartnum, char *pt);
void Uart_SendByten(int Uartnum, U8 data);
char Uart_Getchn(char* Revdata, int Uartnum, int timeout);

void ARMTargetInit(void);
void hudelay(int time);
void Uart_Printf(char *fmt,...);


	void Uart_SendByten(int Uartnum, U8 data)//ok eric rong
{   //int i;
	if(Uartnum==0)
    {
		while(!(rUTRSTAT0 & 0x4)); //Wait until THR is empty.
		
		hudelay(10);
		WrUTXH0(data);
   	}
	else
    {
		while(!(rUTRSTAT1 & 0x4));  //Wait until THR is empty.
		
		hudelay(10);
		WrUTXH1(data);
    }	
}		

   char Uart_Getchn(char* Revdata, int Uartnum, int timeout)
{
	
	if(Uartnum==0){
		while(!(rUTRSTAT0 & 0x1)); //Receive data read
		*Revdata=RdURXH0();
		return TRUE;
	}
	else{
		while(!(rUTRSTAT1 & 0x1));//Receive data read
		*Revdata=RdURXH1();
		return TRUE;
	}
}	

void Uart_SendString(int Uartnum, char *pt)
{
	while(*pt){
		if(*pt=='\n'){
			Uart_SendByten(Uartnum, '\r');
			Uart_SendByten(Uartnum, *pt++);
		}
		else
			Uart_SendByten(Uartnum, *pt++);
	}
}

void Uart_Printf(char *fmt,...)
{
    va_list ap;
    char string[256];

    va_start(ap,fmt);
    vsprintf(string,fmt,ap);
    Uart_SendString(0, string);
    va_end(ap);
}




/********************************************************************
// Function name	: Uart_GetString
// Description	    : get a string from current uart
// Return type		: void
// Argument         : char *string : received string buffer point
*********************************************************************/
void Uart_GetString(char *string)
{
    char *string2=string;
    char c1[1],c;
    Uart_Getchn(c1,0,0);
    c=c1[0];
    while(c!='\r')
    {
		if(c=='\b')
		{
		    if(	(int)string2 < (int)string )
		    {
			Uart_Printf("\b \b");
			string--;
		    }
		}
		else 
		{
		    *string++=c;
		    Uart_SendByten(0,c);	
		}
    Uart_Getchn(c1,0,0);
    c=c1[0];
    }
    *string='\0';
    Uart_SendByten(0,'\n');
}

/********************************************************************
// Function name	: Uart_GetIntNum
// Description	    : get a int type var from current uart
// Return type		: int : received int value
// Argument         : void
*********************************************************************/
int Uart_GetIntNum(void)
{
    char str[30];
    char *string=str;
    int base=10;
    int minus=0;
    int lastIndex;
    int result=0;
    int i;
    
    Uart_GetString(string);
    
    if(string[0]=='-')
    {
        minus=1;
        string++;
    }
    
    if(string[0]=='0' && (string[1]=='x' || string[1]=='X'))
    {
		base=16;
		string+=2;
    }
    
    lastIndex=strlen(string)-1;
    if( string[lastIndex]=='h' || string[lastIndex]=='H' )
    {
		base=16;
		string[lastIndex]=0;
		lastIndex--;
    }

    if(base==10)
    {
		result=atoi(string);
		result=minus ? (-1*result):result;
    }
    else
    {
		for(i=0;i<=lastIndex;i++)
		{
	    	if(isalpha(string[i]))
		    {
				if(isupper(string[i]))
				    result=(result<<4)+string[i]-'A'+10;
				else
				    result=(result<<4)+string[i]-'a'+10;
		    }
		    else
		    {
				result=(result<<4)+string[i]-'0';
		    }
		}
		result=minus ? (-1*result):result;
    }
    return result;
}



int main(void)
{   int sum,i=10,k;
 
    char c1[1];
    char err;
	ARMTargetInit();        // do target (uHAL based ARM system) initialisation //
    serial_init(0, 115200);
	
	Uart_Printf("\nhello,world!\n");
	while(1)
	{sum=0;
	Uart_Printf("\nPlease input number you want to calculate:\n");
    k=Uart_GetIntNum();
	for(i=0;i<=k;i++)
	sum+=i;
	
	Uart_Printf("\nthe sum is%d",sum);
    }  

	
	
}
	





⌨️ 快捷键说明

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