📄 console.c
字号:
#include <stdarg.h>
#include "system.h"
#include "types.h"#include "console.h"//#include "utils.h"
int console_init(void){ HAL_WRITE_UINT32(URT_SERIAL1_BASE+URT_BAUD_LO,BAUD_RATE_38400_LO);
HAL_WRITE_UINT32(URT_SERIAL1_BASE+URT_BAUD_HI,BAUD_RATE_38400_HI);
HAL_WRITE_UINT32(URT_SERIAL1_BASE+URT_STAT,0x0); HAL_WRITE_UINT32(URT_SERIAL1_BASE+URT_INT_MODE,0x88);
HAL_WRITE_UINT32(URT_SERIAL1_BASE+URT_INT_ENA,0x0); return 0;}
int console_write(char c){ unsigned long status;
while(1){
HAL_READ_UINT32(URT_SERIAL1_BASE + URT_STAT,status);
if(status & XMIT_FIFO_FULL)
continue;
else
break;
}
HAL_WRITE_UINT8(URT_SERIAL1_BASE,c);
}
char console_read(void){ char c;
unsigned long status;
while(1){
HAL_READ_UINT32(URT_SERIAL1_BASE + URT_STAT,status);
if( (status & RECV_AVAIL_MASK) == 0)
break;
else
continue;
}
HAL_READ_UINT8(URT_SERIAL1_BASE,c);
return c;}
char getch(void){ return console_read();}int putch(char ch){ return console_write(ch);}int puts(const char *s){ while (*s != 0) { putch(*s++); } return 0;}void gets (char * buf, int n){ int i; for(i = 0;i< n; i ++) { buf[i] = (char )getch(); if (buf[i] == CR){ //putch(LF); putch(CR); break; } else { if(buf[i] == KEY_BACKSPACE) { if (i >= 1) buf[i-1] = 0; else { buf[i]= 0; i --; continue; } putch(KEY_BACKSPACE); putch(' '); putch(KEY_BACKSPACE); i -= 2; continue; } else putch(buf[i]); } } if (i == n) { //putch(LF); putch(CR); } buf[i] = '\0'; return;}/*void gets(char *s, int n){ char *p; int ch; int i ; p = s; for(i = 0 ;; i ++) { ch = getch(); if (ch == KEY_ENTER) { putch(LF); putch(CR); break; } if (ch == KEY_BACKSPACE) { if (i == 0 ) continue; else { putch(ch); i--; } if(p > s) { p--; putch(ch); continue; } } if ((p - s) < (n - 1)) { i++; *p++ = (char)ch; putch(ch); } } *p = '\0'; return ;}
*/
unsigned long getul(unsigned long def){ char buf[11]; char *p = buf; long hex;
int i;
int n; gets(buf,11); if (buf[0] == '\0') return def; buf[10] = '\0'; if ((buf[0]== '0' ) && ((buf[1]== 'x')||(buf[1] == 'X')) ) p = &buf[2]; //printf("%s \r\n",buf); //printf("%s\r\n",p);
return strtoul(p, 0, 16);}
void print_0nx(char ch2, unsigned long l)
{ unsigned char ch;
int i;
ch2 = ch2 - '0'; for (i = ch2 - 1; i >= 0; i--) { ch = (l >> (i * 4)) & 0x0f; if (ch < 10) putch(ch + '0'); else putch(ch - 10 + 'a'); }}
void print_d(unsigned long l)
{
unsigned long t;
unsigned char ch;
int i, j, k ;
char buf[8];
memset(buf,'0',8);
t = l;
k = 7;
for(;;)
{
if (t > 9)
{
i = t % 10;
}else
i = t;
if (i < 10){
buf[k--] = i + '0';
}
if (t < 9)
break;
t /= 10;
}
j = 0;
for(i =0 ;i < 8 ; i ++)
{
if(buf[i] != '0')
j = 1;
if (j)
putch(buf[i]);
}
/* unsigned long prod, t; int flag = 0;
unsigned char ch;
int i, j;
for (i = 15; i >= 0; i--) { prod = 1; t = l; for (j = 0; j < i; j++) { prod = prod * 10; t = t / 10; }
ch = t; l -= prod * t; if (ch == 0 && flag == 0) continue; if (ch < 10)
putch(ch + '0'); else putch('?'); flag = 1; }*/
}
void print_x(unsigned long l)
{ unsigned long t; unsigned char ch;
int i, j, k ; char buf[8]; memset(buf,'0',8); t = l;
k = 7;
for(;;)
{
if (t > 15)
{
i = t % 16;
}else
i = t;
if (i < 10){
buf[k--] = i + '0';
}
else
if(i < 16)
{
buf[k--] = i -10 +'a';
}
if (t < 15)
break;
t >>= 4;
}
for(i =0 ;i < 8 ; i ++)
putch(buf[i]);}
int printf(const char *s, ...)
{
va_list ap;
unsigned long arg; const char *str;
char ch1, ch2, ch3;
va_start(ap, s);
while (*s != 0) {
if (*s == '%') {
s++;
ch1 = *s++;
if (ch1 == 's') {
str = va_arg(ap, unsigned char *);
puts(str);
}else if (ch1 == 'd') { arg = va_arg(ap, unsigned long); print_d(arg);
} else if (ch1 == 'x') { arg = va_arg(ap, unsigned long); print_x(arg);
}else {
ch2 = *s++;
ch3 = *s++;
arg = va_arg(ap, unsigned long);
print_0nx(ch2, arg);
}
} else
putch(*s++);
}
va_end(ap);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -