因为工作关系,最近的开发平台变成了ucos上面,所以临时突击了一下这方面的内容,看了ucosii,发现上面的代码是在bc上面编译的,鉴于本人是vc的信徒,钟爱vc,所以特别将它移植到了vc上面,以下是我做的一些修改,
1,去网站下载一份支持vc的ucos的代码,网址为http://www.micrium.com/windows/index.html#rtosports
2,去下载一份ucosii书本对应的borland的代码,作者该版本上写了pc.c作为控制台的输出,这部分需要我们更改,更改后如下:
#include "WIN_ConsuleGUI.h"
#include <windows.h>
#include <Winuser.h>
#include <time.h>
static void gotoxy(INT16U x, INT16U y)
{
COORD c;
c.X = x ;
c.Y = y ;
SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
}
void PC_DispStr(INT16U x, INT16U y, char *str, INT8U color)
{
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
gotoxy(x,y);
SetConsoleTextAttribute(hOut,160 );
printf("%s",str);
}
void PC_DispChar(INT16U x, INT16U y, char c, INT8U color)
{
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
gotoxy(x,y);
// SetConsoleTextAttribute(hOut,160 );
printf("%c",c);
}
void PC_DispClrScr(INT8U Mode)
{
HANDLE hConsole=GetStdHandle(STD_OUTPUT_HANDLE);
// COORD coordScreen={2*head.coord.x,5}; //清屏后返回的坐标
COORD coordScreen={0,5};
BOOL bSuccess;
DWORD cCharsWritten ;
CONSOLE_SCREEN_BUFFER_INFO csbi;//保存缓冲区信息
DWORD dwConSize;//当前缓冲区可容纳的字符数
GetConsoleScreenBufferInfo(hConsole,&csbi);//获得缓冲区信息
dwConSize=csbi.dwSize.X * csbi.dwSize.Y;//缓冲区容纳字符数目
// dwConSize=(head.coord.x-tail.coord.x+1);
// SetConsoleTextAttribute(hConsole,200);
//用空格填充缓冲区
bSuccess=FillConsoleOutputCharacter(hConsole,(TCHAR)' ',dwConSize,coordScreen,&cCharsWritten);
//能不能去除背景呀!!
// bSuccess=GetConsoleScreenBufferInfo(hConsole,&csbi);//获得缓冲区信息
// cout<<"uuuuuuuuuuuuuuu"<<endl;
//填充缓冲区属性
// bSuccess=FillConsoleOutputAttribute(hConsole,csbi.wAttributes,dwConSize,coordScreen,&cCharsWritten);
//光标返回屏幕左上角坐标
bSuccess=SetConsoleCursorPosition(hConsole,coordScreen);
}
static void SetWindows(HANDLE hOut)
{
COORD size = {125, 44};
SMALL_RECT rc = {0,0, 125, 25}; // 重置窗口位置和大小
CONSOLE_SCREEN_BUFFER_INFO bInfo;
GetConsoleScreenBufferInfo(hOut, &bInfo ); // 获取窗口缓冲区信息
SetConsoleScreenBufferSize(hOut,size); // 重新设置缓冲区大小
SetConsoleWindowInfo(hOut,TRUE ,&rc);
// CloseHandle(hOut); // 关闭标准输出设备句柄
}
void PC_GUIInit()
{
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetWindows(hOut);
}
void PC_GUI_UnInit()
{
}
3.屏蔽所有编译有问题的代码,你就可以看到运行结果了,另外,注意的是在ucos测试的主函数模块记得初始化一下GUI,也就是调用PC_GUIInit()。当然,目前这样有个问题是它在统计cpu数据的时候不准确,问题怎么解决还没想好,希望有同行看到帮忙一下。
jeyawn