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 + -
显示快捷键?