📄 com.c
字号:
/*************************************** Copyright (c) *************************************************
*
* POLAR STAR
* 北天星国际有限公司
* http://www.po-star.com
*
*文 件 名: com.c
*
*编译环境:ADS1.2
*
********************************************************************************************************/
#include <stdio.h>
#include <string.h>
#include "main.h"
#include "com.h"
static char erase_seq[] = "\b \b"; /* erase sequence */
static char tab_seq[] = " "; /* used to expand TABs */
FILE __stdout;
FILE __stdin;
int fputc(int ch, FILE *f)
{
/* Our implementation of fputc */
while (!AT91F_US_TxReady((AT91PS_USART)AT91C_BASE_DBGU));
AT91F_US_PutChar((AT91PS_USART)AT91C_BASE_DBGU, (char)ch);
return ch;
}
int fgetc(FILE *f)
{
while(!AT91F_US_RxReady((AT91PS_USART)AT91C_BASE_DBGU));
return((int)AT91F_US_GetChar((AT91PS_USART)AT91C_BASE_DBGU));
}
//*-----------------------------------------------------------------------------
//* Function Name : AT91F_ClrScr()
//* Object : Send a clear screen on the USART
//* Input Parameters :
//* Return value :
//*-----------------------------------------------------------------------------
void AT91F_ClrScr(void)
{
printf(CLRSCREEN);
}
//*-----------------------------------------------------------------------------
//* Function Name : AsciiToHex()
//* Object : ascii to hexa conversion
//* Input Parameters :
//* Return value :
//*-----------------------------------------------------------------------------*/
unsigned int AsciiToHex(char *s, unsigned int *val)
{
int n;
*val=0;
if(s[0] == '0' && ((s[1] == 'x') || (s[1] == 'X')))
s+=2;
n = 0;
while((n < 8) && (s[n] !=0))
{
*val <<= 4;
if ( (s[n] >= '0') && (s[n] <='9'))
*val += (s[n] - '0');
else
if ((s[n] >= 'a') && (s[n] <='f'))
*val += (s[n] - 0x57);
else
if ((s[n] >= 'A') && (s[n] <='F'))
*val += (s[n] - 0x37);
else
return 0;
n++;
}
return 1;
}
//*-----------------------------------------------------------------------------
//* Function Name : AT91F_DeleteChar()
//* Object :
//* Input Parameters :
//* Return value :
//*-----------------------------------------------------------------------------
char *AT91F_DeleteChar(char *buffer, char *p, int *colp, int *np, int plen)
{
char *s;
if (*np == 0) {
return (p);
}
if (*(--p) == '\t') { /* will retype the whole line */
while (*colp > plen) {
printf(erase_seq);
(*colp)--;
}
for (s=buffer; s<p; ++s) {
if (*s == '\t') {
printf(tab_seq+((*colp) & 07));
*colp += 8 - ((*colp) & 07);
} else {
++(*colp);
fputc (*s, &__stdout);
}
}
} else {
printf(erase_seq);
(*colp)--;
}
(*np)--;
return (p);
}
//*-----------------------------------------------------------------------------
//* Function Name : AT91F_ReadLine()
//* Object :
//* Input Parameters :
//* Return value :
//*-----------------------------------------------------------------------------
int AT91F_ReadLine (const char *const prompt, char *console_buffer)
{
char *p = console_buffer;
int n = 0; /* buffer index */
int plen = strlen (prompt); /* prompt length */
int col; /* output column cnt */
char c;
/* print prompt */
if (prompt)
printf(prompt);
col = plen;
for (;;) {
c = fgetc(&__stdin);
switch (c) {
case '\r': /* Enter */
case '\n':
*p = '\0';
printf ("\r\n");
return (p - console_buffer);
case 0x03: /* ^C - break */
console_buffer[0] = '\0'; /* discard input */
return (-1);
case 0x15: /* ^U - erase line */
while (col > plen) {
printf(erase_seq);
--col;
}
p = console_buffer;
n = 0;
continue;
case 0x17: /* ^W - erase word */
p = (char *)AT91F_DeleteChar(console_buffer, p, &col, &n, plen);
while ((n > 0) && (*p != ' ')) {
p=(char *)AT91F_DeleteChar(console_buffer, p, &col, &n, plen);
}
continue;
case 0x08: /* ^H - backspace */
case 0x7F: /* DEL - backspace */
p=(char *)AT91F_DeleteChar(console_buffer, p, &col, &n, plen);
continue;
default:
/*
* Must be a normal character then
*/
if (n < (AT91C_CB_SIZE -2))
{
++col; /* echo input */
fputc(c, &__stdout);
*p++ = c;
++n;
}
else
{ /* Buffer full */
fputc ('\a', &__stdout);
}
}
}
}
//*-----------------------------------------------------------------------------
//* Function Name : AT91F_WaitKeyPressed()
//* Object :
//* Input Parameters :
//* Return value :
//*-----------------------------------------------------------------------------
/*void AT91F_WaitKeyPressed(void)
{
int c;
printf("Hit a Key!");
c = fgetc(&__stdin);
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -