文档章节

LiteOS-内核C代码-屏幕输出

梦想游戏人
 梦想游戏人
发布于 2017/05/14 22:14
字数 405
阅读 122
收藏 1

终于可以开始用C来写代码了

内核启动代码,

#include "src/main.h"

const   char *VGA_BUFFER = (const char*)0x000b8000;// vga 显存开始地址

int kernel_entry()
{
	while (1)
	{
		main();
	}
	return 0;
}

main.c

#include "stdio.h"
#include "def.h"

void print_logo()
{
	printf("LiteOS 1.0 (c) 2013-2017 dreamyouxi.com\n\n");
	printf("*     *  *****  *****  \n");
	printf("*          *    *         \n");
	printf("*     *    *    *****  \n");
	printf("*     *    *    *         \n");
	printf("****  *    *    *****   OS 1.0 \n");
}

int main()
{
	print_logo();


	flush();


	while (1)
	{

	}
	return 0;
}

由于没有标准库,因此printf等这些标准库函数都要自己实现

VGA 13h显示模式下的显存首地址为0x0b8000 因此在这里面写数据即可

该模式下的屏幕是80(长度x)*25(高度y)*2字节,2字节为 char + 颜色(16色)

下面是颜色代码:(如 color fc 为亮白色产生亮红色,第一个背景,第二个前景)
    0 = 黑色       8 = 灰色
    1 = 蓝色       9 = 淡蓝色
    2 = 绿色       A = 淡绿色
    3 = 湖蓝色     B = 淡浅绿色
    4 = 红色       C = 淡红色
    5 = 紫色       D = 淡紫色
    6 = 黄色       E = 淡黄色
    7 = 白色       F = 亮白色

0x0f就是黑背景,亮白色的数据 ,VGA还有其他显示模式,在此不展开

 

stdio.c,实现printf

void printf(const char*str)
{
	current_std_out_offset += strcpy((void*)(STD_OUT + current_std_out_offset), (void*)str);
}

void flush()
{
	cmd_cls();//clear
	unsigned int i = 0, ii = 0;
	char* out = VGA_BUFFER;
	out = VGA_BUFFER;
	char* out_buffer = (char*)STD_OUT;
	for (i = 0, ii = 0; '\0' != out_buffer[ii] && ii < VGA_BUFFER_MAX_OFFSET; ii++)
	{// left-up is (0,0);
		if (out_buffer[ii] == '\n')
		{
			i = (i / (VGA_X_BUFFER_SIZE)+1) * VGA_X_BUFFER_SIZE;
			continue;
		}
		out[i++] = out_buffer[ii];
		out[i++] = 0x0f;

	}
	current_std_out_offset = 0;
}

基本思想是通过标准函数来输出,然后实现这些标准函数,这些标准函数以后可以提供给可执行代码,

 

生成后vm运行

 

实模式下的内存地址范围

© 著作权归作者所有

共有 人打赏支持
梦想游戏人
粉丝 34
博文 420
码字总数 119565
作品 0
成都
Contiki、TinyOS、LiteOS、Nano-RK、t-Kernel的操作系统性能和利弊

来至SICS的权威比较分析报告。 报告中比较了Contiki、TinyOS、LiteOS、Nano-RK、t-Kernel的操作系统性能和利弊,对于广大的物联网研究者和应用开发者不无裨益。 http://www.smeshlink.com/a...

龙鸟
2012/09/22
0
0
物联网将呈爆发式发展,华为OceanConnect物联网平台连接海量设备

前不久全球5G标准的确立,对物联网产业来说是极大的推动力。经过前几年的技术发展,NB-IoT、eLTE、LoRa等市场相继启动。预计2020年,物联网连接数将到达300亿;2025年将达到近1000亿。其中,...

云科技时代
06/28
0
0
华为沟通会:“吓人的”GPU Turbo技术核心思路公开

近两周围绕余承东口中“吓人的技术”GPU Trubo图形处理技术外界有着许多猜测与解读。基于此,华为召开了一场EMUI主题沟通会。从系统到新技术做了讲解。首先是数据上的一些分享,目前EMUI的日...

程序师
07/02
0
0
无华为,不智慧:智慧城市建设为何少不了华为?

2016年11月17日,深圳,高交会,一向低调、内敛的华为出人意料地喊出了一个霸气的口号:无华为,不智慧!与笔者预想的一样,这个口号一亮,立即霸占了各大媒体的头条,并刷爆了IT通信人士的朋...

玄学酱
05/07
0
0
仅研发就投入3300人 华为如何掘金物联网?

近年来的科技互联网领域,物联网(IoT)无疑是最热门的词汇之一。早在2015年,华为就预测,到2025年全球将有1000亿联接。其中,90%的联接属于人与人之外的人与物、物与物的联接。同年晚些时候...

玄学酱
04/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

(一)软件测试专题——之Linux常用命令篇01

本文永久更新地址:https://my.oschina.net/bysu/blog/1931063 【若要到岸,请摇船:开源中国 不最醉不龟归】 Linux的历史之类的很多书籍都习惯把它的今生来世,祖宗十八代都扒出来,美其名曰...

不最醉不龟归
28分钟前
6
0
蚂蚁金服Java开发三面

8月20号晚上8点进行了蚂蚁金服Java开发岗的第三面,下面开始: 自我介绍(要求从实践过程以及技术背景角度着重介绍) 实习经历,说说你在公司实习所做的事情,学到了什么 关于你们的交易平台...

edwardGe
34分钟前
7
0
TypeScript基础入门 - 函数 - this(三)

转载 TypeScript基础入门 - 函数 - this(三) 项目实践仓库 https://github.com/durban89/typescript_demo.gittag: 1.2.4 为了保证后面的学习演示需要安装下ts-node,这样后面的每个操作都能...

durban
44分钟前
0
0
Spark core基础

Spark RDD的五大特性 RDD是由一系列的Partition组成的,如果Spark计算的数据是在HDFS上那么partition个数是与block数一致(大多数情况) RDD是有一系列的依赖关系,有利于Spark计算的容错 RDD中每...

张泽立
52分钟前
0
0
如何搭建Keepalived+Nginx+Tomcat高可用负载均衡架构

一.概述 初期的互联网企业由于业务量较小,所以一般单机部署,实现单点访问即可满足业务的需求,这也是最简单的部署方式,但是随着业务的不断扩大,系统的访问量逐渐的上升,单机部署的模式已...

Java大蜗牛
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部