今天开始正式学习µC/OS-II UC/OSII UCOS,乱七八糟的,反正就是这个东西吧。采用工具 SOURCE INSIGHT看源代码,BAIDU/GOOGLE搜索关键内容,310-μC/OS-II:实时操作系统内核 Packard Bell NEC, Inc. 一篇中文电子文档。我经验值为0。基本都是做WINDOWS程序,什么东西都不明白。 void main (void) { PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK); /* Clear the screen */ 注释是说清屏 转到函数定义: void PC_DispClrScr (INT8U color) { INT8U far *pscr; INT16U i; pscr = (INT8U far *)MK_FP(DISP_BASE, 0x0000); for (i = 0; i < (DISP_MAX_X * DISP_MAX_Y); i++) { /* PC display has 80 columns and 25 lines */ *pscr++ = ' '; /* Put ' ' character in video RAM */ *pscr++ = color; /* Put video attribute in video RAM */ } } MK_FP函数的定义是: 函数名: MK_FP 功 能: 设置一个远指针 用 法: void far *MK_FP(unsigned seg, unsigned off); 程序例: #include <dos.h> #include <graphics.h> int main(void) { int gd, gm, i; unsigned int far *screen; detectgraph(&gd, &gm); if (gd == HERCMONO) screen = MK_FP(0xB000, 0); else screen = MK_FP(0xB800, 0); for (i=0; i<26; i++) screen[i] = 0x0700 + ('a' + i); return 0; } #include <dos.h> #include <graphics.h> int main(void) { int gd, gm, i; unsigned int far *screen; //char far * screen; detectgraph(&gd, &gm); if (gd == HERCMONO) screen = MK_FP(0xB000, 0); else screen = MK_FP(0xB800, 0); for (i=0; i<26; i+=2) //screen[i] = 0x0700 + ('a' + i); //screen[i*2] = ('a' + i); { screen[i]='a'; screen[i+1]=15; } getchar(); return 0; } 很奇怪,如果定义为unsigned int far,那么这段代码不能打印,如果改为CHAR,那么就可以?!不然就要 0x0700 ,我不明白这个0X0700是作什么用处。 这个函数基本明白了 直接写显存 WINDOWS下自己制作操作系统引导 你将会发现,字符在视频缓冲区中并不是连续存放的,而是每隔一个字节存放一个。这是为什么呢?这是因为一个字符虽然仅占一个字节,但紧接着它的下一个字节要用来存放该字符的颜色值。因此,屏幕上显示的每个字符在计算机内存中都占两个字节:一个字节存放字符本身,另一个字节存放它的颜色值。 这说明了两点:首先,必须把字符写入内存中相隔的字节中,否则你将会只看到相隔的字符,并且带有古怪的颜色。其次,如果要写带颜色的文本,或者改变某个位置原有的颜色,你就需要自己去写相应的颜色字节。如果不这样做,文本仍然会按原来的颜色显示。每个描述颜色的字节既要描述字符的颜色(即前景色),又要描述字符的背景色。一共有16种前景色和16种背景色,分别用颜色字节的低4位和高4位来表示。 这部分内容对一些缺乏经验的程序员来说可能有点复杂,但还是比较容易理解的。只要记住有16种颜色,其编号范围是从。到15,要得到颜色字节的值,只需把前景色的值和背景色值的16倍相加即可。 字体:大 中 小 |