⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 console.c

📁 RT-Thread是发展中的下一代微内核嵌入式实时操作系统
💻 C
字号:
#include <rtthread.h>#define RT_CONSOLE_WIDTH		240#define RT_CONSOLE_HEIGHT		320#define RT_CONSOLE_FONT_WIDTH	8#define RT_CONSOLE_FONT_HEIGHT	16#define RT_CONSOLE_COL			(RT_CONSOLE_WIDTH/RT_CONSOLE_FONT_WIDTH)#define RT_CONSOLE_ROW			(RT_CONSOLE_HEIGHT/RT_CONSOLE_FONT_HEIGHT)#define RT_CONSOLE_TAB			4#define RT_CONSOLE_FOREPIXEL	(0x001f)struct rt_console{	rt_uint8_t* video_ptr;	rt_uint8_t* font_ptr;	/* bpp and pixel of width */	rt_uint8_t bpp;	rt_uint32_t pitch;		/* current cursor */	rt_uint8_t current_col;	rt_uint8_t current_row;};struct rt_console console;void rt_console_init(rt_uint8_t* video_ptr, rt_uint8_t* font_ptr, rt_uint8_t bpp);void rt_console_newline();void rt_console_putc(char c);void rt_console_clear();void rt_console_puts(const char* str);void rt_console_init(rt_uint8_t* video_ptr, rt_uint8_t* font_ptr, rt_uint8_t bpp){	rt_memset(&console, 0, sizeof(struct rt_console));	console.video_ptr = video_ptr;	console.font_ptr = font_ptr;	console.bpp = bpp;	console.pitch = console.bpp * RT_CONSOLE_WIDTH;		rt_console_clear();}void rt_console_putc(char c){	switch (c)	{        case 10:        case 11:        case 12:        case 13:			/* to next line */            rt_console_newline();            console.current_col = 0;            break;        case 9:            console.current_col += RT_CONSOLE_TAB;            break;        default:			{				if (console.current_col == RT_CONSOLE_COL)				{					rt_console_newline();					console.current_row = 0;										rt_console_putc(c);					return;				}				rt_uint8_t* font_ptr = console.font_ptr + c * RT_CONSOLE_FONT_HEIGHT;				register rt_uint32_t cursor = (console.current_row * RT_CONSOLE_FONT_HEIGHT) * console.pitch					+ console.current_col * RT_CONSOLE_FONT_WIDTH * console.bpp;				register rt_uint32_t i, j;				for (i = 0; i < RT_CONSOLE_FONT_HEIGHT; i ++ )				{					for (j = 0; j < RT_CONSOLE_FONT_WIDTH; j ++)					{						if ( ((font_ptr[i] >> (7-j)) & 0x01) != 0 )						{							/* draw a pixel */							rt_uint8_t *ptr = &(console.video_ptr[cursor + i * console.pitch + j * console.bpp]);							switch(console.bpp)							{							case 1:								*ptr = RT_CONSOLE_FOREPIXEL;								break;							case 2:								*(rt_uint16_t*)ptr = RT_CONSOLE_FOREPIXEL;								break;							case 3:								ptr[0] = RT_CONSOLE_FOREPIXEL & 0xff;								ptr[1] = (RT_CONSOLE_FOREPIXEL >> 8) & 0xff;								ptr[2] = (RT_CONSOLE_FOREPIXEL >> 16) & 0xff;								break;							case 4:								*(rt_uint32_t*)ptr = RT_CONSOLE_FOREPIXEL;								break;							}						}					}				}								console.current_col ++;			}			break;	}}void rt_console_newline(){	console.current_row ++;	if (console.current_row >= RT_CONSOLE_ROW)	{		rt_uint32_t i;		/* scroll to next line */		for (i = 0; i < RT_CONSOLE_ROW - 1; i ++)		{			rt_memcpy(console.video_ptr + i * RT_CONSOLE_FONT_HEIGHT * console.pitch,				console.video_ptr + (i + 1) * RT_CONSOLE_FONT_HEIGHT * console.pitch,				RT_CONSOLE_FONT_HEIGHT * console.pitch);		}		/* clear last line */		rt_memset(console.video_ptr + (RT_CONSOLE_ROW - 1) * RT_CONSOLE_FONT_HEIGHT * console.pitch,			0,			RT_CONSOLE_FONT_HEIGHT * console.pitch);				console.current_row = RT_CONSOLE_ROW - 1;	}}void rt_console_clear(){	console.current_col = 0;	console.current_row = 0;		rt_memset(console.video_ptr, 0, RT_CONSOLE_HEIGHT * console.pitch);}void rt_console_puts(const char* str){	while (*str)	{		rt_serial_putc(*str);		str++;	}}

⌨️ 快捷键说明

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